"client:tsc": "cd client && npm run tsc",
"client:tsc:watch": "cd client && npm run tsc:w",
"client:tsc:clean": "cd client && find angular -regextype posix-egrep -regex \".*\\.(js|map)$\" -exec rm -f {} \\;",
- "dev": "npm run build && concurrently \"npm run livereload\" \"npm run client:tsc:watch\" \"npm run client:sass:watch\" \"npm start\"",
+ "dev": "npm run build && NODE_ENV=test concurrently \"npm run livereload\" \"npm run client:tsc:watch\" \"npm run client:sass:watch\" \"npm start\"",
"livereload": "livereload ./client",
"start": "node server",
"test": "standard && mocha server/tests",
"dezalgo": "^1.0.3",
"electron-spawn": "https://github.com/Chocobozzz/electron-spawn",
"express": "^4.12.4",
+ "express-oauth-server": "https://github.com/oauthjs/express-oauth-server",
"express-validator": "^2.11.0",
"js-yaml": "^3.5.4",
"lodash-node": "^3.10.2",
"segfault-handler": "^1.0.0",
"ursa": "^0.9.1",
"validator": "^5.0.0",
- "webtorrent": "^0.85.1",
+ "webtorrent": "^0.86.0",
"winston": "^2.1.1",
"ws": "^1.0.1"
},
--- /dev/null
+'use strict'
+
+var express = require('express')
+var oAuth2 = require('../../../middlewares/oauth2')
+
+const middleware = require('../../../middlewares')
+const cacheMiddleware = middleware.cache
+
+const router = express.Router()
+
+router.post('/token', cacheMiddleware.cache(false), oAuth2.token(), success)
+router.get('/authenticate', cacheMiddleware.cache(false), oAuth2.authenticate(), success)
+
+// ---------------------------------------------------------------------------
+
+module.exports = router
+
+// ---------------------------------------------------------------------------
+
+function success (req, res, next) {
+ res.end()
+}
--- /dev/null
+const mongoose = require('mongoose')
+
+const logger = require('../helpers/logger')
+
+// ---------------------------------------------------------------------------
+
+const oAuthTokensSchema = mongoose.Schema({
+ accessToken: String,
+ accessTokenExpiresOn: Date,
+ client: { type: mongoose.Schema.Types.ObjectId, ref: 'oAuthClients' },
+ refreshToken: String,
+ refreshTokenExpiresOn: Date,
+ user: { type: mongoose.Schema.Types.ObjectId, ref: 'users' }
+})
+const OAuthTokensDB = mongoose.model('oAuthTokens', oAuthTokensSchema)
+
+const oAuthClientsSchema = mongoose.Schema({
+ clientSecret: String,
+ grants: Array,
+ redirectUris: Array
+})
+const OAuthClientsDB = mongoose.model('oAuthClients', oAuthClientsSchema)
+
+const usersSchema = mongoose.Schema({
+ password: String,
+ username: String
+})
+const UsersDB = mongoose.model('users', usersSchema)
+
+// ---------------------------------------------------------------------------
+
+const Users = {
+ createClient: createClient,
+ createUser: createUser,
+ getAccessToken: getAccessToken,
+ getClient: getClient,
+ getRefreshToken: getRefreshToken,
+ getUser: getUser,
+ saveToken: saveToken
+}
+
+function createClient (secret, grants, callback) {
+ logger.debug('Creating client.')
+
+ const mongo_id = new mongoose.mongo.ObjectID()
+ return OAuthClientsDB.create({ _id: mongo_id, clientSecret: secret, grants: grants }, function (err) {
+ if (err) return callback(err)
+
+ return callback(null, mongo_id)
+ })
+}
+
+function createUser (username, password, callback) {
+ logger.debug('Creating user.')
+
+ return UsersDB.create({ username: username, password: password }, callback)
+}
+
+function getAccessToken (bearerToken, callback) {
+ logger.debug('Getting access token (bearerToken: ' + bearerToken + ').')
+
+ return OAuthTokensDB.findOne({ accessToken: bearerToken }).populate('user')
+}
+
+function getClient (clientId, clientSecret) {
+ logger.debug('Getting Client (clientId: ' + clientId + ', clientSecret: ' + clientSecret + ').')
+
+ // TODO req validator
+ const mongo_id = new mongoose.mongo.ObjectID(clientId)
+ return OAuthClientsDB.findOne({ _id: mongo_id, clientSecret: clientSecret })
+}
+
+function getRefreshToken (refreshToken) {
+ logger.debug('Getting RefreshToken (refreshToken: ' + refreshToken + ').')
+
+ return OAuthTokensDB.findOne({ refreshToken: refreshToken })
+}
+
+function getUser (username, password) {
+ logger.debug('Getting User (username: ' + username + ', password: ' + password + ').')
+ return UsersDB.findOne({ username: username, password: password })
+}
+
+function saveToken (token, client, user) {
+ logger.debug('Saving token for client ' + client.id + ' and user ' + user.id + '.')
+
+ const token_to_create = {
+ accessToken: token.accessToken,
+ accessTokenExpiresOn: token.accessTokenExpiresOn,
+ client: client.id,
+ refreshToken: token.refreshToken,
+ refreshTokenExpiresOn: token.refreshTokenExpiresOn,
+ user: user.id
+ }
+
+ return OAuthTokensDB.create(token_to_create, function (err, token_created) {
+ if (err) throw err // node-oauth2-server library use Promise.try
+
+ token_created.client = client
+ token_created.user = user
+
+ return token_created
+ })
+}
+
+// ---------------------------------------------------------------------------
+
+module.exports = Users