User.coffee 3.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  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. reversedHostname: { type : String, default : '' },
  13. createdAt: { type : Date, default: () -> new Date() },
  14. confirmedAt: { type: Date }
  15. }],
  16. first_name : {type : String, default : ''}
  17. last_name : {type : String, default : ''}
  18. role : {type : String, default : ''}
  19. institution : {type : String, default : ''}
  20. hashedPassword : String
  21. isAdmin : {type : Boolean, default : false}
  22. staffAccess: {
  23. publisherMetrics: {type : Boolean, default: false}
  24. publisherManagement: {type : Boolean, default: false}
  25. institutionMetrics: {type : Boolean, default: false}
  26. institutionManagement: {type : Boolean, default: false}
  27. groupMetrics: {type : Boolean, default: false}
  28. groupManagement: {type : Boolean, default: false}
  29. }
  30. signUpDate : {type : Date, default: () -> new Date() }
  31. lastLoggedIn : {type : Date}
  32. lastLoginIp : {type : String, default : ''}
  33. loginCount : {type : Number, default: 0}
  34. holdingAccount : {type : Boolean, default: false}
  35. ace : {
  36. mode : {type : String, default: 'none'}
  37. theme : {type : String, default: 'textmate'}
  38. overallTheme : {type: String, default: "" }
  39. fontSize : {type : Number, default:'12'}
  40. autoComplete : {type : Boolean, default: true}
  41. autoPairDelimiters : {type : Boolean, default: true}
  42. spellCheckLanguage : {type : String, default: "en"}
  43. pdfViewer : {type : String, default: "pdfjs"}
  44. syntaxValidation : {type : Boolean}
  45. fontFamily : {type : String}
  46. lineHeight : {type : String}
  47. }
  48. features : {
  49. collaborators: { type:Number, default: Settings.defaultFeatures.collaborators }
  50. versioning: { type:Boolean, default: Settings.defaultFeatures.versioning }
  51. dropbox: { type:Boolean, default: Settings.defaultFeatures.dropbox }
  52. github: { type:Boolean, default: Settings.defaultFeatures.github }
  53. gitBridge: { type:Boolean, default: Settings.defaultFeatures.gitBridge }
  54. compileTimeout: { type:Number, default: Settings.defaultFeatures.compileTimeout }
  55. compileGroup: { type:String, default: Settings.defaultFeatures.compileGroup }
  56. templates: { type:Boolean, default: Settings.defaultFeatures.templates }
  57. references: { type:Boolean, default: Settings.defaultFeatures.references }
  58. trackChanges: { type:Boolean, default: Settings.defaultFeatures.trackChanges }
  59. mendeley: { type:Boolean, default: Settings.defaultFeatures.mendeley }
  60. zotero: { type:Boolean, default: Settings.defaultFeatures.zotero }
  61. referencesSearch: { type:Boolean, default: Settings.defaultFeatures.referencesSearch }
  62. }
  63. referal_id : {type:String, default:() -> uuid.v4().split("-")[0]}
  64. refered_users: [ type:ObjectId, ref:'User' ]
  65. refered_user_count: { type:Number, default: 0 }
  66. refProviders: {
  67. mendeley: Boolean # coerce the refProviders values to Booleans
  68. zotero: Boolean
  69. }
  70. betaProgram: { type:Boolean, default: false}
  71. overleaf:
  72. id: { type: Number }
  73. accessToken: { type: String }
  74. refreshToken: { type: String }
  75. awareOfV2: { type:Boolean, default: false }
  76. conn = mongoose.createConnection(Settings.mongo.url, {
  77. server: {poolSize: Settings.mongo.poolSize || 10},
  78. config: {autoIndex: false}
  79. })
  80. User = conn.model('User', UserSchema)
  81. model = mongoose.model 'User', UserSchema
  82. exports.User = User