From 3fd3ab2d34d512b160a5e6084d7609be7b4f4452 Mon Sep 17 00:00:00 2001 From: Chocobozzz Date: Tue, 12 Dec 2017 17:53:50 +0100 Subject: Move models to typescript-sequelize --- server/models/oauth/index.ts | 2 - server/models/oauth/oauth-client-interface.ts | 31 --- server/models/oauth/oauth-client.ts | 112 +++++------ server/models/oauth/oauth-token-interface.ts | 46 ----- server/models/oauth/oauth-token.ts | 259 +++++++++++++------------- 5 files changed, 173 insertions(+), 277 deletions(-) delete mode 100644 server/models/oauth/index.ts delete mode 100644 server/models/oauth/oauth-client-interface.ts delete mode 100644 server/models/oauth/oauth-token-interface.ts (limited to 'server/models/oauth') diff --git a/server/models/oauth/index.ts b/server/models/oauth/index.ts deleted file mode 100644 index a20d3a56a..000000000 --- a/server/models/oauth/index.ts +++ /dev/null @@ -1,2 +0,0 @@ -export * from './oauth-client-interface' -export * from './oauth-token-interface' diff --git a/server/models/oauth/oauth-client-interface.ts b/server/models/oauth/oauth-client-interface.ts deleted file mode 100644 index 3526e4159..000000000 --- a/server/models/oauth/oauth-client-interface.ts +++ /dev/null @@ -1,31 +0,0 @@ -import * as Sequelize from 'sequelize' -import * as Promise from 'bluebird' - -export namespace OAuthClientMethods { - export type CountTotal = () => Promise - - export type LoadFirstClient = () => Promise - - export type GetByIdAndSecret = (clientId: string, clientSecret: string) => Promise -} - -export interface OAuthClientClass { - countTotal: OAuthClientMethods.CountTotal - loadFirstClient: OAuthClientMethods.LoadFirstClient - getByIdAndSecret: OAuthClientMethods.GetByIdAndSecret -} - -export interface OAuthClientAttributes { - clientId: string - clientSecret: string - grants: string[] - redirectUris: string[] -} - -export interface OAuthClientInstance extends OAuthClientClass, OAuthClientAttributes, Sequelize.Instance { - id: number - createdAt: Date - updatedAt: Date -} - -export interface OAuthClientModel extends OAuthClientClass, Sequelize.Model {} diff --git a/server/models/oauth/oauth-client.ts b/server/models/oauth/oauth-client.ts index 9cc68771d..42c59bb79 100644 --- a/server/models/oauth/oauth-client.ts +++ b/server/models/oauth/oauth-client.ts @@ -1,86 +1,62 @@ -import * as Sequelize from 'sequelize' +import { AllowNull, Column, CreatedAt, DataType, HasMany, Model, Table, UpdatedAt } from 'sequelize-typescript' +import { OAuthTokenModel } from './oauth-token' -import { addMethodsToModel } from '../utils' -import { - OAuthClientInstance, - OAuthClientAttributes, - - OAuthClientMethods -} from './oauth-client-interface' - -let OAuthClient: Sequelize.Model -let countTotal: OAuthClientMethods.CountTotal -let loadFirstClient: OAuthClientMethods.LoadFirstClient -let getByIdAndSecret: OAuthClientMethods.GetByIdAndSecret - -export default function (sequelize: Sequelize.Sequelize, DataTypes: Sequelize.DataTypes) { - OAuthClient = sequelize.define('OAuthClient', +@Table({ + tableName: 'oAuthClient', + indexes: [ { - clientId: { - type: DataTypes.STRING, - allowNull: false - }, - clientSecret: { - type: DataTypes.STRING, - allowNull: false - }, - grants: { - type: DataTypes.ARRAY(DataTypes.STRING) - }, - redirectUris: { - type: DataTypes.ARRAY(DataTypes.STRING) - } + fields: [ 'clientId' ], + unique: true }, { - indexes: [ - { - fields: [ 'clientId' ], - unique: true - }, - { - fields: [ 'clientId', 'clientSecret' ], - unique: true - } - ] + fields: [ 'clientId', 'clientSecret' ], + unique: true } - ) + ] +}) +export class OAuthClientModel extends Model { - const classMethods = [ - associate, + @AllowNull(false) + @Column + clientId: string - countTotal, - getByIdAndSecret, - loadFirstClient - ] - addMethodsToModel(OAuthClient, classMethods) + @AllowNull(false) + @Column + clientSecret: string - return OAuthClient -} + @Column(DataType.ARRAY(DataType.STRING)) + grants: string[] + + @Column(DataType.ARRAY(DataType.STRING)) + redirectUris: string[] + + @CreatedAt + createdAt: Date -// --------------------------------------------------------------------------- + @UpdatedAt + updatedAt: Date -function associate (models) { - OAuthClient.hasMany(models.OAuthToken, { - foreignKey: 'oAuthClientId', + @HasMany(() => OAuthTokenModel, { onDelete: 'cascade' }) -} + OAuthTokens: OAuthTokenModel[] -countTotal = function () { - return OAuthClient.count() -} + static countTotal () { + return OAuthClientModel.count() + } -loadFirstClient = function () { - return OAuthClient.findOne() -} + static loadFirstClient () { + return OAuthClientModel.findOne() + } -getByIdAndSecret = function (clientId: string, clientSecret: string) { - const query = { - where: { - clientId: clientId, - clientSecret: clientSecret + static getByIdAndSecret (clientId: string, clientSecret: string) { + const query = { + where: { + clientId: clientId, + clientSecret: clientSecret + } } - } - return OAuthClient.findOne(query) + return OAuthClientModel.findOne(query) + } } diff --git a/server/models/oauth/oauth-token-interface.ts b/server/models/oauth/oauth-token-interface.ts deleted file mode 100644 index 47d95d5fc..000000000 --- a/server/models/oauth/oauth-token-interface.ts +++ /dev/null @@ -1,46 +0,0 @@ -import * as Promise from 'bluebird' -import * as Sequelize from 'sequelize' - -import { UserModel } from '../account/user-interface' - -export type OAuthTokenInfo = { - refreshToken: string - refreshTokenExpiresAt: Date, - client: { - id: number - }, - user: { - id: number - } -} - -export namespace OAuthTokenMethods { - export type GetByRefreshTokenAndPopulateClient = (refreshToken: string) => Promise - export type GetByTokenAndPopulateUser = (bearerToken: string) => Promise - export type GetByRefreshTokenAndPopulateUser = (refreshToken: string) => Promise -} - -export interface OAuthTokenClass { - getByRefreshTokenAndPopulateClient: OAuthTokenMethods.GetByRefreshTokenAndPopulateClient - getByTokenAndPopulateUser: OAuthTokenMethods.GetByTokenAndPopulateUser - getByRefreshTokenAndPopulateUser: OAuthTokenMethods.GetByRefreshTokenAndPopulateUser -} - -export interface OAuthTokenAttributes { - accessToken: string - accessTokenExpiresAt: Date - refreshToken: string - refreshTokenExpiresAt: Date - - userId?: number - oAuthClientId?: number - User?: UserModel -} - -export interface OAuthTokenInstance extends OAuthTokenClass, OAuthTokenAttributes, Sequelize.Instance { - id: number - createdAt: Date - updatedAt: Date -} - -export interface OAuthTokenModel extends OAuthTokenClass, Sequelize.Model {} diff --git a/server/models/oauth/oauth-token.ts b/server/models/oauth/oauth-token.ts index a82bff130..0d21c42fd 100644 --- a/server/models/oauth/oauth-token.ts +++ b/server/models/oauth/oauth-token.ts @@ -1,164 +1,163 @@ -import * as Sequelize from 'sequelize' - +import { AllowNull, BelongsTo, Column, CreatedAt, ForeignKey, Model, Table, UpdatedAt } from 'sequelize-typescript' import { logger } from '../../helpers' +import { AccountModel } from '../account/account' +import { UserModel } from '../account/user' +import { OAuthClientModel } from './oauth-client' + +export type OAuthTokenInfo = { + refreshToken: string + refreshTokenExpiresAt: Date, + client: { + id: number + }, + user: { + id: number + } +} -import { addMethodsToModel } from '../utils' -import { OAuthTokenAttributes, OAuthTokenInfo, OAuthTokenInstance, OAuthTokenMethods } from './oauth-token-interface' - -let OAuthToken: Sequelize.Model -let getByRefreshTokenAndPopulateClient: OAuthTokenMethods.GetByRefreshTokenAndPopulateClient -let getByTokenAndPopulateUser: OAuthTokenMethods.GetByTokenAndPopulateUser -let getByRefreshTokenAndPopulateUser: OAuthTokenMethods.GetByRefreshTokenAndPopulateUser - -export default function (sequelize: Sequelize.Sequelize, DataTypes: Sequelize.DataTypes) { - OAuthToken = sequelize.define('OAuthToken', +@Table({ + tableName: 'oAuthToken', + indexes: [ { - accessToken: { - type: DataTypes.STRING, - allowNull: false - }, - accessTokenExpiresAt: { - type: DataTypes.DATE, - allowNull: false - }, - refreshToken: { - type: DataTypes.STRING, - allowNull: false - }, - refreshTokenExpiresAt: { - type: DataTypes.DATE, - allowNull: false - } + fields: [ 'refreshToken' ], + unique: true }, { - indexes: [ - { - fields: [ 'refreshToken' ], - unique: true - }, - { - fields: [ 'accessToken' ], - unique: true - }, - { - fields: [ 'userId' ] - }, - { - fields: [ 'oAuthClientId' ] - } - ] + fields: [ 'accessToken' ], + unique: true + }, + { + fields: [ 'userId' ] + }, + { + fields: [ 'oAuthClientId' ] } - ) + ] +}) +export class OAuthTokenModel extends Model { - const classMethods = [ - associate, + @AllowNull(false) + @Column + accessToken: string - getByRefreshTokenAndPopulateClient, - getByTokenAndPopulateUser, - getByRefreshTokenAndPopulateUser - ] - addMethodsToModel(OAuthToken, classMethods) + @AllowNull(false) + @Column + accessTokenExpiresAt: Date - return OAuthToken -} + @AllowNull(false) + @Column + refreshToken: string -// --------------------------------------------------------------------------- + @AllowNull(false) + @Column + refreshTokenExpiresAt: Date -function associate (models) { - OAuthToken.belongsTo(models.User, { + @CreatedAt + createdAt: Date + + @UpdatedAt + updatedAt: Date + + @ForeignKey(() => UserModel) + @Column + userId: number + + @BelongsTo(() => UserModel, { foreignKey: { - name: 'userId', allowNull: false }, onDelete: 'cascade' }) + User: UserModel - OAuthToken.belongsTo(models.OAuthClient, { + @ForeignKey(() => OAuthClientModel) + @Column + oAuthClientId: number + + @BelongsTo(() => OAuthClientModel, { foreignKey: { - name: 'oAuthClientId', allowNull: false }, onDelete: 'cascade' }) -} + OAuthClients: OAuthClientModel[] -getByRefreshTokenAndPopulateClient = function (refreshToken: string) { - const query = { - where: { - refreshToken: refreshToken - }, - include: [ OAuthToken['sequelize'].models.OAuthClient ] + static getByRefreshTokenAndPopulateClient (refreshToken: string) { + const query = { + where: { + refreshToken: refreshToken + }, + include: [ OAuthClientModel ] + } + + return OAuthTokenModel.findOne(query) + .then(token => { + if (!token) return null + + return { + refreshToken: token.refreshToken, + refreshTokenExpiresAt: token.refreshTokenExpiresAt, + client: { + id: token.oAuthClientId + }, + user: { + id: token.userId + } + } as OAuthTokenInfo + }) + .catch(err => { + logger.info('getRefreshToken error.', err) + throw err + }) } - return OAuthToken.findOne(query) - .then(token => { - if (!token) return null - - const tokenInfos: OAuthTokenInfo = { - refreshToken: token.refreshToken, - refreshTokenExpiresAt: token.refreshTokenExpiresAt, - client: { - id: token.oAuthClientId - }, - user: { - id: token.userId + static getByTokenAndPopulateUser (bearerToken: string) { + const query = { + where: { + accessToken: bearerToken + }, + include: [ + { + model: UserModel, + include: [ + { + model: AccountModel, + required: true + } + ] } - } + ] + } - return tokenInfos - }) - .catch(err => { - logger.info('getRefreshToken error.', err) - throw err - }) -} + return OAuthTokenModel.findOne(query).then(token => { + if (token) token['user'] = token.User -getByTokenAndPopulateUser = function (bearerToken: string) { - const query = { - where: { - accessToken: bearerToken - }, - include: [ - { - model: OAuthToken['sequelize'].models.User, - include: [ - { - model: OAuthToken['sequelize'].models.Account, - required: true - } - ] - } - ] + return token + }) } - return OAuthToken.findOne(query).then(token => { - if (token) token['user'] = token.User + static getByRefreshTokenAndPopulateUser (refreshToken: string) { + const query = { + where: { + refreshToken: refreshToken + }, + include: [ + { + model: UserModel, + include: [ + { + model: AccountModel, + required: true + } + ] + } + ] + } - return token - }) -} + return OAuthTokenModel.findOne(query).then(token => { + token['user'] = token.User -getByRefreshTokenAndPopulateUser = function (refreshToken: string) { - const query = { - where: { - refreshToken: refreshToken - }, - include: [ - { - model: OAuthToken['sequelize'].models.User, - include: [ - { - model: OAuthToken['sequelize'].models.Account, - required: true - } - ] - } - ] + return token + }) } - - return OAuthToken.findOne(query).then(token => { - token['user'] = token.User - - return token - }) } -- cgit v1.2.3