Exemplo n.º 1
0
        public async Task <UserResultModel> RegisterAsync(string email, string password)
        {
            UserResultModel result = new UserResultModel();

            IdentityUser existingUser = await userManager.FindByEmailAsync(email);

            if (existingUser != null)
            {
                result.Success = false;
                result.Errors  = new[] { "User with this email address already exists." };
                return(result);
            }

            IdentityUser newUser = new IdentityUser()
            {
                Email    = email,
                UserName = email,
            };

            IdentityResult createdUser = await userManager.CreateAsync(newUser, password);

            if (!createdUser.Succeeded)
            {
                result.Success = false;
                result.Errors  = createdUser.Errors.Select(x => x.Description);
                return(result);
            }

            result.Success = true;
            result.Token   = JWTGenerator.Create(newUser);

            return(result);
        }
        private async Task InitBroker(HttpRequestMessage request)
        {
            // note! broker is mandatory in order to pull the server location

            try
            {
                var token = JWTGenerator.Utilities.GetTokenFromQuery(request);
                if (string.IsNullOrEmpty(token))
                {
                    token = JWTGenerator.Utilities.GetTokenFromHeader(request);
                }

                var generator    = new JWTGenerator(this.JWTSecretKey);
                var tokenPayload = generator.GetTokenPayload(token);
                var schema       = new
                {
                    BrokerName = "",
                    Role       = "",
                    RefName    = ""
                };
                var tokenPayloadModel = JsonConvert.DeserializeAnonymousType(tokenPayload, schema);
                this.BrokerName = tokenPayloadModel.BrokerName;
            }
            catch (Exception ex) {
                throw new StatusException(HttpStatusCode.Unauthorized, ex.Message);
            }
        }
Exemplo n.º 3
0
        // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
        public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
        {
            if (env.IsDevelopment())
            {
                app.UseDeveloperExceptionPage();
                app.UseSwagger();
                app.UseSwaggerUI(c => c.SwaggerEndpoint("/swagger/v1/swagger.json", "Web_API v1"));
            }

            app.UseHttpsRedirection();

            app.UseRouting(); JwtSecurityTokenHandler.DefaultInboundClaimTypeMap.Clear();
            app.UseAuthentication();
            app.UseCors("Cors");
            app.UseStaticFiles();
            app.UseStaticFiles(new StaticFileOptions()
            {
                FileProvider = new PhysicalFileProvider(Path.Combine(Directory.GetCurrentDirectory(), @"Resources")),
                RequestPath  = new PathString("/Resources")
            });


            app.UseAuthorization();
            //app.userouting()?

            app.UseEndpoints(endpoints =>
            {
                endpoints.MapControllers();
                endpoints.MapHub <ChatHub>("/ChatHub");
                endpoints.MapHub <GameHub>("/GameHub");
            });
            JWTGenerator.Instantiate(this.Configuration);
        }
Exemplo n.º 4
0
        public async Task <IActionResult> LoginRequest([FromBody] LoginByUsernameViewModel model)
        {
            if (ModelState.IsValid)
            {
                // This doesn't count login failures towards account lockout
                // To enable password failures to trigger account lockout, set lockoutOnFailure: true
                var result = await _signInManager.PasswordSignInAsync(model.Username, model.Password, false, lockoutOnFailure : false);

                if (result.Succeeded)
                {
                    var appUser = _userManager.Users.SingleOrDefault(r => r.UserName == model.Username);
                    var roles   = await _userManager.GetRolesAsync(appUser);

                    string token = JWTGenerator.Generate(appUser.Email, appUser, roles, _configuration);
                    _logger.LogInformation("User logged in.");
                    return(new OkObjectResult(new { Token = token, Roles = roles, UserName = appUser.Name }));
                }
                else
                {
                    ModelState.AddModelError(string.Empty, "Invalid login attempt.");
                    return(new BadRequestObjectResult("Invalid login or password"));
                }
            }
            else
            {
                return(new BadRequestObjectResult("Invalid data"));
            }
        }
