public async Task <IActionResult> VerifyState()
        {
            try
            {
                var checkIfAnyFinishedTSignatureSavedInDbWithCurrentDate = await CheckIfAnyFinishedTSignatureSavedInDbWithCurrentDate();

                if (
                    checkIfAnyFinishedTSignatureSavedInDbWithCurrentDate.Count > 0 &&
                    checkIfAnyFinishedTSignatureSavedInDbWithCurrentDate[0].typeCode == "FLX" &&
                    checkIfAnyFinishedTSignatureSavedInDbWithCurrentDate[0].stateCode == "TT" &&
                    checkIfAnyFinishedTSignatureSavedInDbWithCurrentDate[0].endDate.Date == DateTime.Now.Date
                    )
                {
                    IActionResult actionResult = customActionResult.Locked(
                        @$ "You already finished your workday for today using flexible time signatures. If you checked in the finish checkbox from the client by mistake, contact your manager. Have a nice day and see you tommorrow",
                        _state = "TT"
                        );
                    return(StatusCode(StatusCodes.Status423Locked, actionResult));
                }

                else
                {
                    var checkIfAnyStartedTSignatureSavedInDbWithCurrentDate = await CheckIfAnyStartedTSignatureSavedInDbWithCurrentDate();

                    if (
                        checkIfAnyStartedTSignatureSavedInDbWithCurrentDate.Count > 0 &&
                        checkIfAnyStartedTSignatureSavedInDbWithCurrentDate[0].stateCode == "IP"
                        )
                    {
                        IActionResult actionResult = customActionResult.Locked(
                            @$ "You already clocked in. You must clock out before you clock in again. Your session already started at {checkIfAnyStartedTSignatureSavedInDbWithCurrentDate[0].startDate}",
                            _state = "IP"
                            );
                        return(StatusCode(StatusCodes.Status423Locked, actionResult));
                    }

                    else
                    {
                        IActionResult actionResult = customActionResult.Ok(
                            @$ "You are free to clock in.", _state = "OK"
                            );
                        return(StatusCode(StatusCodes.Status200OK, actionResult));
                    }
                }
            }

            catch (Exception e)
            {
                return(StatusCode(StatusCodes.Status500InternalServerError, e.Message));
            }
        }
Пример #2
0
        public async Task <IActionResult> ClockIn(TimeSignatureModel body)
        {
            try
            {
                if (body == null)
                {
                    IActionResult actionResult = customActionResult.BadRequest("The client set the requested body to null before it was sent.");
                    return(StatusCode(StatusCodes.Status400BadRequest, actionResult));
                }

                else if (string.IsNullOrEmpty(body.typeCode) || string.IsNullOrWhiteSpace(body.typeCode))
                {
                    IActionResult actionResult = customActionResult.FieldsRequired(
                        "The 'type code' field has been sent from the client null, empty, or whitespaced."
                        );
                    return(StatusCode(StatusCodes.Status411LengthRequired, actionResult));
                }

                else if (body.typeCode != "FLX")
                {
                    IActionResult actionResult = customActionResult.Conflict(
                        "This option is only for 'Fixed Time Signature'. For 'Flexible Time Signature', try the other option."
                        );
                    return(StatusCode(StatusCodes.Status409Conflict, actionResult));
                }

                else if (string.IsNullOrEmpty(body.wd_typeCode) || string.IsNullOrWhiteSpace(body.wd_typeCode))
                {
                    IActionResult actionResult = customActionResult.FieldsRequired(
                        "The Workday 'code type' field has been sent from the client null, empty, or whitespaced."
                        );
                    return(StatusCode(StatusCodes.Status411LengthRequired, actionResult));
                }

                else
                {
                    var checkIfAnyWorkdaySavedInDbWithCurrentDate = await CheckIfAnyWorkdaySavedInDbWithCurrentDate();

                    if
                    (
                        checkIfAnyWorkdaySavedInDbWithCurrentDate.Count > 0 &&
                        checkIfAnyWorkdaySavedInDbWithCurrentDate[0].typeCode == "FLX" &&
                        checkIfAnyWorkdaySavedInDbWithCurrentDate[0].stateCode == "TT" &&
                        checkIfAnyWorkdaySavedInDbWithCurrentDate[0].endDate.Date == DateTime.Now.Date
                    )
                    {
                        IActionResult actionResult = customActionResult.Locked(
                            @$ "You already finished your workday for today using flexible time signatures. If you checked in the finish checkbox from the client by mistake, contact your manager. Have a nice day and see you tommorrow"
                            );
                        return(StatusCode(StatusCodes.Status423Locked, actionResult));
                    }

                    else
                    {
                        var checkIfAnyTSignatureSavedInDbWithCurrentDate = await CheckIfAnyTSignatureSavedInDbWithCurrentDate();

                        if (checkIfAnyTSignatureSavedInDbWithCurrentDate.Count > 0)
                        {
                            IActionResult actionResult = customActionResult.Locked(
                                @$ "You already clocked in. You must clock out before you clock in again. Your session already started at {checkIfAnyTSignatureSavedInDbWithCurrentDate[0].startDate}"
                                );
                            return(StatusCode(StatusCodes.Status423Locked, actionResult));
                        }

                        else
                        {
                            if (body.wd_typeCode != "ZI")
                            {
                                IActionResult actionResult = customActionResult.BadRequest(
                                    @$ "The workday 'code type' value provided by the client is not valid: {body.wd_typeCode}."
                                    );
                                return(StatusCode(StatusCodes.Status400BadRequest, actionResult));
                            }

                            else
                            {
                                var selectWorkdayById = await SelectWorkdayById();

                                if (selectWorkdayById.Count < 1)
                                {
                                    await InsertIntoWorkday(body);
                                }

                                var selectWorkdayByIdAgain = await SelectWorkdayById();

                                await ClockIn(body, selectWorkdayByIdAgain);

                                DateTime dateNow = new DateTime();
                                dateNow = DateTime.Now;

                                IActionResult actionResult = customActionResult.Ok(
                                    @$ "You signed successfuly for flexible 'Time Signature' at {dateNow}. Don't forget to clock out."
                                    );
                                return(StatusCode(StatusCodes.Status200OK, actionResult));
                            }
                        }
                    }
                }
            }

            catch (Exception e)
            {
                return(StatusCode(StatusCodes.Status500InternalServerError, e.Message));
            }
        }
