mirror of https://github.com/requarks/wiki
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
109 lines
2.5 KiB
109 lines
2.5 KiB
3 years ago
|
const Model = require('objection').Model
|
||
|
const crypto = require('crypto')
|
||
|
const pem2jwk = require('pem-jwk').pem2jwk
|
||
|
const _ = require('lodash')
|
||
|
|
||
|
/* global WIKI */
|
||
|
|
||
|
/**
|
||
|
* Site model
|
||
|
*/
|
||
|
module.exports = class Site extends Model {
|
||
|
static get tableName () { return 'sites' }
|
||
|
|
||
|
static get jsonSchema () {
|
||
|
return {
|
||
|
type: 'object',
|
||
|
required: ['hostname'],
|
||
|
|
||
|
properties: {
|
||
|
id: { type: 'string' },
|
||
|
hostname: { type: 'string' },
|
||
|
isEnabled: { type: 'boolean', default: false }
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
static get jsonAttributes () {
|
||
|
return ['config']
|
||
|
}
|
||
|
|
||
|
static async createSite (hostname, config) {
|
||
|
const newSite = await WIKI.models.sites.query().insertAndFetch({
|
||
|
hostname,
|
||
|
isEnabled: true,
|
||
|
config: _.defaultsDeep(config, {
|
||
|
title: 'My Wiki Site',
|
||
|
description: '',
|
||
|
company: '',
|
||
|
contentLicense: '',
|
||
|
defaults: {
|
||
|
timezone: 'America/New_York',
|
||
|
dateFormat: 'YYYY-MM-DD',
|
||
|
timeFormat: '12h'
|
||
|
},
|
||
|
features: {
|
||
|
ratings: false,
|
||
|
ratingsMode: 'off',
|
||
|
comments: false,
|
||
|
contributions: false,
|
||
|
profile: true,
|
||
|
search: true
|
||
|
},
|
||
|
logoUrl: '',
|
||
|
logoText: true,
|
||
|
robots: {
|
||
|
index: true,
|
||
|
follow: true
|
||
|
},
|
||
|
locale: 'en',
|
||
|
localeNamespacing: false,
|
||
|
localeNamespaces: [],
|
||
|
theme: {
|
||
|
dark: false,
|
||
|
colorPrimary: '#1976d2',
|
||
|
colorSecondary: '#02c39a',
|
||
|
colorAccent: '#f03a47',
|
||
|
colorHeader: '#000000',
|
||
|
colorSidebar: '#1976d2',
|
||
|
injectCSS: '',
|
||
|
injectHead: '',
|
||
|
injectBody: '',
|
||
|
sidebarPosition: 'left',
|
||
|
tocPosition: 'right',
|
||
|
showSharingMenu: true,
|
||
|
showPrintBtn: true
|
||
|
}
|
||
|
})
|
||
|
})
|
||
|
|
||
|
await WIKI.models.storage.query().insert({
|
||
|
module: 'db',
|
||
|
siteId: newSite.id,
|
||
|
isEnabled: true,
|
||
|
contentTypes: {
|
||
|
activeTypes: ['pages', 'images', 'documents', 'others', 'large'],
|
||
|
largeThreshold: '5MB'
|
||
|
},
|
||
|
assetDelivery: {
|
||
|
streaming: true,
|
||
|
directAccess: false
|
||
|
},
|
||
|
state: {
|
||
|
current: 'ok'
|
||
|
}
|
||
|
})
|
||
|
|
||
|
return newSite
|
||
|
}
|
||
|
|
||
|
static async updateSite (id, patch) {
|
||
|
return WIKI.models.sites.query().findById(id).patch(patch)
|
||
|
}
|
||
|
|
||
|
static async deleteSite (id) {
|
||
|
await WIKI.models.storage.query().delete().where('siteId', id)
|
||
|
return WIKI.models.sites.query().deleteById(id)
|
||
|
}
|
||
|
}
|