Added changing of tokens from the dashboard

This commit is contained in:
Pitu 2017-01-18 04:51:42 -03:00
parent 0dcaf36332
commit de130602f9
5 changed files with 142 additions and 7 deletions

View File

@ -24,4 +24,37 @@ tokenController.verify = function(req, res, next){
return res.json({ success: false, description: '(╯°□°)╯︵ ┻━┻' })
}
tokenController.list = function(req, res, next){
if(req.headers.auth !== config.adminToken)
return res.status(401).send('not-authorized')
return res.json({
clientToken: config.clientToken,
adminToken: config.adminToken
})
}
tokenController.change = function(req, res, next){
if(req.headers.auth !== config.adminToken)
return res.status(401).send('not-authorized')
let type = req.headers.type
let token = req.headers.token
if(type === undefined) return res.json({ success: false, description: 'No type provided.' })
if(token === undefined) return res.json({ success: false, description: 'No token provided.' })
if(type !== 'client' && type !== 'admin') return res.json({ success: false, description: 'Wrong type provided.' })
db.table('tokens').where('name', type).update({ value: token, timestamp: Math.floor(Date.now() / 1000) })
.then(() => {
if(type === 'client')
config.clientToken = token
else if(type === 'admin')
config.adminToken = token
res.json({ success: true })
})
}
module.exports = tokenController

View File

@ -25,7 +25,7 @@
</h2>
</div>
</div>
</section>
<section id='dashboard' class="section">
@ -51,7 +51,7 @@
</ul>
<p class="menu-label">Administration</p>
<ul class="menu-list">
<li><a>Change your tokens</a></li>
<li><a id="itemTokens">Change your tokens</a></li>
</ul>
</aside>
</div>

View File

@ -43,7 +43,7 @@ panel.verifyToken = function(token, reloadOnError = false){
}
}
xhr.open('GET', '/api/token/verify', true);
xhr.open('GET', '/api/tokens/verify', true);
xhr.setRequestHeader('type', 'admin');
xhr.setRequestHeader('token', token);
xhr.send(null);
@ -62,6 +62,10 @@ panel.prepareDashboard = function(){
panel.getAlbums();
});
document.getElementById('itemTokens').addEventListener('click', function(){
panel.changeTokens();
});
panel.getAlbumsSidebar();
}
@ -76,7 +80,7 @@ panel.getUploads = function(album = undefined){
return panel.verifyToken(panel.token);
var json = JSON.parse(xhr.responseText);
console.log(json);
if(json.success === false)
return swal("An error ocurred", json.description, "error");
@ -155,7 +159,7 @@ panel.getAlbums = function(){
return panel.verifyToken(panel.token);
var json = JSON.parse(xhr.responseText);
console.log(json);
if(json.success === false)
return swal("An error ocurred", json.description, "error");
@ -261,6 +265,102 @@ panel.getAlbum = function(item){
panel.getUploads(item.id);
}
panel.changeTokens = function(){
panel.page.innerHTML = '';
var xhr = new XMLHttpRequest();
var container = document.createElement('div');
container.className = "container";
container.innerHTML = `
<h2 class="subtitle">Manage your tokens</h2>
<label class="label">Client token:</label>
<p class="control has-addons">
<input id="clientToken" class="input is-expanded" type="text" placeholder="Your client token">
<a id="submitClientToken" class="button is-primary">Save</a>
</p>
<label class="label">Admin token:</label>
<p class="control has-addons">
<input id="adminToken" class="input is-expanded" type="text" placeholder="Your admin token">
<a id="submitAdminToken" class="button is-primary">Save</a>
</p>
`;
xhr.onreadystatechange = function() {
if (xhr.readyState == XMLHttpRequest.DONE) {
if(xhr.responseText === 'not-authorized')
return panel.verifyToken(panel.token);
var json = JSON.parse(xhr.responseText);
console.log(json);
if(json.success === false)
return swal("An error ocurred", json.description, "error");
panel.page.appendChild(container);
document.getElementById('clientToken').value = json.clientToken;
document.getElementById('adminToken').value = json.adminToken;
document.getElementById('submitClientToken').addEventListener('click', function(){
panel.submitToken('client', document.getElementById('clientToken').value);
});
document.getElementById('submitAdminToken').addEventListener('click', function(){
panel.submitToken('admin', document.getElementById('adminToken').value);
});
}
}
xhr.open('GET', '/api/tokens', true);
xhr.setRequestHeader('auth', panel.token);
xhr.send(null);
}
panel.submitToken = function(type, token){
var xhr = new XMLHttpRequest();
xhr.onreadystatechange = function() {
if (xhr.readyState == XMLHttpRequest.DONE) {
if(xhr.responseText === 'not-authorized')
return panel.verifyToken(panel.token);
var json = JSON.parse(xhr.responseText);
console.log(json);
if(json.success === false)
return swal("An error ocurred", json.description, "error");
swal({
title: "Woohoo!",
text: 'Your token was changed successfully.',
type: "success"
}, function(){
if(type === 'client')
localStorage.token = token;
else if(type === 'admin')
localStorage.admintoken = token
location.reload();
})
}
}
xhr.open('POST', '/api/tokens/change', true);
xhr.setRequestHeader('auth', panel.token);
xhr.setRequestHeader('type', type);
xhr.setRequestHeader('token', token);
xhr.send(null);
}
window.onload = function () {
panel.preparePage();
}

View File

@ -58,7 +58,7 @@ upload.verifyToken = function(token, reloadOnError = false){
}
}
xhr.open('GET', '/api/token/verify', true);
xhr.open('GET', '/api/tokens/verify', true);
xhr.setRequestHeader('type', 'client');
xhr.setRequestHeader('token', token);
xhr.send(null);

View File

@ -16,6 +16,8 @@ routes.post ('/upload', (req, res, next) => uploadController.upload(req, res, ne
routes.get ('/albums', (req, res, next) => albumsController.list(req, res, next))
routes.post ('/albums', (req, res, next) => albumsController.create(req, res, next))
routes.get ('/albums/test', (req, res, next) => albumsController.test(req, res, next))
routes.get ('/token/verify', (req, res, next) => tokenController.verify(req, res))
routes.get ('/tokens/verify', (req, res, next) => tokenController.verify(req, res))
routes.get ('/tokens', (req, res, next) => tokenController.list(req, res))
routes.post ('/tokens/change', (req, res, next) => tokenController.change(req, res))
module.exports = routes