overleaf/services/web/app/coffee/models/User.coffee

93 lines
4 KiB
CoffeeScript
Raw Normal View History

2014-02-12 05:23:40 -05:00
Project = require('./Project').Project
Settings = require 'settings-sharelatex'
_ = require('underscore')
mongoose = require('mongoose')
uuid = require('uuid')
2014-02-12 05:23:40 -05:00
Schema = mongoose.Schema
ObjectId = Schema.ObjectId
# See https://stackoverflow.com/questions/386294/what-is-the-maximum-length-of-a-valid-email-address/574698#574698
MAX_EMAIL_LENGTH = 254
2014-02-12 05:23:40 -05:00
UserSchema = new Schema
email : {type : String, default : '', maxlength: MAX_EMAIL_LENGTH }
2018-05-28 10:08:37 -04:00
emails: [{
email: { type : String, default : '', maxlength: MAX_EMAIL_LENGTH },
reversedHostname: { type : String, default : '' },
createdAt: { type : Date, default: () -> new Date() },
confirmedAt: { type: Date }
2018-05-28 10:08:37 -04:00
}],
2014-02-12 05:23:40 -05:00
first_name : {type : String, default : ''}
last_name : {type : String, default : ''}
2014-06-11 07:46:28 -04:00
role : {type : String, default : ''}
institution : {type : String, default : ''}
2014-02-12 05:23:40 -05:00
hashedPassword : String
isAdmin : {type : Boolean, default : false}
staffAccess: {
publisherMetrics: {type : Boolean, default: false}
publisherManagement: {type : Boolean, default: false}
institutionMetrics: {type : Boolean, default: false}
institutionManagement: {type : Boolean, default: false}
groupMetrics: {type : Boolean, default: false}
groupManagement: {type : Boolean, default: false}
}
2014-02-12 05:23:40 -05:00
signUpDate : {type : Date, default: () -> new Date() }
lastLoggedIn : {type : Date}
lastLoginIp : {type : String, default : ''}
2014-02-12 05:23:40 -05:00
loginCount : {type : Number, default: 0}
holdingAccount : {type : Boolean, default: false}
ace : {
mode : {type : String, default: 'none'}
theme : {type : String, default: 'textmate'}
overallTheme : {type: String, default: "" }
fontSize : {type : Number, default:'12'}
autoComplete : {type : Boolean, default: true}
autoPairDelimiters : {type : Boolean, default: true}
spellCheckLanguage : {type : String, default: "en"}
pdfViewer : {type : String, default: "pdfjs"}
syntaxValidation : {type : Boolean}
fontFamily : {type : String}
lineHeight : {type : String}
}
2014-02-12 05:23:40 -05:00
features : {
collaborators: { type:Number, default: Settings.defaultFeatures.collaborators }
versioning: { type:Boolean, default: Settings.defaultFeatures.versioning }
dropbox: { type:Boolean, default: Settings.defaultFeatures.dropbox }
github: { type:Boolean, default: Settings.defaultFeatures.github }
gitBridge: { type:Boolean, default: Settings.defaultFeatures.gitBridge }
compileTimeout: { type:Number, default: Settings.defaultFeatures.compileTimeout }
compileGroup: { type:String, default: Settings.defaultFeatures.compileGroup }
templates: { type:Boolean, default: Settings.defaultFeatures.templates }
references: { type:Boolean, default: Settings.defaultFeatures.references }
trackChanges: { type:Boolean, default: Settings.defaultFeatures.trackChanges }
mendeley: { type:Boolean, default: Settings.defaultFeatures.mendeley }
zotero: { type:Boolean, default: Settings.defaultFeatures.zotero }
referencesSearch: { type:Boolean, default: Settings.defaultFeatures.referencesSearch }
}
must_reconfirm:{ type:Boolean, default: false }
2014-02-12 05:23:40 -05:00
referal_id : {type:String, default:() -> uuid.v4().split("-")[0]}
refered_users: [ type:ObjectId, ref:'User' ]
refered_user_count: { type:Number, default: 0 }
2016-04-01 06:36:19 -04:00
refProviders: {
mendeley: Boolean # coerce the refProviders values to Booleans
zotero: Boolean
}
betaProgram: { type:Boolean, default: false}
2017-08-07 06:24:04 -04:00
overleaf:
id: { type: Number }
accessToken: { type: String }
2017-08-09 05:50:05 -04:00
refreshToken: { type: String }
2018-01-26 11:44:14 -05:00
awareOfV2: { type:Boolean, default: false }
thirdPartyIdentifiers: { type: Array, default: [] }
migratedAt: { type: Date }
2014-02-12 05:23:40 -05:00
conn = mongoose.createConnection(Settings.mongo.url, {
server: {poolSize: Settings.mongo.poolSize || 10},
config: {autoIndex: false}
})
2014-02-12 05:23:40 -05:00
User = conn.model('User', UserSchema)
model = mongoose.model 'User', UserSchema
exports.User = User