Exemplo n.º 5
0
        public async Task <IActionResult> Login([FromBody] AuthVM authVM)
        {
            if (!ModelState.IsValid)
            {
                return(BadRequest(ModelState)); //retruns model state error
            }
            var result = await _signInManager.PasswordSignInAsync(
                userName : authVM.Username,
                password : authVM.Password,
                isPersistent : true,
                lockoutOnFailure : true);

            if (result.Succeeded)
            {
                var user = _userManager.Users.SingleOrDefault(r => r.Email == authVM.Username);

                var role = _userManager.GetRolesAsync(user).Result[0];

                var tokenString = new JWTGenerator().GenerateJWT(user, _configuration, role);

                return(Ok(new { token = tokenString, username = authVM.Username }));
            }

            return(Unauthorized());
        }
 public HomeController(ILogger <HomeController> logger,
                       UserManager <SeriesUser> userManager,
                       SignInManager <SeriesUser> signInManager,
                       JWTGenerator jwtToken,
                       DatabaseContext context)
 {
     _logger        = logger;
     _userManager   = userManager;
     _signInManager = signInManager;
     _context       = context;
     _JWTGenerator  = jwtToken;
 }
Exemplo n.º 7
0
        public async Task <IActionResult> Post(LoginCredentials loginCredentials)
        {
            try
            {
                var user = await _userManager.FindByNameAsync(loginCredentials.Username);

                if (user == null)
                {
                    return(Forbid());
                }

                // Sign user in with the valid credentials
                var result = await _signInManager.CheckPasswordSignInAsync(
                    user,
                    loginCredentials.Password,
                    true);

                // If successful...
                if (!result.Succeeded)
                {
                    return(Forbid());
                }

                var claims = new[]
                {
                    new Claim(ClaimTypes.Name, user.UserName),
                    new Claim(ClaimsConstants.USERID, user.Id.ToString())
                };

                var userInfo = await _context
                               .UserInfo
                               .AsNoTracking()
                               .Where(u => u.FkUserId == user.Id).FirstOrDefaultAsync();

                return(Ok(new
                {
                    User = new
                    {
                        Id = user.Id,
                        Username = user.UserName,
                        Firstname = userInfo?.Firstname,
                        Lastname = userInfo?.Lastname,
                        ProfilePictureData = userInfo?.Profilepicturedata
                    },
                    JwtToken = JWTGenerator.GenerateJWTToken(_configuration, claims)
                }));
            }
            catch (Exception)
            {
                return(BadRequest());
            }
        }
Exemplo n.º 8
0
        public string Login(string username, string password, UserRole[] rolesAllowed)
        {
            string hashedPassword = getHashedPassword(password);

            using (var ds = new DataService())
            {
                if (ds.getUserDAO().ExistsUsernamePassword(username, hashedPassword, rolesAllowed))
                {
                    return(JWTGenerator.Generate(username));
                }
                return(null);
            }
        }
Exemplo n.º 9
0
        public override void OnAuthorization(HttpActionContext context)
        {
            // Authorization: Bearer <token>

            try
            {
                // [AllowAnonymous]
                if (context.ActionDescriptor.GetCustomAttributes <AllowAnonymousAttribute>().Any())
                {
                    base.OnAuthorization(context);
                    return;
                }

                var authorization = context.Request.Headers.Authorization;
                if (authorization == null)
                {
                    throw new HttpException((int)HttpStatusCode.Unauthorized, "No Authorization Header");
                }

                if (authorization.Scheme != "Bearer")
                {
                    throw new HttpException((int)HttpStatusCode.Unauthorized, "Not a Bearer Authorization");
                }

                var token     = authorization.Parameter;
                var generator = new JWTGenerator("my-secret-key");
                if (!generator.VerifyToken(token))
                {
                    throw new HttpException((int)HttpStatusCode.Unauthorized, "Unauthorized Access");
                }

                var header  = generator.GetTokenHeader(token);
                var payload = generator.GetTokenPayload(token);

                base.OnAuthorization(context);
            }
            catch (HttpException ex)
            {
                context.Response = new HttpResponseMessage((HttpStatusCode)ex.GetHttpCode())
                {
                    Content = new StringContent(ex.Message)
                };
            }
            catch (Exception ex)
            {
                context.Response = new HttpResponseMessage(HttpStatusCode.Unauthorized)
                {
                    Content = new StringContent(ex.Message)
                };
            }
        }
 public AuthController(
     UserManager <SeriesUser> userManager,
     RoleManager <IdentityRole> roleManager,
     SignInManager <SeriesUser> signInManager,
     DatabaseContext context,
     JWTGenerator jwtToken
     )
 {
     _userManager   = userManager;
     _roleManager   = roleManager;
     _signInManager = signInManager;
     _context       = context;
     _jwtGenerator  = jwtToken;
 }
