Skip to content
GitLab
Explore
Sign in
Primary navigation
Search or go to…
Project
P
prof21
Manage
Activity
Members
Labels
Plan
Issues
Issue boards
Milestones
Wiki
Code
Merge requests
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Snippets
Build
Pipelines
Jobs
Pipeline schedules
Artifacts
Deploy
Releases
Package registry
Model registry
Operate
Environments
Terraform modules
Monitor
Incidents
Analyze
Value stream analytics
Contributor analytics
CI/CD analytics
Repository analytics
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
Community forum
Contribute to GitLab
Provide feedback
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
TALENT
TALENT
prof21
Commits
15dd99bc
Commit
15dd99bc
authored
3 years ago
by
mperezsa
Browse files
Options
Downloads
Patches
Plain Diff
Upload New File
parent
9bc15312
No related branches found
No related tags found
No related merge requests found
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
PROF-XXI FW Tool/server/controllers/user.js
+322
-0
322 additions, 0 deletions
PROF-XXI FW Tool/server/controllers/user.js
with
322 additions
and
0 deletions
PROF-XXI FW Tool/server/controllers/user.js
0 → 100644
+
322
−
0
View file @
15dd99bc
const
crypto
=
require
(
"
crypto
"
);
const
bcrypt
=
require
(
"
bcrypt
"
);
const
db
=
require
(
"
../database/database
"
);
const
jwt
=
require
(
"
jsonwebtoken
"
);
const
sendEmail
=
require
(
"
../utils/sendEmail
"
);
const
saltRounds
=
10
;
exports
.
register
=
async
(
req
,
res
)
=>
{
const
user
=
req
.
body
.
user
;
try
{
db
.
query
(
"
SELECT * from users WHERE email= ?
"
,
[
user
.
email
],
(
err
,
result
)
=>
{
if
(
err
)
{
res
.
json
({
message
:
err
});
}
else
{
if
(
result
.
length
>
0
)
{
res
.
json
({
message
:
"
A user with this email is already created, please change the email
"
,
});
}
else
{
bcrypt
.
hash
(
user
.
password
,
saltRounds
,
(
err
,
hash
)
=>
{
db
.
query
(
"
INSERT INTO users (email, firstName, password, position, organizationName, lastName, profile, universityWebsite) VALUES (?,?,?,?,?,?,?,?)
"
,
[
user
.
email
,
user
.
firstName
,
hash
,
user
.
position
,
user
.
organizationName
,
user
.
lastName
,
user
.
profile
,
user
.
universityWebsite
,
],
(
err
,
result
)
=>
{
if
(
err
)
{
res
.
json
({
message
:
err
});
}
else
{
// const token = jwt.sign(
// { email: user.email, id: user.id },
// "jwtSecret",
// {
// expiresIn: "1h",
// }
// );
res
.
status
(
201
).
json
({
message
:
"
User created successfuly ! Please login in
"
,
user
:
user
,
});
}
}
);
});
}
}
}
);
}
catch
(
err
)
{
res
.
json
({
message
:
err
});
}
};
exports
.
login
=
async
(
req
,
res
)
=>
{
const
{
email
,
password
}
=
req
.
body
;
db
.
query
(
"
SELECT * FROM users WHERE email = ?
"
,
[
email
],
(
err
,
result
)
=>
{
if
(
err
)
{
res
.
json
({
message
:
err
});
}
else
{
if
(
result
.
length
>
0
)
{
const
user
=
result
[
0
];
bcrypt
.
compare
(
password
,
result
[
0
].
password
,
(
loginerr
,
loginres
)
=>
{
if
(
loginres
)
{
const
token
=
jwt
.
sign
(
{
email
:
user
.
email
,
id
:
user
.
id
},
process
.
env
.
JWT_SECRET
,
{
expiresIn
:
"
1h
"
,
}
);
res
.
status
(
200
).
json
({
loggedIn
:
true
,
user
:
user
,
token
:
token
});
}
else
{
res
.
json
({
loggedIn
:
false
,
message
:
"
Wrong password
"
});
}
});
}
else
{
res
.
json
({
loggedIn
:
false
,
message
:
"
No user found with this email
"
});
}
}
});
};
exports
.
forgotPassword
=
async
(
req
,
res
,
next
)
=>
{
const
email
=
req
.
body
.
email
;
try
{
db
.
query
(
"
SELECT * FROM users WHERE email = ?
"
,
[
email
],
(
err
,
result
)
=>
{
if
(
result
.
length
>
0
)
{
const
resetToken
=
crypto
.
randomBytes
(
20
).
toString
(
"
hex
"
);
const
resetPasswordToken
=
crypto
.
createHash
(
"
sha256
"
)
.
update
(
resetToken
)
.
digest
(
"
hex
"
);
// Expiration of the token in 30 minutes
const
resetPasswordExpire
=
Date
.
now
()
+
30
*
60
*
1000
;
console
.
log
(
resetPasswordExpire
);
db
.
query
(
"
UPDATE users SET resetPasswordToken=?, resetPasswordExpire=? WHERE email=?
"
,
[
resetPasswordToken
,
resetPasswordExpire
,
email
],
(
err
,
result
)
=>
{
if
(
result
)
{
// Create reset url to email to provided email
const
resetUrl
=
`http://localhost:3000/resetpassword/
${
resetToken
}
`
;
// HTML Message
const
message
=
`
<h2>You have requested a password reset on PROFXXI IRIT Platform</h2>
<p>Please click on the following link in order the reset your password:</p>
<a href=
${
resetUrl
}
clicktracking=off>
${
resetUrl
}
</a>
<p>This link will expire in 30 minutes, once this duration expires you will have to proceed a new password reset request </p>
`
;
try
{
sendEmail
({
to
:
email
,
subject
:
"
Password Reset Request - PROFXXI IRIT Platform
"
,
text
:
message
,
});
res
.
json
({
sent
:
true
,
message
:
"
an URL has been sent to your email address to reset your password
"
,
});
}
catch
(
err
)
{
console
.
log
(
err
);
next
(
err
);
}
}
else
{
console
.
log
(
err
);
res
.
json
({
sent
:
false
,
message
:
"
Error ! make sure you typed a valid email
"
,
});
}
}
);
}
else
{
res
.
json
({
sent
:
false
,
message
:
"
Error ! make sure you typed a valid email
"
,
});
}
});
}
catch
(
err
)
{
next
(
err
);
}
};
exports
.
resetForgotPassword
=
async
(
req
,
res
,
next
)
=>
{
const
password
=
req
.
body
.
password
;
const
actualdate
=
Date
.
now
();
const
resetPasswordToken
=
crypto
.
createHash
(
"
sha256
"
)
.
update
(
req
.
params
.
resetToken
)
.
digest
(
"
hex
"
);
db
.
query
(
"
SELECT * FROM users WHERE resetPasswordToken =?
"
,
[
resetPasswordToken
],
(
err
,
result
)
=>
{
if
(
result
.
length
>
0
)
{
console
.
log
(
result
[
0
].
id
);
console
.
log
(
password
);
if
(
actualdate
<
parseInt
(
result
[
0
].
resetPasswordExpire
))
{
bcrypt
.
hash
(
password
,
saltRounds
,
(
err
,
hash
)
=>
{
db
.
query
(
"
UPDATE users SET password = ? WHERE id = ?
"
,
[
hash
,
result
[
0
].
id
],
(
err
,
result
)
=>
{
console
.
log
(
result
);
if
(
result
)
{
res
.
json
({
message
:
"
Password is successfully resetted
"
});
}
else
{
res
.
json
({
message
:
"
Error while resetting the password
"
,
});
}
}
);
});
}
else
{
res
.
json
({
message
:
"
Validation time has ended, please request again your password reset
"
,
});
}
}
}
);
};
exports
.
update
=
async
(
req
,
res
)
=>
{
const
email
=
req
.
body
.
email
;
const
user
=
req
.
body
.
user
;
console
.
log
(
email
);
db
.
query
(
"
UPDATE users SET email = ?, firstName = ?, lastName = ?, position= ?, organizationName= ?,profile = ?, universityWebsite = ? WHERE id = ?
"
,
[
user
.
email
,
user
.
firstName
,
user
.
lastName
,
user
.
position
,
user
.
organizationName
,
user
.
profile
,
user
.
universityWebsite
,
req
.
userId
,
],
(
err
,
result
)
=>
{
if
(
result
)
{
res
.
json
({
user
:
user
,
message
:
"
Your profile has been updated successfuly
"
,
});
}
else
{
res
.
json
({
message
:
"
There has been an error while updating your profile
"
,
});
}
}
);
};
exports
.
deleteProfile
=
async
(
req
,
res
)
=>
{
db
.
query
(
"
DELETE FROM users WHERE email=?
"
,
[
req
.
userEmail
],
(
err
,
result
)
=>
{
if
(
result
)
{
res
.
json
({
message
:
"
Your profile has been succesfully deleted
"
});
}
else
{
res
.
json
({
message
:
"
There has been an error while deleting the profile
"
,
});
}
}
);
};
exports
.
deleteData
=
async
(
req
,
res
)
=>
{
db
.
query
(
"
DELETE u FROM units u JOIN unitgeneration g ON u.idunit = g.idunit WHERE g.email = ?
"
,
[
req
.
userEmail
],
(
err
,
result
)
=>
{
if
(
result
)
{
res
.
json
({
message
:
"
All your data has been succesfully deleted
"
,
});
}
else
{
res
.
json
({
message
:
"
There has been an error while deleting all your data, please try later
"
,
});
}
}
);
};
exports
.
resetPassword
=
async
(
req
,
res
)
=>
{
const
password
=
req
.
body
.
password
;
bcrypt
.
hash
(
password
,
saltRounds
,
(
err
,
hash
)
=>
{
db
.
query
(
"
UPDATE users SET password = ? WHERE email = ?
"
,
[
hash
,
req
.
userEmail
],
(
err
,
result
)
=>
{
if
(
result
)
{
res
.
json
({
message
:
"
Your password has been successfully resetted
"
});
}
else
{
res
.
json
({
message
:
"
There has been an error while resetting your password
"
,
});
}
}
);
});
};
exports
.
getTotalUniversitiesNumber
=
async
(
req
,
res
)
=>
{
db
.
query
(
"
SELECT COUNT(DISTINCT users.organizationName) as num FROM users
"
,
(
err
,
result
)
=>
{
if
(
result
)
{
res
.
json
({
totalUniversitiesNumber
:
result
[
0
].
num
});
}
}
);
};
exports
.
contact
=
async
(
req
,
res
,
next
)
=>
{
const
data
=
req
.
body
;
console
.
log
(
data
);
const
infos
=
`<h3> Email From The following User: </h3>
<h3>Name :
${
data
.
name
}
</h3>
<h3>Organization Name :
${
data
.
organization
}
</h3>
<h3>Email :
${
data
.
email
}
</h3>
<h3> About the topic :
${
data
.
topic
}
</h3>
<p>
${
data
.
message
}
</p>
`
;
try
{
sendEmail
({
to
:
process
.
env
.
EMAIL_FROM
,
subject
:
data
.
topic
,
text
:
infos
,
});
}
catch
(
err
)
{
next
(
err
);
}
};
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment