]> git.immae.eu Git - github/Chocobozzz/PeerTube.git/blame - server/lib/oauth-model.ts
Bumped to version v0.0.18-alpha
[github/Chocobozzz/PeerTube.git] / server / lib / oauth-model.ts
CommitLineData
da854ddd 1import { logger } from '../helpers/logger'
3fd3ab2d
C
2import { UserModel } from '../models/account/user'
3import { OAuthClientModel } from '../models/oauth/oauth-client'
4import { OAuthTokenModel } from '../models/oauth/oauth-token'
69b0a27c 5
69818c93
C
6type TokenInfo = { accessToken: string, refreshToken: string, accessTokenExpiresAt: Date, refreshTokenExpiresAt: Date }
7
69b0a27c
C
8// ---------------------------------------------------------------------------
9
69818c93 10function getAccessToken (bearerToken: string) {
69b0a27c
C
11 logger.debug('Getting access token (bearerToken: ' + bearerToken + ').')
12
3fd3ab2d 13 return OAuthTokenModel.getByTokenAndPopulateUser(bearerToken)
69b0a27c
C
14}
15
69818c93 16function getClient (clientId: string, clientSecret: string) {
69b0a27c
C
17 logger.debug('Getting Client (clientId: ' + clientId + ', clientSecret: ' + clientSecret + ').')
18
3fd3ab2d 19 return OAuthClientModel.getByIdAndSecret(clientId, clientSecret)
69b0a27c
C
20}
21
69818c93 22function getRefreshToken (refreshToken: string) {
69b0a27c
C
23 logger.debug('Getting RefreshToken (refreshToken: ' + refreshToken + ').')
24
3fd3ab2d 25 return OAuthTokenModel.getByRefreshTokenAndPopulateClient(refreshToken)
69b0a27c
C
26}
27
f5028693 28async function getUser (username: string, password: string) {
0cee28c1 29 logger.debug('Getting User (username: ' + username + ', password: ******).')
69b0a27c 30
3fd3ab2d 31 const user = await UserModel.getByUsername(username)
f5028693 32 if (!user) return null
26d7d31b 33
f5028693
C
34 const passwordMatch = await user.isPasswordMatch(password)
35 if (passwordMatch === false) return null
26d7d31b 36
f5028693 37 return user
2f372a86
C
38}
39
f5028693 40async function revokeToken (tokenInfo: TokenInfo) {
3fd3ab2d 41 const token = await OAuthTokenModel.getByRefreshTokenAndPopulateUser(tokenInfo.refreshToken)
f5028693
C
42 if (token) token.destroy()
43
44 /*
45 * Thanks to https://github.com/manjeshpv/node-oauth2-server-implementation/blob/master/components/oauth/mongo-models.js
46 * "As per the discussion we need set older date
47 * revokeToken will expected return a boolean in future version
48 * https://github.com/oauthjs/node-oauth2-server/pull/274
49 * https://github.com/oauthjs/node-oauth2-server/issues/290"
50 */
51 const expiredToken = token
52 expiredToken.refreshTokenExpiresAt = new Date('2015-05-28T06:59:53.000Z')
53
54 return expiredToken
69b0a27c
C
55}
56
3fd3ab2d 57async function saveToken (token: TokenInfo, client: OAuthClientModel, user: UserModel) {
32bb4156 58 logger.debug('Saving token ' + token.accessToken + ' for client ' + client.id + ' and user ' + user.id + '.')
69b0a27c 59
feb4bdfd 60 const tokenToCreate = {
69b0a27c 61 accessToken: token.accessToken,
2f372a86 62 accessTokenExpiresAt: token.accessTokenExpiresAt,
69b0a27c 63 refreshToken: token.refreshToken,
2f372a86 64 refreshTokenExpiresAt: token.refreshTokenExpiresAt,
feb4bdfd
C
65 oAuthClientId: client.id,
66 userId: user.id
67 }
69b0a27c 68
3fd3ab2d 69 const tokenCreated = await OAuthTokenModel.create(tokenToCreate)
f5028693 70 const tokenToReturn = Object.assign(tokenCreated, { client, user })
feb4bdfd 71
f5028693 72 return tokenToReturn
69b0a27c
C
73}
74
75// ---------------------------------------------------------------------------
76
65fcc311
C
77// See https://github.com/oauthjs/node-oauth2-server/wiki/Model-specification for the model specifications
78export {
79 getAccessToken,
80 getClient,
81 getRefreshToken,
82 getUser,
83 revokeToken,
84 saveToken
85}