Service Node management

master
rob 2 years ago
parent a58e3f0326
commit c5120d4c8a

@ -6,7 +6,7 @@
const express = require('express');
const { SiteController } = require('../../../lib/site-lib');
const { SiteController, SiteError } = require('../../../lib/site-lib');
class ServiceNodeController extends SiteController {
@ -22,11 +22,45 @@ class ServiceNodeController extends SiteController {
return next();
});
router.param('clientId', this.populateClientId.bind(this));
router.post('/:clientId', this.postClientUpdate.bind(this));
router.get('/:clientId', this.getClientView.bind(this));
router.get('/', this.getIndex.bind(this));
return router;
}
async populateClientId (req, res, next, clientId) {
const { oauth2: oauth2Service } = this.dtp.services;
try {
res.locals.serviceNode = await oauth2Service.getClientById(clientId);
if (!res.locals.serviceNode) {
throw new SiteError(404, 'Service node not found');
}
return next();
} catch (error) {
this.log.error('failed to populate OAuth2 client', { clientId, error });
return next(error);
}
}
async postClientUpdate (req, res, next) {
const { oauth2: oauth2Service } = this.dtp.services;
try {
await oauth2Service.updateClient(res.locals.serviceNode, req.body);
res.redirect('/admin/service-node');
} catch (error) {
this.log.error('failed to update OAuth2 client', { error });
return next(error);
}
}
async getClientView (req, res) {
res.render('admin/service-node/editor');
}
async getIndex (req, res, next) {
const { oauth2: oauth2Service } = this.dtp.services;
try {

@ -24,6 +24,9 @@ const OAuth2ClientSchema = new Schema({
flags: {
isActive: { type: Boolean, default: true, required: true, index: 1 },
},
admin: {
notes: { type: String },
},
});
OAuth2ClientSchema.index({

@ -301,6 +301,18 @@ class OAuth2Service extends SiteService {
return client.toObject();
}
async updateClient (client, clientDefinition) {
await OAuth2Client.updateOne(
{ _id: client._id },
{
$set: {
'admin.notes': striptags(clientDefinition.notes.trim()),
'flags.isActive': clientDefinition.isActive === 'on',
},
},
);
}
async getClients (search, pagination) {
search = search || { };
let query = OAuth2Client

@ -0,0 +1,14 @@
mixin renderServiceNodeListItem (node)
div(uk-grid)
.uk-width-auto
+renderCell('Name', node.site.name)
.uk-width-auto
+renderCell('Company', node.site.company)
.uk-width-auto
+renderCell('Domain', node.site.domain)
.uk-width-auto
+renderCell('Domain Key', node.site.domainKey)
.uk-width-auto
+renderCell('Connected', moment(node.created).format('MMM DD, YYYY'))
.uk-width-auto
+renderCell('Updated', moment(node.updated).format('MMM DD, YYYY'))

@ -0,0 +1,32 @@
extends ../layouts/main
block content
include components/list-item
form(method="post", action= `/admin/service-node/${serviceNode._id}`).uk-form
.uk-card.uk-card-default
.uk-card-header
div(uk-grid).uk-grid-collapse.uk-flex-middle
div(class="uk-width-1-1 uk-width-expand@l")
h1.uk-card-title.uk-margin-remove= serviceNode.site.name
div(class="uk-width-1-1 uk-width-auto@l")
.uk-text-small client id: #{serviceNode._id}
.uk-card-body
.uk-margin
+renderServiceNodeListItem(serviceNode)
.uk-margin
label(for="notes").uk-form-label Notes
textarea(id="notes", name="notes", rows="4", placeholder="Enter client notes").uk-textarea= serviceNode.admin.notes
.uk-margin
label(for="is-active")
input(id="is-active", name="isActive", type="checkbox", checked= serviceNode.flags.isActive).uk-checkbox
span.uk-margin-small-left Is Active
.uk-card-footer
div(uk-grid).uk-grid-small
.uk-width-expand
+renderBackButton()
.uk-width-auto
button(type="submit").uk-button.uk-button-primary Save

@ -1,25 +1,15 @@
extends ../layouts/main
block content
include components/list-item
h1 Service Nodes
if Array.isArray(serviceNodes) && (serviceNodes.length > 0)
ul.uk-list.uk-list-divider
each node in serviceNodes
li
div(uk-grid)
.uk-width-auto
+renderCell('Name', node.site.name)
.uk-width-auto
+renderCell('Company', node.site.company)
.uk-width-auto
+renderCell('Domain', node.site.domain)
.uk-width-auto
+renderCell('Domain Key', node.site.domainKey)
.uk-width-auto
+renderCell('Connected', moment(node.created).format('MMM DD, YYYY'))
.uk-width-auto
+renderCell('Updated', moment(node.updated).format('MMM DD, YYYY'))
a(href=`/admin/service-node/${node._id}`).uk-link-reset
+renderServiceNodeListItem(node)
else
p There are no registered service nodes.

@ -257,7 +257,10 @@ module.exports.startWebServer = async (dtp) => {
/*
* Static file services (vendor)
*/
module.app.use('/uikit/images', cacheOneDay, express.static(path.join(dtp.config.root, 'node_modules', 'uikit', 'src', 'images')));
module.app.use('/uikit', cacheOneDay, express.static(path.join(dtp.config.root, 'node_modules', 'uikit', 'dist')));
module.app.use('/chart.js', cacheOneDay, express.static(path.join(dtp.config.root, 'node_modules', 'chart.js', 'dist')));
module.app.use('/chartjs-adapter-moment', cacheOneDay, express.static(path.join(dtp.config.root, 'node_modules', 'chartjs-adapter-moment', 'dist')));
module.app.use('/cropperjs', cacheOneDay, express.static(path.join(dtp.config.root, 'node_modules', 'cropperjs', 'dist')));

Loading…
Cancel
Save