This commit is contained in:
2017-09-10 18:52:53 +01:00
parent 3c0e4a0184
commit 98f4d61624
30 changed files with 11946 additions and 0 deletions

View File

@@ -0,0 +1,33 @@
const express = require('express');
const admin = require('firebase-admin');
const router = express.Router();
const route = function (db) {
router.get('/', function(req, res, next) {
res.sendStatus(404);
});
router.get('/:uid', function(req, res, next) {
const uid = req.params.uid;
const userRef = db.ref(`/users/${uid}`);
userRef.set({
approved: true,
});
admin.auth().createCustomToken(uid, {
approved: true,
}).then(function(customToken) {
return res.json({
success: true,
token: customToken,
});
}).catch(function(err) {
console.error('Error creating custom token', err);
return res.status(500).json({
success: false,
error: err,
});
});
});
return router;
}
module.exports = route;

37
server/routes/auth.js Normal file
View File

@@ -0,0 +1,37 @@
const express = require('express');
const OAuth = require('oauth');
const router = express.Router();
const route = function () {
router.get('/', function(req, res, next) {
res.json({ error: 'Provider required' });
});
router.get('/:provider', function(req, res, next) {
const provider = req.params.provider;
if (provider === 'twitter') {
const oauth = new OAuth.OAuth(
'https://api.twitter.com/oauth/request_token',
'https://api.twitter.com/oauth/access_token',
'DTODqeC3HjKXF0fttqkq30BcD',
'gkZZNajvdzK9GeIHAByMtQZqj7DOAv3z3iitq3YtNH7wAZ1YyC',
'1.0A',
null,
'HMAC-SHA1',
);
oauth.getOAuthRequestToken(function(err, token, secret) {
if (err) {
return res.status(500).json({ success: false, error: err });
}
return res.json({
success: true,
token: token,
secret: secret,
});
});
}
});
return router;
}
module.exports = route;

View File

@@ -0,0 +1,28 @@
const express = require('express');
const admin = require('firebase-admin');
const router = express.Router();
const route = function (db) {
router.get('/', function(req, res, next) {
const usersRef = db.ref('/users');
usersRef.once('value', function(s) {
const users = s.val();
Object.keys(users).forEach(function(user) {
const delRef = db.ref(`/users/${user}`);
delRef.remove()
.then(function() {
admin.auth().deleteUser(user);
}).catch(function(err) {
console.error(err);
});
});
return res.json({
deleted: true,
users: users,
});
});
});
return router;
}
module.exports = route;

9
server/routes/index.js Normal file
View File

@@ -0,0 +1,9 @@
const routes = function(app, db) {
app.use('/api/validate', require('./validate')(db))
app.use('/api/upgrade', require('./upgrade')(db))
app.use('/api/delete-all-users', require('./deleteallusers')(db));
app.use('/api/approve-uid', require('./approveuid')(db));
// app.use('/api/auth', require('./auth')());
}
module.exports = routes;

66
server/routes/upgrade.js Normal file
View File

@@ -0,0 +1,66 @@
const express = require('express');
const admin = require('firebase-admin');
const router = express.Router();
const route = function(db) {
router.post('/', function(req, res, next) {
const currentUid = req.body.currentUid;
const newUid = req.body.newUid;
if (!currentUid || !newUid) {
return res.json({
success: false,
error: 'currentUid or newUid missing',
});
}
const currentRef = db.ref(`/users/${currentUid}`);
const newRef = db.ref(`/users/${newUid}`);
currentRef.once('value', function(s) {
const currentData = s.val();
// set data for new user
newRef.set(currentData);
// delete data for current user
currentRef.remove().then(function() {
// delete current user
admin.auth().deleteUser(currentUid).then(function() {
if (currentData.approved) {
// TODO: Does this endpoint need more protection?
// transfer approval to new user
admin.auth().createCustomToken(newUid, {
approved: true,
}).then(function(customToken) {
return res.json({
success: true,
token: customToken,
});
}).catch(function(err) {
console.error('Error creating custom token', err);
return res.status(500).json({
success: false,
error: err,
});
});
}
}).catch(function(err) {
console.error(err);
return res.status(500).json({
success: false,
error: err,
});
});
}).catch(function(err) {
console.error(err);
return res.status(500).json({
success: false,
error: err,
});
});
});
});
return router;
}
module.exports = route;

48
server/routes/validate.js Normal file
View File

@@ -0,0 +1,48 @@
const express = require('express');
const admin = require('firebase-admin');
const router = express.Router();
const route = function(db) {
router.post('/', function(req, res, next) {
const passcode = req.body.passcode;
const uid = req.body.uid;
const passcodeRef = db.ref('server/passcode');
passcodeRef.once('value', function(s) {
if (!uid) {
return res.status(400).json({
error: 'No UID',
});
}
const valid = passcode === s.val();
const userRef = db.ref(`users/${uid}`)
.set({
isAdmin: false,
isAnonymous: true,
approved: valid,
});
if (valid) {
admin.auth().createCustomToken(uid, {
approved: true,
}).then(function(customToken) {
return res.json({
valid: true,
token: customToken,
});
}).catch(function(err) {
console.error('Error creating custom token', err);
return res.status(500).json({
error: 'Internal server error',
});
});
} else {
return res.json({
valid: false,
});
}
});
});
return router;
}
module.exports = route;