Exemplo n.º 11
0
        public async Task <IActionResult> Login(JsonElement korisnik)
        {
            Korisnik podaciKorisnika = JsonConvert.DeserializeObject <Korisnik>((korisnik).ToString());
            Korisnik loginKorisnik   = await KorisnikProvider.GetKorisnik(db, podaciKorisnika.email, podaciKorisnika.password);

            if (loginKorisnik == null)
            {
                return(NotFound());
            }

            var tokenStr = JWTGenerator.GenerateLoginToken(loginKorisnik);

            return(Ok(new { tokenStr = tokenStr }));
        }
Exemplo n.º 12
0
        public async Task <IActionResult> Register([FromBody] RegistrationVM regVM)
        {
            if (!ModelState.IsValid)
            {
                return(BadRequest(ModelState)); //retruns model state error
            }
            if (await _personRepo.IsUserExist(regVM.Username))
            {
                ModelState.AddModelError("Username", "Username already exist");
            }

            regVM.Username = regVM.Username.ToLower();

            var user = new ApplicationUser {
                UserName = regVM.Username, Email = regVM.Username
            };

            var result = await _userManager.CreateAsync(user, regVM.Password);

            if (result.Succeeded)
            {
                string[] roles = { "Admin", "User", "Member", "Manager" };

                await _userManager.AddToRoleAsync(user, roles[0]);

                regVM.IdentityId = user.Id;

                var personModel = _mapper.Map <Person>(regVM);

                var newUser = await _personRepo.Register(personModel);

                // var newUser = await _personRepo.Register(new Models.Person {
                //     IdentityId = user.Id,
                //     FirstName = regVM.FirstName,
                //     LastName = regVM.LastName,
                //     Username = regVM.Username
                // });

                var tokenString = new JWTGenerator().GenerateJWT(user, _configuration, roles[0]);

                await _signInManager.SignInAsync(user, false);

                return(Ok(new {
                    token = tokenString, username = newUser.Username
                }));
            }

            return(BadRequest(result.Errors));
        }
Exemplo n.º 13
0
        public IActionResult Authenticate([FromBody] AuthUserModel authUser)
        {
            User user = userAuthenticator.Authenticate(authUser.Name, authUser.Password);

            if (user == null)
            {
                return(BadRequest(new { message = "Bad username or password" }));
            }

            string token = JWTGenerator.GetToken("cQfTjWnZr4u7x!z%", user.ID.ToString());

            return(Ok(new
            {
                ID = user.ID,
                Username = user.Name,
                Token = token
            }));
        }
Exemplo n.º 14
0
        public void TestToken()
        {
            JWTGenerator        jwtGen   = new JWTGenerator();
            List <TokenKeyItem> tokenKey = new List <TokenKeyItem>();

            tokenKey.Add(new TokenKeyItem
            {
                k   = "Mjg2NTFjYzZkNDljMjhjYjJmNGEwOTk1YmY=",
                kty = "oct",
                kid = "0001"
            });

            JWTService.TokenKeysHolder.keys = tokenKey;
            var token = jwtGen.GetJWTToken(_device);
            JwtSecurityTokenHandler handler = new JwtSecurityTokenHandler();
            var readedToken = handler.ReadJwtToken(token);

            Assert.Equal(_device.OriginalID, readedToken.Payload.Claims.Single(x => x.Type == "serialID").Value);
        }
