User.coffee 3.1 KB

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