Remove "function" in favor of () => {}
[oweals/peertube.git] / server / models / oauth / oauth-client.ts
1 import * as Sequelize from 'sequelize'
2
3 import { addMethodsToModel } from '../utils'
4 import {
5   OAuthClientInstance,
6   OAuthClientAttributes,
7
8   OAuthClientMethods
9 } from './oauth-client-interface'
10
11 let OAuthClient: Sequelize.Model<OAuthClientInstance, OAuthClientAttributes>
12 let countTotal: OAuthClientMethods.CountTotal
13 let loadFirstClient: OAuthClientMethods.LoadFirstClient
14 let getByIdAndSecret: OAuthClientMethods.GetByIdAndSecret
15
16 export default function (sequelize: Sequelize.Sequelize, DataTypes: Sequelize.DataTypes) {
17   OAuthClient = sequelize.define<OAuthClientInstance, OAuthClientAttributes>('OAuthClient',
18     {
19       clientId: {
20         type: DataTypes.STRING,
21         allowNull: false
22       },
23       clientSecret: {
24         type: DataTypes.STRING,
25         allowNull: false
26       },
27       grants: {
28         type: DataTypes.ARRAY(DataTypes.STRING)
29       },
30       redirectUris: {
31         type: DataTypes.ARRAY(DataTypes.STRING)
32       }
33     },
34     {
35       indexes: [
36         {
37           fields: [ 'clientId' ],
38           unique: true
39         },
40         {
41           fields: [ 'clientId', 'clientSecret' ],
42           unique: true
43         }
44       ]
45     }
46   )
47
48   const classMethods = [
49     associate,
50
51     countTotal,
52     getByIdAndSecret,
53     loadFirstClient
54   ]
55   addMethodsToModel(OAuthClient, classMethods)
56
57   return OAuthClient
58 }
59
60 // ---------------------------------------------------------------------------
61
62 function associate (models) {
63   OAuthClient.hasMany(models.OAuthToken, {
64     foreignKey: 'oAuthClientId',
65     onDelete: 'cascade'
66   })
67 }
68
69 countTotal = function () {
70   return OAuthClient.count()
71 }
72
73 loadFirstClient = function () {
74   return OAuthClient.findOne()
75 }
76
77 getByIdAndSecret = function (clientId: string, clientSecret: string) {
78   const query = {
79     where: {
80       clientId: clientId,
81       clientSecret: clientSecret
82     }
83   }
84
85   return OAuthClient.findOne(query)
86 }