From 47ec917d1697088443e199096019716b408d4117 Mon Sep 17 00:00:00 2001 From: Hans Kristian Flaatten Date: Wed, 20 Jul 2016 14:21:14 +0200 Subject: [PATCH] feat(admin): add new apps approval interface --- apps/admin/controller.js | 72 +++++++++++++++++++++++++++++++++++++++ apps/app/model.js | 1 + views/admin/requests.html | 68 ++++++++++++++++++++++++++++++++++++ views/app/index.html | 9 +++-- 4 files changed, 148 insertions(+), 2 deletions(-) create mode 100644 views/admin/requests.html diff --git a/apps/admin/controller.js b/apps/admin/controller.js index 21f1f4c..034568f 100644 --- a/apps/admin/controller.js +++ b/apps/admin/controller.js @@ -114,6 +114,78 @@ app.post('/limits/:userId/:appId', (req, res, next) => { }); }); +app.get('/requests', (req, res, next) => { + const error = req.session.message; + delete req.session.message; + + const query = { + apps: { + $elemMatch: { + approved: false, + rejection: { $exists: false }, + }, + }, + }; + + ApiUser.find(query).exec((err, users) => { + if (err) { return next(err); } + return res.render('admin/requests.html', { req, error, users }); + }); +}); + +app.post('/requests/:userId/:appId', (req, res, next) => { + ApiUser.findOne({ _id: req.params.userId }, (err, user) => { + if (err) { return next(err); } + + const app = user.apps.id(req.params.appId); + + // Unknown application + if (!app) { + req.session.message = { + title: 'Ukjent app', + message: `App ${req.params.appId} ble ikke funnet`, + }; + + return res.redirect(303, '/admin/requests'); + } + + // Approve application + if (req.body.approve === 'true') { + app.set('active', true); + app.set('approved', true); + + req.session.message = { + class: 'positive', + title: 'Ny app godkjent', + message: `Applikasjonen "${app.name}" ble godkjent.`, + }; + + // Reject application + } else if (req.body.reject === 'true') { + app.set('active', false); + app.set('approved', false); + app.set('rejection', req.body.message || 'Ingen melding oppgitt.'); + + req.session.message = { + class: 'positive', + title: 'Ny app avslått', + message: `Applikasjonen "${app.name}" ble avslått.`, + }; + + // Unknown action + } else { + req.session.message = { + title: 'Ukjent valg', + message: 'Operasjonen ble ikke gjennkjennt som et gyldig valg.', + }; + + return res.redirect(303, '/admin/requests'); + } + + user.save().catch(next).then(() => res.redirect(303, '/admin/requests')); + }); +}); + app.get('/email', (req, res) => { const error = req.session.message; diff --git a/apps/app/model.js b/apps/app/model.js index da037a5..ae759ef 100644 --- a/apps/app/model.js +++ b/apps/app/model.js @@ -11,6 +11,7 @@ const moment = require('moment'); const appSchema = new Schema({ active: { type: Boolean, default: true }, approved: { type: Boolean, default: true }, + rejection: { type: String }, name: { type: String, required: 'App navn kan ikke være tomt' }, url: String, desc: { type: String, required: 'App beskrivelse kan ikke være tomt' }, diff --git a/views/admin/requests.html b/views/admin/requests.html new file mode 100644 index 0000000..65bb19f --- /dev/null +++ b/views/admin/requests.html @@ -0,0 +1,68 @@ +{% set page = 'requests' %} +{% set cclass = 'requests' %} +{% extends "admin/layout.html" %} + +{% block title %}Nye apps - {{ super() }}{% endblock %} + +{% block content %} +

+ +
+ Nye apps +
Nye applikasjoner til godkjenning
+
+

+ +{% if not users.length %} +
+

Det er ingen nye applikasjoner til godkjenning. Godt jobba!

+
+{% endif %} + +
+ {% for user in users %} + {% for app in user.apps %} + {% if not app.approved and not app.rejection %} +
+ +
+ + +
{{ app.name }}
+
{{ user.provider }}
+
+
+ +

{{ app.desc }}

+
+ +
+ + +
+
+
+
+
+ + + +
+
+
+ {% endif %} + {% endfor %} + {% endfor %} +
+{% endblock %} diff --git a/views/app/index.html b/views/app/index.html index 82728b6..40c15ce 100644 --- a/views/app/index.html +++ b/views/app/index.html @@ -34,7 +34,7 @@

{{ app.name }}
- {% if app.active or not app.approved %} + {% if app.active or (not app.approved and not app.rejection) %}
@@ -96,7 +96,12 @@

{% endif %} {% endif %} - {% if not app.approved %} + {% if app.rejection %} +
+ + Denne applikasjonen ble avvist. {{ app.rejection }} +
+ {% elif not app.approved %}
Denne applikasjonen venter på godkjenning.