aboutsummaryrefslogtreecommitdiff
path: root/Backend/Api/Api/Services/UserService.cs
diff options
context:
space:
mode:
Diffstat (limited to 'Backend/Api/Api/Services/UserService.cs')
-rw-r--r--Backend/Api/Api/Services/UserService.cs68
1 files changed, 56 insertions, 12 deletions
diff --git a/Backend/Api/Api/Services/UserService.cs b/Backend/Api/Api/Services/UserService.cs
index 3002f34..5fd61f6 100644
--- a/Backend/Api/Api/Services/UserService.cs
+++ b/Backend/Api/Api/Services/UserService.cs
@@ -114,9 +114,16 @@ namespace Api.Services
foreach(var usr in unverified)
{
//ako user nema validan emailtoken, a nije verifikovan prethodno, onda se brise iz baze
- if (_jwtService.EmailTokenToId(usr.emailToken) == null)
+ if (_jwtService.EmailTokenToClaim(usr.emailToken,"id") == null)
await _users.FindOneAndDeleteAsync(x => x._id == usr._id);
}
+ foreach (var usr in unverified)
+ {
+ if (usr.email == register.email && _jwtService.EmailTokenToClaim(usr.emailToken,"id") != null)
+ return "Unverified Email Exists, check your inbox";
+ if (usr.username == register.username && _jwtService.EmailTokenToClaim(usr.emailToken,"id") != null)
+ return "Unverified Username Exists, please select another";
+ }
}
}
@@ -133,7 +140,7 @@ namespace Api.Services
user.emailToken = _jwtService.GenEmailToken(user);
await _users.ReplaceOneAsync(x => x._id == user._id, user);
- SendEmailKod(user);
+ SendEmailKod(user,1);
return "User Registered";
}
@@ -143,11 +150,12 @@ namespace Api.Services
User user = await _users.FindAsync(x => x.email == login.email).Result.FirstOrDefaultAsync();
if (user != null && checkPassword(login.password, user.password))
{
- var basekod = _jwtService.EmailTokenToKod(user.emailToken);
+ var basekod = _jwtService.EmailTokenToClaim(user.emailToken,"kod");
if (basekod != null)
if (String.Compare(login.kod,basekod) == 0)
{
user.verified = true;
+ user.emailToken = "";
await _users.ReplaceOneAsync(x => x._id == user._id, user);
return true;
}
@@ -155,9 +163,9 @@ namespace Api.Services
return false;
}
- public async Task<string> RenewToken(string existingToken)
+ public async Task<string> RenewToken()
{
- var id = _jwtService.TokenToId(existingToken);
+ var id = await UserIdFromJwt();
if (id == null)
return null;
var user = await getUserById(id);
@@ -188,33 +196,47 @@ namespace Api.Services
return id;
}
- public async Task<Boolean> ResendVerifyKod(Login login)
+ public async Task<Boolean> ResendVerifyEmail(Login login)
{
User user = await _users.FindAsync(x => x.email == login.email).Result.FirstOrDefaultAsync();
if (user != null && checkPassword(login.password, user.password))
{
user.emailToken = _jwtService.GenEmailToken(user);
await _users.ReplaceOneAsync(x => x._id == user._id, user);
- SendEmailKod(user);
+ SendEmailKod(user,1);
return true;
}
return false;
}
- public Boolean SendEmailKod(User user)
+
+ public Boolean SendEmailKod(User user,int msgid) //1 - email verification, 2 - password reset
{
MimeMessage message = new MimeMessage();
message.From.Add(new MailboxAddress("Tim Oddyssey", _configuration.GetSection("EmailCfg:Email").Value));
message.To.Add(MailboxAddress.Parse(user.email));
message.Subject = "Vas Oddyssey verifikacioni kod"; //think of something better yeah?
- var kod = _jwtService.EmailTokenToKod(user.emailToken);
+ var kod = _jwtService.EmailTokenToClaim(user.emailToken,"kod");
if (kod == null)
return false;
var bodybuilder = new BodyBuilder();
- bodybuilder.HtmlBody = String.Format(@"<h3>Verfikacioni kod:</h3><h2>"+kod+"</h2><br><p>Kod traje <b>30</b> minuta</p>");
+ switch(msgid){
+ case 1:
+ //bodybuilder.HtmlBody = String.Format(@"<h3>Verfikacioni kod:</h3><h2>" + kod + "</h2><br><p>Kod traje <b>30</b> minuta</p>");
+ bodybuilder.HtmlBody = String.Format(@"<h3>Link za verifikaciju emaila:</h3><br>" +
+ "<form method='get' action='" + _configuration.GetSection("URLs:localhost").Value + "api/auth/verifytoken/" + user.emailToken + "'>" +
+ "<input type='submit' style='background:gray; color:white' value='Verify Email'>" +
+ "</form>" +
+ "<br><p>Link traje <b>30</b> minuta</p>");
+ break;
+ case 2:
+ bodybuilder.HtmlBody = String.Format(@"<h3>Verfikacioni kod:</h3><h2>" + kod + "</h2><br><p>Kod traje <b>30</b> minuta</p>");
+ break;
+ }
+
message.Body = bodybuilder.ToMessageBody();
SmtpClient client = new SmtpClient();
@@ -244,7 +266,7 @@ namespace Api.Services
{
user.emailToken = _jwtService.GenEmailToken(user);
await _users.ReplaceOneAsync(x => x._id == user._id, user);
- SendEmailKod(user);
+ SendEmailKod(user,2);
return true;
}
@@ -256,16 +278,38 @@ namespace Api.Services
User user = await _users.FindAsync(x => x.email == rp.email && x.verified == true).Result.FirstOrDefaultAsync();
if (user != null)
{
- var basekod = _jwtService.EmailTokenToKod(user.emailToken);
+ var basekod = _jwtService.EmailTokenToClaim(user.emailToken,"kod");
if (basekod != null)
if (String.Compare(rp.kod, basekod) == 0)
{
user.password = hashPassword(rp.newpass);
+ user.emailToken = "";
await _users.ReplaceOneAsync(x => x._id == user._id, user);
return true;
}
}
return false;
}
+ public async Task<Boolean> CheckVerification(Login login)
+ {
+ User user = await _users.FindAsync(x => x.email == login.email).Result.FirstOrDefaultAsync();
+ if (user != null && checkPassword(login.password, user.password) && user.verified == true)
+ {
+ return true;
+ }
+ return false;
+ }
+ public async Task<Boolean> VerifyFromToken(string token)
+ {
+ User user = await _users.FindAsync(x => x.emailToken == token).Result.FirstOrDefaultAsync();
+ if(user != null)
+ {
+ user.verified = true;
+ user.emailToken = "";
+ await _users.ReplaceOneAsync(x => x._id == user._id, user);
+ return true;
+ }
+ return false;
+ }
}
}