User.coffee 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990
  1. Project = require('./Project').Project
  2. Settings = require 'settings-sharelatex'
  3. _ = require('underscore')
  4. mongoose = require('mongoose')
  5. uuid = require('uuid')
  6. Schema = mongoose.Schema
  7. ObjectId = Schema.ObjectId
  8. # See https://stackoverflow.com/questions/386294/what-is-the-maximum-length-of-a-valid-email-address/574698#574698
  9. MAX_EMAIL_LENGTH = 254
  10. UserSchema = new Schema
  11. email : {type : String, default : '', maxlength: MAX_EMAIL_LENGTH }
  12. emails: [{
  13. email: { type : String, default : '', maxlength: MAX_EMAIL_LENGTH },
  14. reversedHostname: { type : String, default : '' },
  15. createdAt: { type : Date, default: () -> new Date() },
  16. confirmedAt: { type: Date }
  17. }],
  18. first_name : {type : String, default : ''}
  19. last_name : {type : String, default : ''}
  20. role : {type : String, default : ''}
  21. institution : {type : String, default : ''}
  22. hashedPassword : String
  23. isAdmin : {type : Boolean, default : false}
  24. staffAccess: {
  25. publisherMetrics: {type : Boolean, default: false}
  26. publisherManagement: {type : Boolean, default: false}
  27. institutionMetrics: {type : Boolean, default: false}
  28. institutionManagement: {type : Boolean, default: false}
  29. groupMetrics: {type : Boolean, default: false}
  30. groupManagement: {type : Boolean, default: false}
  31. }
  32. signUpDate : {type : Date, default: () -> new Date() }
  33. lastLoggedIn : {type : Date}
  34. lastLoginIp : {type : String, default : ''}
  35. loginCount : {type : Number, default: 0}
  36. holdingAccount : {type : Boolean, default: false}
  37. ace : {
  38. mode : {type : String, default: 'none'}
  39. theme : {type : String, default: 'textmate'}
  40. overallTheme : {type: String, default: "" }
  41. fontSize : {type : Number, default:'12'}
  42. autoComplete : {type : Boolean, default: true}
  43. autoPairDelimiters : {type : Boolean, default: true}
  44. spellCheckLanguage : {type : String, default: "en"}
  45. pdfViewer : {type : String, default: "pdfjs"}
  46. syntaxValidation : {type : Boolean}
  47. fontFamily : {type : String}
  48. lineHeight : {type : String}
  49. }
  50. features : {
  51. collaborators: { type:Number, default: Settings.defaultFeatures.collaborators }
  52. versioning: { type:Boolean, default: Settings.defaultFeatures.versioning }
  53. dropbox: { type:Boolean, default: Settings.defaultFeatures.dropbox }
  54. github: { type:Boolean, default: Settings.defaultFeatures.github }
  55. gitBridge: { type:Boolean, default: Settings.defaultFeatures.gitBridge }
  56. compileTimeout: { type:Number, default: Settings.defaultFeatures.compileTimeout }
  57. compileGroup: { type:String, default: Settings.defaultFeatures.compileGroup }
  58. templates: { type:Boolean, default: Settings.defaultFeatures.templates }
  59. references: { type:Boolean, default: Settings.defaultFeatures.references }
  60. trackChanges: { type:Boolean, default: Settings.defaultFeatures.trackChanges }
  61. mendeley: { type:Boolean, default: Settings.defaultFeatures.mendeley }
  62. zotero: { type:Boolean, default: Settings.defaultFeatures.zotero }
  63. referencesSearch: { type:Boolean, default: Settings.defaultFeatures.referencesSearch }
  64. }
  65. must_reconfirm:{ type:Boolean, default: false }
  66. referal_id : {type:String, default:() -> uuid.v4().split("-")[0]}
  67. refered_users: [ type:ObjectId, ref:'User' ]
  68. refered_user_count: { type:Number, default: 0 }
  69. refProviders: {
  70. mendeley: Boolean # coerce the refProviders values to Booleans
  71. zotero: Boolean
  72. }
  73. betaProgram: { type:Boolean, default: false}
  74. overleaf:
  75. id: { type: Number }
  76. accessToken: { type: String }
  77. refreshToken: { type: String }
  78. awareOfV2: { type:Boolean, default: false }
  79. conn = mongoose.createConnection(Settings.mongo.url, {
  80. server: {poolSize: Settings.mongo.poolSize || 10},
  81. config: {autoIndex: false}
  82. })
  83. User = conn.model('User', UserSchema)
  84. model = mongoose.model 'User', UserSchema
  85. exports.User = User