Пример #3
0
        public async Task <IActionResult> Register(UserAccountModel body)
        {
            try
            {
                if (body == null)
                {
                    IActionResult actionResult = BadRequest(
                        "The client set the requested body to null before it was sent."
                        );
                    return(StatusCode(StatusCodes.Status400BadRequest, actionResult));
                }

                else
                {
                    if (string.IsNullOrEmpty(body.firstName) || string.IsNullOrWhiteSpace(body.firstName))
                    {
                        IActionResult actionResult = customActionResult.FieldsRequired(
                            "The 'firstname' field has been sent from the client null, empty, or whitespaced."
                            );
                        return(StatusCode(StatusCodes.Status411LengthRequired, actionResult));
                    }

                    else if (string.IsNullOrEmpty(body.lastName) || string.IsNullOrWhiteSpace(body.lastName))
                    {
                        IActionResult actionResult = customActionResult.FieldsRequired(
                            "The 'firstname' field has been sent from the client null, empty, or whitespaced."
                            );
                        return(StatusCode(StatusCodes.Status411LengthRequired, actionResult));
                    }

                    else if (string.IsNullOrEmpty(body.userName) || string.IsNullOrWhiteSpace(body.userName))
                    {
                        IActionResult actionResult = customActionResult.FieldsRequired(
                            "The 'email' field has been sent from the client null, empty, or whitespaced."
                            );
                        return(StatusCode(StatusCodes.Status411LengthRequired, actionResult));
                    }

                    else if (string.IsNullOrEmpty(body.password) || string.IsNullOrWhiteSpace(body.password))
                    {
                        IActionResult actionResult = customActionResult.FieldsRequired(
                            "The 'password' field has been sent from the client null, empty, or whitespaced."
                            );
                        return(StatusCode(StatusCodes.Status411LengthRequired, actionResult));
                    }

                    else if (string.IsNullOrEmpty(body.role) || string.IsNullOrWhiteSpace(body.role))
                    {
                        IActionResult actionResult = customActionResult.FieldsRequired(
                            "The 'role' field has been sent from the client null, empty, or whitespaced."
                            );
                        return(StatusCode(StatusCodes.Status411LengthRequired, actionResult));
                    }

                    else
                    {
                        DynamicParameters selectParameters = new DynamicParameters();
                        selectParameters.Add("@userName", body.userName);
                        string selectQuery = @$ "SELECT [id], [userName] FROM [User] WHERE [userName] = @userName";

                        var resultQuery = await _db.SelectAsync <UserAccountModel, dynamic>(selectQuery, selectParameters);

                        if (resultQuery.Count > 0)
                        {
                            IActionResult actionResult = customActionResult.Conflict(
                                "The user account you are trying to create, already exists."
                                );
                            return(StatusCode(StatusCodes.Status409Conflict, actionResult));
                        }

                        else
                        {
                            byte[] salt           = hashPassword.CreateSalt(10);
                            string hashedPassword = hashPassword.GenerateSHA256Hash(body.password, salt, false);

                            if (string.IsNullOrEmpty(hashedPassword) || string.IsNullOrWhiteSpace(hashedPassword))
                            {
                                IActionResult actionResult = customActionResult.Locked(
                                    "The password failed to hash, so the account creation process been locked. Please Try Again."
                                    );
                                return(StatusCode(StatusCodes.Status423Locked, actionResult));
                            }

                            else
                            {
                                DynamicParameters insertParameters = new DynamicParameters();
                                insertParameters.Add("@firstName", body.firstName);
                                insertParameters.Add("@lastName", body.lastName);
                                insertParameters.Add("@userName", body.userName);
                                insertParameters.Add("@role", body.role);
                                insertParameters.Add("@password", hashedPassword);

                                string insertQuery = @"
                                    INSERT INTO [User] ([firstName], [lastName], [userName], [password], [role])
                                    VALUES (@firstName, @lastName, @userName, @password, @role)
                                ";

                                await _db.InsertAsync(insertQuery, insertParameters);

                                IActionResult actionResult = customActionResult.Created(
                                    "The user account as been created successfully. "
                                    );
                                return(StatusCode(StatusCodes.Status201Created, actionResult));
                            }
                        }
                    }
                }
            }

            catch (Exception e)
            {
                return(StatusCode(StatusCodes.Status500InternalServerError, e.Message));
            }
        }
