Ejemplo n.º 1
0
        public async Task <IActionResult> Register([FromBody] RegisterModel model)
        {
            try
            {
                if (string.IsNullOrEmpty(model.Username) ||
                    string.IsNullOrEmpty(model.FirstName) ||
                    string.IsNullOrEmpty(model.LastName) ||
                    string.IsNullOrEmpty(model.Email) ||
                    string.IsNullOrEmpty(model.Password))
                {
                    var badRequestResponse = new BadRequestResponseModel()
                    {
                        Message     = "All fields are required.",
                        Description = "All fields are required.",
                        Details     = new List <string>()
                    };
                    return(StatusCode(400, badRequestResponse));
                }

                var user = await _applicationDbContext.User.FirstOrDefaultAsync(x => x.Username.ToLower() == model.Username.ToLower());

                if (user != null)
                {
                    var badRequestResponse = new BadRequestResponseModel()
                    {
                        Message     = "Username is taken. Choose another username.",
                        Description = "Username is taken. Choose another username.",
                        Details     = new List <string>()
                    };
                    return(StatusCode(400, badRequestResponse));
                }

                user          = new User();
                user.Id       = 0;
                user.Username = model.Username;
                user.Password = Utilities.GetSHA256(model.Password);
                user.Name     = model.FirstName;
                user.Surname  = model.Username;
                user.Email    = model.Email;
                _applicationDbContext.Add(user);
                await _applicationDbContext.SaveChangesAsync();

                return(StatusCode(200));
            }
            catch (Exception exception)
            {
                var errorResponse = new InternalServerErrorResponseModel();
                errorResponse.LogId      = Guid.NewGuid().ToString();
                errorResponse.Message    = exception.Message;
                errorResponse.StackTrace = exception.StackTrace;
                return(StatusCode(500, errorResponse));
            }
        }
Ejemplo n.º 2
0
        public async Task <IActionResult> Authenticate([FromBody] LoginRequestModel model)
        {
            try
            {
                var user = await _applicationDbContext.User.FirstOrDefaultAsync(x => x.Username == model.Username && x.Password == Utilities.GetSHA256(model.Password));

                if (user != null)
                {
                    //SignIn https://auth0.com/blog/securing-asp-dot-net-core-2-applications-with-jwts/
                    var claimCollection = new List <Claim> {
                        new Claim("Username", user.Username)
                    };
                    var jwtKey = _configuration["JwtKey"];
                    var symmetricSecurityKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(jwtKey));
                    var signingCredentials   = new SigningCredentials(symmetricSecurityKey, SecurityAlgorithms.HmacSha256);
                    var jwtIssuer            = _configuration["JwtIssuer"];
                    var jwtSecurityToken     = new JwtSecurityToken(jwtIssuer,
                                                                    jwtIssuer,
                                                                    claimCollection,
                                                                    expires: DateTime.Now.AddMinutes(model.Expiration),
                                                                    signingCredentials: signingCredentials);
                    var tokenString = new JwtSecurityTokenHandler().WriteToken(jwtSecurityToken);
                    //Response
                    var responseModel = new LoginResponseModel();
                    responseModel.Success = true;
                    responseModel.Message = "Login completed successfully.";
                    responseModel.Token   = tokenString;
                    return(StatusCode(200, responseModel));
                }
                else
                {
                    var responseModel = new LoginResponseModel();
                    responseModel.Success = false;
                    responseModel.Message = "Invalid login attempt.";
                    responseModel.Token   = "";
                    return(StatusCode(200, responseModel));
                }
            }
            catch (Exception exception)
            {
                var errorResponse = new InternalServerErrorResponseModel();
                errorResponse.LogId      = Guid.NewGuid().ToString();
                errorResponse.Message    = exception.Message;
                errorResponse.StackTrace = exception.StackTrace;
                return(StatusCode(500, errorResponse));
            }
        }
Ejemplo n.º 3
0
        private static Task HandleException(HttpContext context, Exception exception)
        {
            HttpStatusCode code;
            object         response = new InternalServerErrorResponseModel(exception.Message);

            switch (exception)
            {
            case PermissionException _:
                code = HttpStatusCode.Unauthorized;
                break;

            case SessionException _:
            case TokenException _:
                code = HttpStatusCode.Forbidden;
                break;

            case UserException _:
            case EntityValidationException _:
            case VersionException _:
                code = HttpStatusCode.BadRequest;
                break;

            case NotFoundException _:
                code = HttpStatusCode.NotFound;
                break;

            case UserValidationException _:
                code     = HttpStatusCode.Forbidden;
                response = JsonConvert.DeserializeObject <object>(exception.Message);
                break;

            default:
                code = HttpStatusCode.InternalServerError;
                break;
            }

            context.Response.ContentType = "application/json";
            context.Response.StatusCode  = (int)code;
            return(context.Response.WriteAsync(JsonConvert.SerializeObject(response,
                                                                           new JsonSerializerSettings
            {
                ContractResolver = new DefaultContractResolver {
                    NamingStrategy = new CamelCaseNamingStrategy()
                },
                Formatting = Formatting.Indented
            })));
        }