Exemplo n.º 15
0
        public async Task <UserResultModel> LoginAsync(string email, string password)
        {
            UserResultModel result = new UserResultModel();

            IdentityUser existingUser = await userManager.FindByEmailAsync(email);

            bool userHasValidPassword = await userManager.CheckPasswordAsync(existingUser, password);

            if (existingUser == null || !userHasValidPassword)
            {
                result.Success = false;
                result.Errors  = new[] { "User/password combination is wrong." };
                return(result);
            }

            result.Success = true;
            result.Token   = JWTGenerator.Create(existingUser);

            return(result);
        }
Exemplo n.º 16
0
        public async Task <IActionResult> Login([FromBody] UserForLoginDTO userForLoginDTO)
        {
            var userFromRepo = await _repo
                               .Login(userForLoginDTO.Username.ToLower(), userForLoginDTO.Password);

            if (userFromRepo == null)
            {
                return(Unauthorized());
            }

            var tokenGenerator = new JWTGenerator(_config);

            var user = _mapper.Map <UserForListDto>(userFromRepo);

            // O token gerado é enviado para o cliente.
            return(Ok(new {
                token = tokenGenerator.GenerateToken(userFromRepo.Username, userFromRepo.Id),
                user
            }));
        }
Exemplo n.º 17
0
        public async Task <IActionResult> Register([FromBody] PersonVM personVM)
        {
            // Add this to enable .GetService using Microsoft.Extensions.DependencyInjection;
            var regService = _service.GetService <IRegistration>();

            personVM.Username = personVM.Username.ToLower();

            if (await regService.IsExist(personVM.Username))
            {
                ModelState.AddModelError("Username", "Username already exist");
            }

            if (!ModelState.IsValid)
            {
                return(BadRequest(ModelState)); //retruns model state error
            }
            var user = new ApplicationUser
            {
                UserName = personVM.Username,
                Email    = personVM.Username
            };

            var result = await _userManager.CreateAsync(user, personVM.Password);

            if (result.Succeeded)
            {
                personVM.IdentityId = user.Id;

                var newUser = await regService.Register(personVM);

                var tokenString = new JWTGenerator().GenerateJWT(newUser, _configuration);

                await _signInManager.SignInAsync(user, false);

                return(Ok(new { token = tokenString, username = personVM.Username }));
            }

            return(BadRequest(result.Errors));
        }
Exemplo n.º 18
0
        public async Task <IActionResult> PridruziSeIgri(Boja boja, string accessCode)
        {
            string   email    = User.FindFirstValue("email");
            Korisnik korisnik = await KorisnikProvider.GetKorisnik(db, email);

            if (korisnik == null)
            {
                return(BadRequest());
            }
            Igra joinGame = await GameProvider.NadjiIgru(db, accessCode);

            if (joinGame == null)
            {
                return(NotFound());
            }
            if (joinGame.status != statusIgre.cekanjeIgraca)
            {
                return(BadRequest());
            }

            if (joinGame.slobodnaBoja(boja))
            {
                joinGame.dodajIgraca(boja, korisnik);
                if (joinGame.sviPrisutni())
                {
                    joinGame.status = statusIgre.uToku;
                }
                await GameProvider.AzurirajIgru(db, joinGame);

                return(Ok(new { token = JWTGenerator.GenerateGameToken(korisnik, joinGame, boja), username = korisnik.username, slika = korisnik.slika, igraciImena = joinGame.vratiIgrace(), igraciSlike = await GameProvider.slikeIgraca(db, joinGame) }));
            }
            else
            {
                return new ObjectResult(joinGame.zauzeteBoje())
                       {
                           StatusCode = 403
                       }
            };
        }
        public async Task <IActionResult> Login([FromBody] AuthVM authVM)
        {
            var result = await _signInManager.PasswordSignInAsync(authVM.Username, authVM.Password, false, false);

            if (result.Succeeded)
            {
                var authService = _service.GetService <IAuth>();

                var auth = await authService.Login(authVM);

                if (auth == null)
                {
                    return(Unauthorized());
                }

                var user = _userManager.Users.SingleOrDefault(r => r.Email == authVM.Username);

                var tokenString = new JWTGenerator().GenerateJWT(auth, _configuration);

                return(Ok(new { token = tokenString, username = authVM.Username }));
            }

            return(Unauthorized());
        }