Пример #4
0
        public async Task <IActionResult> ChangePassword(UserAccountModel body)
        {
            try
            {
                if (body == null)
                {
                    IActionResult actionResult = BadRequest(
                        "The client set the requested body to null before it was sent."
                        );
                    return(StatusCode(StatusCodes.Status400BadRequest, actionResult));
                }

                else if (string.IsNullOrEmpty(body.password) || string.IsNullOrWhiteSpace(body.password))
                {
                    IActionResult actionResult = customActionResult.FieldsRequired(
                        "The 'password' field has been sent from the client null, empty, or whitespaced."
                        );
                    return(StatusCode(StatusCodes.Status411LengthRequired, actionResult));
                }

                else if (string.IsNullOrEmpty(body.oldPassword) || string.IsNullOrWhiteSpace(body.oldPassword))
                {
                    IActionResult actionResult = customActionResult.FieldsRequired(
                        "The 'old password' field has been sent from the client null, empty, or whitespaced."
                        );
                    return(StatusCode(StatusCodes.Status411LengthRequired, actionResult));
                }

                else
                {
                    DynamicParameters selectPasswordByUserId_params = new DynamicParameters();
                    selectPasswordByUserId_params.Add("@userId", _claims.GetUserId());

                    string selectPasswordByUserId_string  = $"SELECT [password] FROM [User] WHERE [id] = @userId";
                    var    selectPasswordByUserId_results = await _db.SelectAsync <UserAccountModel, dynamic>(selectPasswordByUserId_string, selectPasswordByUserId_params);

                    if (selectPasswordByUserId_results.Count < 1)
                    {
                        IActionResult actionResult = customActionResult.NotFound(
                            "The user details provided do not exist in the database, try again."
                            );
                        return(StatusCode(StatusCodes.Status404NotFound, actionResult));
                    }

                    else
                    {
                        _user.oldPassword = selectPasswordByUserId_results[0].password;
                        bool comparePassword = new HashPassword().VerifyPassword(_user.oldPassword, body.oldPassword);

                        byte[] salt = hashPassword.CreateSalt(10);

                        string newPasswordHashed = hashPassword.GenerateSHA256Hash(body.password, salt, false);

                        if (comparePassword != true)
                        {
                            IActionResult actionResult = customActionResult.Unauthorized(
                                "The old password is wrong, so the access is denied."
                                );
                            return(StatusCode(StatusCodes.Status401Unauthorized, actionResult));
                        }

                        else if (string.IsNullOrEmpty(newPasswordHashed) || string.IsNullOrWhiteSpace(newPasswordHashed))
                        {
                            IActionResult actionResult = customActionResult.Locked(
                                "The new password failed to hash, so the process to change the password has been blocked. Please Try Again."
                                );
                            return(StatusCode(StatusCodes.Status423Locked, actionResult));
                        }

                        else
                        {
                            DynamicParameters updatePassword_params = new DynamicParameters();
                            updatePassword_params.Add("@userId", _claims.GetUserId());
                            updatePassword_params.Add("@newPassword", newPasswordHashed);

                            string updatePassword_string = @"UPDATE [User] SET [password] = @newPassword WHERE [id] = @userId";

                            await _db.UpdateAsync(updatePassword_string, updatePassword_params);

                            IActionResult actionResult = customActionResult.Ok(
                                "Password changed successfully. Be careful and don't give it to anyone."
                                );
                            return(StatusCode(StatusCodes.Status202Accepted, actionResult));
                        }
                    }
                }
            }

            catch (Exception e)
            {
                return(StatusCode(StatusCodes.Status500InternalServerError, e.Message));
            }
        }