Ejemplo n.º 4
0
        public async Task <IActionResult> CryptoCoinList()
        {
            try
            {
                var query = await _applicationDbContext.CryptoCoin.ToListAsync();

                return(StatusCode(200, query));
            }
            catch (Exception exception)
            {
                var errorResponse = new InternalServerErrorResponseModel();
                errorResponse.LogId      = Guid.NewGuid().ToString();
                errorResponse.Message    = exception.Message;
                errorResponse.StackTrace = exception.StackTrace;
                return(StatusCode(500, errorResponse));
            }
        }
Ejemplo n.º 5
0
        public async Task <IActionResult> CryptoCoinMarkUnmark([FromQuery] string id, [FromQuery] bool mark = true)
        {
            try
            {
                var username = User.Claims.FirstOrDefault(x => x.Type == "Username").Value;
                var user     = await _applicationDbContext.User.FirstOrDefaultAsync(x => x.Username == username);

                var cryptoCoin = await _applicationDbContext.CryptoCoin.FirstOrDefaultAsync(x => x.Code == id);

                if (mark)
                {
                    var userCryptoCoin = await _applicationDbContext.UserCryptoCoin.FirstOrDefaultAsync(x => x.UserId == user.Id && x.CryptoCoinId == cryptoCoin.Id);

                    if (userCryptoCoin == null)
                    {
                        userCryptoCoin              = new UserCryptoCoin();
                        userCryptoCoin.Id           = 0;
                        userCryptoCoin.UserId       = user.Id;
                        userCryptoCoin.CryptoCoinId = cryptoCoin.Id;
                        _applicationDbContext.Add(userCryptoCoin);
                        await _applicationDbContext.SaveChangesAsync();
                    }
                }
                else
                {
                    var userCryptoCoin = await _applicationDbContext.UserCryptoCoin.FirstOrDefaultAsync(x => x.UserId == user.Id && x.CryptoCoinId == cryptoCoin.Id);

                    if (userCryptoCoin != null)
                    {
                        _applicationDbContext.Entry(userCryptoCoin).State = EntityState.Deleted;
                        await _applicationDbContext.SaveChangesAsync();
                    }
                }
                return(StatusCode(200));
            }
            catch (Exception exception)
            {
                var errorResponse = new InternalServerErrorResponseModel();
                errorResponse.LogId      = Guid.NewGuid().ToString();
                errorResponse.Message    = exception.Message;
                errorResponse.StackTrace = exception.StackTrace;
                return(StatusCode(500, errorResponse));
            }
        }
Ejemplo n.º 6
0
 public async Task <IActionResult> CryptoCoinListByUser()
 {
     try
     {
         var username = User.Claims.FirstOrDefault(x => x.Type == "Username").Value;
         var query    = await(from userCryptoCoin in _applicationDbContext.UserCryptoCoin
                              join user in _applicationDbContext.User on userCryptoCoin.UserId equals user.Id
                              join cryptoCoin in _applicationDbContext.CryptoCoin on userCryptoCoin.CryptoCoinId equals cryptoCoin.Id
                              where user.Username == username
                              select cryptoCoin).ToListAsync();
         return(StatusCode(200, query));
     }
     catch (Exception exception)
     {
         var errorResponse = new InternalServerErrorResponseModel();
         errorResponse.LogId      = Guid.NewGuid().ToString();
         errorResponse.Message    = exception.Message;
         errorResponse.StackTrace = exception.StackTrace;
         return(StatusCode(500, errorResponse));
     }
 }
        private static Task HandleException(HttpContext context, System.Exception exception)
        {
            HttpStatusCode code;
            object         response = exception.Message;

            switch (exception)
            {
            case TokenException _:
                code     = HttpStatusCode.Forbidden;
                response = new TokenException(exception.Message);
                break;

            default:
                code     = HttpStatusCode.InternalServerError;
                response = new InternalServerErrorResponseModel(exception.Message);
                break;
            }

            context.Response.ContentType = "application/json";
            context.Response.StatusCode  = (int)code;
            return(context.Response.WriteAsync(JsonConvert.SerializeObject(response, new JsonSerializerSettings {
                ContractResolver = new CamelCasePropertyNamesContractResolver()
            })));
        }