Exemplo n.º 20
0
        public async Task <IActionResult> Post([FromBody] LoginCredentials loginCredentials)
        {
            try
            {
                var result = await _userManager.CreateAsync(new ApplicationUser
                {
                    UserName = loginCredentials.Username,
                    Email    = loginCredentials.Username
                }, loginCredentials.Password);

                if (!result.Succeeded)
                {
                    // TODO: Add types of incorrect password format and handle it in client
                    // For now only the first error will be returned as a header
                    var firstErrorDescription = result.Errors.FirstOrDefault()?.Description;
                    this.HttpContext.Response.Headers.Add("user-creation-first-error", firstErrorDescription);
                    return(BadRequest(firstErrorDescription));
                }

                var justCreatedUser = await _userManager.FindByNameAsync(loginCredentials.Username);

                _applicationContext.UserInfo.Add(new UserInfo()
                {
                    Id          = Guid.NewGuid(),
                    Firstname   = loginCredentials.Firstname,
                    Lastname    = loginCredentials.Lastname,
                    Description = loginCredentials.Description,
                    FkUserId    = justCreatedUser.Id
                });

                _applicationContext.BusinessInfo.Add(new BusinessInfo()
                {
                    Id       = Guid.NewGuid(),
                    FkUserId = justCreatedUser.Id
                });

                await _applicationContext.SaveChangesAsync();

                var claims = new[]
                {
                    new Claim(ClaimTypes.Name, justCreatedUser.UserName),
                    new Claim(ClaimsConstants.USERID, justCreatedUser.Id.ToString())
                };

                return(Ok(new
                {
                    User = new
                    {
                        Id = justCreatedUser.Id,
                        Firstname = loginCredentials.Firstname,
                        Lastname = loginCredentials.Lastname,
                        Username = justCreatedUser.UserName
                    },
                    JwtToken = JWTGenerator.GenerateJWTToken(_configuration, claims)
                }));
            }
            catch (Exception)
            {
                var justCreatedUser = await _userManager.FindByNameAsync(loginCredentials.Username);

                if (justCreatedUser != null)
                {
                    var userInfo = _applicationContext
                                   .UserInfo
                                   .FirstOrDefault(u => u.Id == justCreatedUser.Id);

                    if (userInfo != null)
                    {
                        _applicationContext
                        .UserInfo
                        .Remove(userInfo);
                    }

                    var businessInfo = _applicationContext
                                       .BusinessInfo
                                       .FirstOrDefault(u => u.Id == justCreatedUser.Id);

                    if (businessInfo != null)
                    {
                        _applicationContext
                        .BusinessInfo
                        .Remove(businessInfo);
                    }

                    _applicationContext.SaveChanges();
                    await _userManager.DeleteAsync(justCreatedUser);
                }

                return(BadRequest());
            }
        }
Exemplo n.º 21
0
        public IActionResult Index()
        {
            var jwt = new JWTGenerator(config);

            return(Content(jwt.GenerateSecurityToken("*****@*****.**")));
        }
Exemplo n.º 22
0
 public JWTGeneratorService(IDeviceService deviceService)
 {
     _deviceService = deviceService;
     _jwt           = new JWTGenerator();
 }
Exemplo n.º 23
0
        public async Task <IActionResult> RejoinGame(string id)
        {
            string   email    = User.FindFirstValue("email");
            Korisnik korisnik = await KorisnikProvider.GetKorisnik(db, email);

            Igra game = await GameProvider.NadjiIgru(db, id);

            if (game.status != statusIgre.cekanjeIgracaPause && (game.crveniIgracId != korisnik.ID && game.zeleniIgracId != korisnik.ID && game.zutiIgracId != korisnik.ID && game.plaviIgracId != korisnik.ID))
            {
                return(Forbid());
            }
            Boja bojaKorisnika = Boja.crveni;

            foreach (Boja b in Enum.GetValues(typeof(Boja)))
            {
                if ((int)game.GetType().GetProperty(b.ToString() + "IgracId").GetValue(game) == korisnik.ID)
                {
                    bojaKorisnika = b;
                }
            }
            if (korisnik.ID == game.kreatorIgre.ID)
            {
                return(Ok(new { naPotezu = game.naPotezu.ToString(), boja = bojaKorisnika.ToString(), accessCode = game.accessCode, figure = game.figure, token = JWTGenerator.GenerateGameToken(korisnik, game, bojaKorisnika), username = korisnik.username, slika = korisnik.slika, igraciImena = game.vratiIgrace(), igraciSlike = await GameProvider.slikeIgraca(db, game) }));
            }
            else
            {
                return(Ok(new { naPotezu = game.naPotezu.ToString(), boja = bojaKorisnika.ToString(), figure = game.figure, token = JWTGenerator.GenerateGameToken(korisnik, game, bojaKorisnika), username = korisnik.username, slika = korisnik.slika, igraciImena = game.vratiIgrace(), igraciSlike = await GameProvider.slikeIgraca(db, game) }));
            }
        }
