]> git.immae.eu Git - github/Chocobozzz/PeerTube.git/blobdiff - server/models/oauth-token.js
Add like/dislike system for videos
[github/Chocobozzz/PeerTube.git] / server / models / oauth-token.js
index f6a814c36fc37989c714c4076ed809b1e6e0048e..68e7c9ff724cdb1e642960f9f256cf94d9534e04 100644 (file)
-const mongoose = require('mongoose')
+'use strict'
 
 const logger = require('../helpers/logger')
 
 // ---------------------------------------------------------------------------
 
-const OAuthTokenSchema = mongoose.Schema({
-  accessToken: String,
-  accessTokenExpiresAt: Date,
-  client: { type: mongoose.Schema.Types.ObjectId, ref: 'OAuthClient' },
-  refreshToken: String,
-  refreshTokenExpiresAt: Date,
-  user: { type: mongoose.Schema.Types.ObjectId, ref: 'User' }
-})
-
-OAuthTokenSchema.path('accessToken').required(true)
-OAuthTokenSchema.path('client').required(true)
-OAuthTokenSchema.path('user').required(true)
-
-OAuthTokenSchema.statics = {
-  getByRefreshTokenAndPopulateClient: getByRefreshTokenAndPopulateClient,
-  getByTokenAndPopulateUser: getByTokenAndPopulateUser,
-  getByRefreshToken: getByRefreshToken
-}
+module.exports = function (sequelize, DataTypes) {
+  const OAuthToken = sequelize.define('OAuthToken',
+    {
+      accessToken: {
+        type: DataTypes.STRING,
+        allowNull: false
+      },
+      accessTokenExpiresAt: {
+        type: DataTypes.DATE,
+        allowNull: false
+      },
+      refreshToken: {
+        type: DataTypes.STRING,
+        allowNull: false
+      },
+      refreshTokenExpiresAt: {
+        type: DataTypes.DATE,
+        allowNull: false
+      }
+    },
+    {
+      indexes: [
+        {
+          fields: [ 'refreshToken' ],
+          unique: true
+        },
+        {
+          fields: [ 'accessToken' ],
+          unique: true
+        },
+        {
+          fields: [ 'userId' ]
+        },
+        {
+          fields: [ 'oAuthClientId' ]
+        }
+      ],
+      classMethods: {
+        associate,
+
+        getByRefreshTokenAndPopulateClient,
+        getByTokenAndPopulateUser,
+        getByRefreshTokenAndPopulateUser,
+        removeByUserId
+      }
+    }
+  )
 
-mongoose.model('OAuthToken', OAuthTokenSchema)
+  return OAuthToken
+}
 
 // ---------------------------------------------------------------------------
 
+function associate (models) {
+  this.belongsTo(models.User, {
+    foreignKey: {
+      name: 'userId',
+      allowNull: false
+    },
+    onDelete: 'cascade'
+  })
+
+  this.belongsTo(models.OAuthClient, {
+    foreignKey: {
+      name: 'oAuthClientId',
+      allowNull: false
+    },
+    onDelete: 'cascade'
+  })
+}
+
 function getByRefreshTokenAndPopulateClient (refreshToken) {
-  return this.findOne({ refreshToken: refreshToken }).populate('client').exec().then(function (token) {
+  const query = {
+    where: {
+      refreshToken: refreshToken
+    },
+    include: [ this.associations.OAuthClient ]
+  }
+
+  return this.findOne(query).then(function (token) {
     if (!token) return token
 
     const tokenInfos = {
       refreshToken: token.refreshToken,
       refreshTokenExpiresAt: token.refreshTokenExpiresAt,
       client: {
-        id: token.client._id.toString()
+        id: token.client.id
       },
-      user: token.user
+      user: {
+        id: token.user
+      }
     }
 
     return tokenInfos
@@ -47,9 +104,41 @@ function getByRefreshTokenAndPopulateClient (refreshToken) {
 }
 
 function getByTokenAndPopulateUser (bearerToken) {
-  return this.findOne({ accessToken: bearerToken }).populate('user').exec()
+  const query = {
+    where: {
+      accessToken: bearerToken
+    },
+    include: [ this.sequelize.models.User ]
+  }
+
+  return this.findOne(query).then(function (token) {
+    if (token) token.user = token.User
+
+    return token
+  })
 }
 
-function getByRefreshToken (refreshToken) {
-  return this.findOne({ refreshToken: refreshToken }).exec()
+function getByRefreshTokenAndPopulateUser (refreshToken) {
+  const query = {
+    where: {
+      refreshToken: refreshToken
+    },
+    include: [ this.sequelize.models.User ]
+  }
+
+  return this.findOne(query).then(function (token) {
+    token.user = token.User
+
+    return token
+  })
+}
+
+function removeByUserId (userId, callback) {
+  const query = {
+    where: {
+      userId: userId
+    }
+  }
+
+  return this.destroy(query).asCallback(callback)
 }