]> git.immae.eu Git - github/Chocobozzz/PeerTube.git/blobdiff - server/models/user.js
Server: fix update remote video
[github/Chocobozzz/PeerTube.git] / server / models / user.js
index e50eb96ea514b876232a18a2f7076762a1d8772b..36ed723ccd1292423599e7ab069d3ffd4dac1810 100644 (file)
@@ -1,5 +1,11 @@
+'use strict'
+
+const values = require('lodash/values')
+
 const modelUtils = require('./utils')
+const constants = require('../initializers/constants')
 const peertubeCrypto = require('../helpers/peertube-crypto')
+const customUsersValidators = require('../helpers/custom-validators').users
 
 // ---------------------------------------------------------------------------
 
@@ -7,16 +13,36 @@ module.exports = function (sequelize, DataTypes) {
   const User = sequelize.define('User',
     {
       password: {
-        type: DataTypes.STRING
+        type: DataTypes.STRING,
+        allowNull: false,
+        validate: {
+          passwordValid: function (value) {
+            const res = customUsersValidators.isUserPasswordValid(value)
+            if (res === false) throw new Error('Password not valid.')
+          }
+        }
       },
       username: {
-        type: DataTypes.STRING
+        type: DataTypes.STRING,
+        allowNull: false,
+        validate: {
+          usernameValid: function (value) {
+            const res = customUsersValidators.isUserUsernameValid(value)
+            if (res === false) throw new Error('Username not valid.')
+          }
+        }
       },
       role: {
-        type: DataTypes.STRING
+        type: DataTypes.ENUM(values(constants.USER_ROLES)),
+        allowNull: false
       }
     },
     {
+      indexes: [
+        {
+          fields: [ 'username' ]
+        }
+      ],
       classMethods: {
         associate,
 
@@ -41,11 +67,6 @@ module.exports = function (sequelize, DataTypes) {
   return User
 }
 
-// TODO: Validation
-// UserSchema.path('password').required(customUsersValidators.isUserPasswordValid)
-// UserSchema.path('username').required(customUsersValidators.isUserUsernameValid)
-// UserSchema.path('role').validate(customUsersValidators.isUserRoleValid)
-
 function beforeCreateOrUpdate (user, options, next) {
   peertubeCrypto.cryptPassword(user.password, function (err, hash) {
     if (err) return next(err)
@@ -73,6 +94,11 @@ function toFormatedJSON () {
 // ------------------------------ STATICS ------------------------------
 
 function associate (models) {
+  this.hasOne(models.Author, {
+    foreignKey: 'userId',
+    onDelete: 'cascade'
+  })
+
   this.hasMany(models.OAuthToken, {
     foreignKey: 'userId',
     onDelete: 'cascade'