Exemplo n.º 24
0
 public AuthProvider(IConfigurationService configuration)
 {
     //_serverPrivateKey = ConfigurationManager.AppSettings["serverKey"];
     _serverPrivateKey = configuration.GetValue("ServerKey");
     _jwtGen           = new JWTGenerator();
 }
Exemplo n.º 25
0
        private void HandleBrokerHook(BrokerData brokerData, WebHookData hookData)
        {
            var step = 0;

            try
            {
                step = 1;

                var httpService = new HttpServiceHelper();
                var config      = new DataUpdatesConfig {
                    FromTime = hookData.LastExecutionTime
                };

                var serviceData = this.BLL.GetServiceData(hookData.ServiceName, brokerData);
                if (serviceData == null)
                {
                    throw new Exception($"No Service Data: {hookData.ServiceName}");
                }

                step = 2;

                var proxyURL  = this.Config.ProxyServerURI; // "http://proxy.crtv.co.il";
                var proxyPort = serviceData.Port;

                var generator = new JWTGenerator(this.Config.JWTSecretKey);
                var token     = generator.GenerateToken(new {
                    brokerName = brokerData.Name,
                    role       = "Broker"
                });

                step = 3;

                var updatesURI    = $"{proxyURL}:{proxyPort}/{hookData.ServiceName}/updates";
                var serviceResult = httpService.POST(updatesURI, config, headers: new Dictionary <string, string>
                {
                    ["Content-Type"]  = "application/json",
                    ["Authorization"] = $"Bearer {token}"
                });

                step = 4;

                // TODO ->> StatusCode
                if (!serviceResult.Success)
                {
                    // remove html content
                    if (serviceResult.Content.Contains("<!DOCTYPE"))
                    {
                        serviceResult.Content = serviceResult.Content.Split('<').FirstOrDefault();
                    }

                    throw new Exception($"Get Updates from {updatesURI} -> {serviceResult.Content}");
                }

                var updates    = serviceResult.Content;
                var hasUpdates = !string.IsNullOrEmpty(updates) && updates != "[]";

                step = 5;

                // push updates
                if (hasUpdates)
                {
                    this.Logger.Info("WebHooksProcess", $"#{hookData.Id}, POST {hookData.ServiceName} Updates to {hookData.HookURL}");

                    var pushResult = httpService.POST($"{hookData.HookURL}", updates, headers: new Dictionary <string, string>
                    {
                        ["Content-Type"] = "application/json"
                    });

                    step = 6;

                    if (!pushResult.Success)
                    {
                        throw new Exception($"Push Updates to {hookData.HookURL} -> {serviceResult.Content}");
                    }
                }

                step = 7;

                hookData.LastExecutionTime = DateTime.Now; // update the last execution time
                this.BLL.UpdateWebHookLastExecutionTime(hookData);
            }
            catch (Exception ex)
            {
                ex.Data.Add("Method", "WebHooksProcess.HandleBrokerHook");
                ex.Data.Add("HookId", hookData.Id);
                ex.Data.Add("BrokerName", hookData.BrokerName);
                ex.Data.Add("ServiceName", hookData.ServiceName);
                ex.Data.Add("Step", step);
                this.Logger.Error("WebHooksProcess", ex);
            }
        }