Merge branch 'stable' into next-release

This commit is contained in:
Julien Fontanet 2015-11-20 18:17:08 +01:00
commit 084654cd3c
3 changed files with 24 additions and 24 deletions

View File

@ -1,6 +1,6 @@
{ {
"name": "xo-server", "name": "xo-server",
"version": "4.9.1", "version": "4.9.2",
"license": "AGPL-3.0", "license": "AGPL-3.0",
"description": "Server part of Xen-Orchestra", "description": "Server part of Xen-Orchestra",
"keywords": [ "keywords": [

View File

@ -1,26 +1,10 @@
import Collection from '../collection/redis' import Collection from '../collection/redis'
import Model from '../model' import Model from '../model'
import {generateToken} from '../utils'
// =================================================================== // ===================================================================
export default class Token extends Model { export default class Token extends Model {}
static generate (userId) {
return generateToken().then(token => new Token({
id: token,
user_id: userId
}))
}
}
// ------------------------------------------------------------------- // -------------------------------------------------------------------
export class Tokens extends Collection { export class Tokens extends Collection {}
get Model () {
return Token
}
generate (userId) {
return Token.generate(userId).then(token => this.add(token))
}
}

View File

@ -50,7 +50,7 @@ import {PluginsMetadata} from './models/plugin-metadata'
import {Remotes} from './models/remote' import {Remotes} from './models/remote'
import {Schedules} from './models/schedule' import {Schedules} from './models/schedule'
import {Servers} from './models/server' import {Servers} from './models/server'
import {Tokens} from './models/token' import Token, {Tokens} from './models/token'
import {Users} from './models/user' import {Users} from './models/user'
// =================================================================== // ===================================================================
@ -900,9 +900,15 @@ export default class Xo extends EventEmitter {
// ----------------------------------------------------------------- // -----------------------------------------------------------------
async createAuthenticationToken ({userId}) { async createAuthenticationToken ({userId}) {
// TODO: use plain objects const token = new Token({
const token = await this._tokens.generate(userId) id: await generateToken(),
user_id: userId,
expiration: Date.now() + 1e3 * 60 * 60 * 24 * 30 // 1 month validity.
})
await this._tokens.add(token)
// TODO: use plain properties directly.
return token.properties return token.properties
} }
@ -913,12 +919,22 @@ export default class Xo extends EventEmitter {
} }
async getAuthenticationToken (id) { async getAuthenticationToken (id) {
const token = await this._tokens.first(id) let token = await this._tokens.first(id)
if (!token) { if (!token) {
throw new NoSuchAuthenticationToken(id) throw new NoSuchAuthenticationToken(id)
} }
return token.properties token = token.properties
if (!(
token.expiration > Date.now()
)) {
this._tokens.remove(id).catch(noop)
throw new NoSuchAuthenticationToken(id)
}
return token
} }
async _getAuthenticationTokensForUser (userId) { async _getAuthenticationTokensForUser (userId) {