User.coffee 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687
  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. UserSchema = new Schema
  9. email : {type : String, default : ''}
  10. emails: [{
  11. email: { type : String, default : '' },
  12. createdAt: { type : Date, default: () -> new Date() },
  13. confirmedAt: { type: Date }
  14. }],
  15. first_name : {type : String, default : ''}
  16. last_name : {type : String, default : ''}
  17. role : {type : String, default : ''}
  18. institution : {type : String, default : ''}
  19. hashedPassword : String
  20. isAdmin : {type : Boolean, default : false}
  21. confirmed : {type : Boolean, default : false}
  22. signUpDate : {type : Date, default: () -> new Date() }
  23. lastLoggedIn : {type : Date}
  24. lastLoginIp : {type : String, default : ''}
  25. loginCount : {type : Number, default: 0}
  26. holdingAccount : {type : Boolean, default: false}
  27. ace : {
  28. mode : {type : String, default: 'none'}
  29. theme : {type : String, default: 'textmate'}
  30. overallTheme : {type: String, default: "" }
  31. fontSize : {type : Number, default:'12'}
  32. autoComplete : {type : Boolean, default: true}
  33. autoPairDelimiters : {type : Boolean, default: true}
  34. spellCheckLanguage : {type : String, default: "en"}
  35. pdfViewer : {type : String, default: "pdfjs"}
  36. syntaxValidation : {type : Boolean}
  37. fontFamily : {type : String}
  38. lineHeight : {type : String}
  39. }
  40. features : {
  41. collaborators: { type:Number, default: Settings.defaultFeatures.collaborators }
  42. versioning: { type:Boolean, default: Settings.defaultFeatures.versioning }
  43. dropbox: { type:Boolean, default: Settings.defaultFeatures.dropbox }
  44. github: { type:Boolean, default: Settings.defaultFeatures.github }
  45. compileTimeout: { type:Number, default: Settings.defaultFeatures.compileTimeout }
  46. compileGroup: { type:String, default: Settings.defaultFeatures.compileGroup }
  47. templates: { type:Boolean, default: Settings.defaultFeatures.templates }
  48. references: { type:Boolean, default: Settings.defaultFeatures.references }
  49. trackChanges: { type:Boolean, default: Settings.defaultFeatures.trackChanges }
  50. mendeley: { type:Boolean, default: Settings.defaultFeatures.mendeley }
  51. referencesSearch: { type:Boolean, default: Settings.defaultFeatures.referencesSearch }
  52. }
  53. referal_id : {type:String, default:() -> uuid.v4().split("-")[0]}
  54. refered_users: [ type:ObjectId, ref:'User' ]
  55. refered_user_count: { type:Number, default: 0 }
  56. subscription:
  57. recurlyToken : String
  58. freeTrialExpiresAt: Date
  59. freeTrialDowngraded: Boolean
  60. freeTrialPlanCode: String
  61. # This is poorly named. It does not directly correspond
  62. # to whether the user has has a free trial, but rather
  63. # whether they should be allowed one in the future.
  64. # For example, a user signing up directly for a paid plan
  65. # has this set to true, despite never having had a free trial
  66. hadFreeTrial: {type: Boolean, default: false}
  67. refProviders: {
  68. mendeley: Boolean # coerce the refProviders values to Booleans
  69. zotero: Boolean
  70. }
  71. betaProgram: { type:Boolean, default: false}
  72. overleaf:
  73. id: { type: Number }
  74. accessToken: { type: String }
  75. refreshToken: { type: String }
  76. awareOfV2: { type:Boolean, default: false }
  77. conn = mongoose.createConnection(Settings.mongo.url, {
  78. server: {poolSize: Settings.mongo.poolSize || 10},
  79. config: {autoIndex: false}
  80. })
  81. User = conn.model('User', UserSchema)
  82. model = mongoose.model 'User', UserSchema
  83. exports.User = User