diff options
Diffstat (limited to 'src/server/authentication/models')
| -rw-r--r-- | src/server/authentication/models/User.ts | 89 | 
1 files changed, 89 insertions, 0 deletions
diff --git a/src/server/authentication/models/User.ts b/src/server/authentication/models/User.ts new file mode 100644 index 000000000..9752c4260 --- /dev/null +++ b/src/server/authentication/models/User.ts @@ -0,0 +1,89 @@ +//@ts-ignore +import * as bcrypt from "bcrypt-nodejs"; +import * as crypto from "crypto"; +//@ts-ignore +import * as mongoose from "mongoose"; +var url = 'mongodb://localhost:27017/Dash' + +mongoose.connect(url, { useNewUrlParser: true }); + +mongoose.connection.on('connected', function () { +    console.log('Stablished connection on ' + url); +}); +mongoose.connection.on('error', function (error) { +    console.log('Something wrong happened: ' + error); +}); +mongoose.connection.on('disconnected', function () { +    console.log('connection closed'); +}); +export type UserModel = mongoose.Document & { +    email: string, +    password: string, +    passwordResetToken: string, +    passwordResetExpires: Date, +    tokens: AuthToken[], + +    profile: { +        name: string, +        gender: string, +        location: string, +        website: string, +        picture: string +    }, + +    comparePassword: comparePasswordFunction, +}; + +type comparePasswordFunction = (candidatePassword: string, cb: (err: any, isMatch: any) => {}) => void; + +export type AuthToken = { +    accessToken: string, +    kind: string +}; + +const userSchema = new mongoose.Schema({ +    email: { type: String, unique: true }, +    password: String, +    passwordResetToken: String, +    passwordResetExpires: Date, + +    facebook: String, +    twitter: String, +    google: String, +    tokens: Array, + +    profile: { +        name: String, +        gender: String, +        location: String, +        website: String, +        picture: String +    } +}, { timestamps: true }); + +/** + * Password hash middleware. + */ +userSchema.pre("save", function save(next) { +    const user = this as UserModel; +    if (!user.isModified("password")) { return next(); } +    bcrypt.genSalt(10, (err, salt) => { +        if (err) { return next(err); } +        bcrypt.hash(user.password, salt, () => void {}, (err: mongoose.Error, hash) => { +            if (err) { return next(err); } +            user.password = hash; +            next(); +        }); +    }); +}); + +const comparePassword: comparePasswordFunction = function (this: UserModel, candidatePassword, cb) { +    bcrypt.compare(candidatePassword, this.password, (err: mongoose.Error, isMatch: boolean) => { +        cb(err, isMatch); +    }); +}; + +userSchema.methods.comparePassword = comparePassword; + +const User = mongoose.model("User", userSchema); +export default User;
\ No newline at end of file  | 
