Skip to content

Commit

Permalink
feat(admin): add new apps approval interface
Browse files Browse the repository at this point in the history
  • Loading branch information
Hans Kristian Flaatten committed Jul 20, 2016
1 parent db19788 commit 47ec917
Show file tree
Hide file tree
Showing 4 changed files with 148 additions and 2 deletions.
72 changes: 72 additions & 0 deletions apps/admin/controller.js
Original file line number Diff line number Diff line change
Expand Up @@ -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;

Expand Down
1 change: 1 addition & 0 deletions apps/app/model.js
Original file line number Diff line number Diff line change
Expand Up @@ -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' },
Expand Down
68 changes: 68 additions & 0 deletions views/admin/requests.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,68 @@
{% set page = 'requests' %}
{% set cclass = 'requests' %}
{% extends "admin/layout.html" %}

{% block title %}Nye apps - {{ super() }}{% endblock %}

{% block content %}
<h2 class="ui header">
<i class="certificate icon"></i>
<div class="content">
Nye apps
<div class="sub header">Nye applikasjoner til godkjenning</div>
</div>
</h2>

{% if not users.length %}
<div class="ui info message">
<p>Det er ingen nye applikasjoner til godkjenning. Godt jobba!</p>
</div>
{% endif %}

<div class="ui three cards">
{% for user in users %}
{% for app in user.apps %}
{% if not app.approved and not app.rejection %}
<form class="ui form card" method="post"
action="/admin/requests/{{ user._id }}/{{ app._id }}">

<div class="content">
<img
class="right floated mini ui image"
src="{{ user.owner[0].avatarUrl|d("/static/images/image.png") }}">

<div class="header">{{ app.name }}</div>
<div class="meta">{{ user.provider }}</div>
<div class="description">
<div class="field">
<label>Beskrivelse</label>
<p>{{ app.desc }}</p>
</div>

<div class="field">
<label>Melding</label>
<textarea name="message" rows="2"></textarea>
</div>
</div>
</div>
<div class="extra content">
<div class="ui two buttons">
<button
type="submit"
name="approve"
value="true"
class="ui basic green button">Godkjenn</button>

<button
type="submit"
name="reject"
value="true"
class="ui basic red button">Avslå</button>
</div>
</div>
</form>
{% endif %}
{% endfor %}
{% endfor %}
</div>
{% endblock %}
9 changes: 7 additions & 2 deletions views/app/index.html
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@ <h4 class="ui header">
<div class="ui attached message">
<div class="header">{{ app.name }}</div>
</div>
{% if app.active or not app.approved %}
{% if app.active or (not app.approved and not app.rejection) %}
<form class="ui form attached fluid segment" method="post" action="/app/{{ app._id }}">
<div class="two fields">
<div class="field">
Expand Down Expand Up @@ -96,7 +96,12 @@ <h4 class="ui header">
{% endif %}
</form>
{% endif %}
{% if not app.approved %}
{% if app.rejection %}
<div class="ui bottom attached error message">
<i class="icon warning"></i>
Denne applikasjonen ble avvist. {{ app.rejection }}
</div>
{% elif not app.approved %}
<div class="ui bottom attached info message">
<i class="icon wait"></i>
Denne applikasjonen venter på godkjenning.
Expand Down

0 comments on commit 47ec917

Please sign in to comment.