diff options
Diffstat (limited to 'Backend/Api/Api/Services/UserService.cs')
-rw-r--r-- | Backend/Api/Api/Services/UserService.cs | 68 |
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; + } } } |