Пример #1
0
        public async Task <IActionResult> Handle(HttpRequest request, EnterSsRequest data)
        {
            AuthByKeyResult authResult = this.GetAuthenticationKey(request);

            if (!authResult.Result)
            {
                return(new JsonErrorResult(authResult.ErrorResponse));
            }

            ErrorResponse validationError = this.ValidateRequest(data);

            if (validationError != null)
            {
                return(new JsonErrorResult(validationError));
            }

            byte[] securedKey = Guid.NewGuid().ToByteArray();

            try
            {
                using (SqlConnection conn = sqlServer.GetConnection())
                {
                    await conn.OpenAsync();

                    using (SqlCommand cmd = sqlServer.GetSpCommand("dbo.Employee_EnterSecuredSession", conn))
                    {
                        cmd.AddBinaryParam("@PermanentKey", 16, authResult.Key.ToArray());
                        cmd.AddBinaryParam("@SecuredKey", 16, securedKey);
                        cmd.AddCharParam("@Phone", 10, data.Phone);
                        cmd.AddCharParam("@PinCode", 4, data.PinCode);

                        SqlParameter retValParam = cmd.AddReturnValue();

                        await cmd.ExecuteNonQueryAsync();

                        int retVal = retValParam.GetInt32OrDefault();
                        if (retVal < 0)
                        {
                            ErrorResponse errorResponse = this.GetErrorResponse(retVal);
                            return(new JsonErrorResult(errorResponse));
                        }

                        EnterSsResponse response = new EnterSsResponse();
                        response.SecuredKey = AuthKey.Create(securedKey).ToString() + authResult.Key.ToString();
                        return(new JsonResult(response));
                    }
                }
            }
            catch (Exception ex)
            {
                return(new JsonErrorResult(this.GetExceptionResponse(ex)));
            }
        }
Пример #2
0
        public async Task <IActionResult> Handle(HttpRequest request, CheckStatusRequest data)
        {
            AuthByKeyResult authResult = this.GetAuthenticationKey(request);

            if (!authResult.Result)
            {
                return(new JsonErrorResult(authResult.ErrorResponse));
            }

            ErrorResponse validationError = this.ValidateRequest(data);

            if (validationError != null)
            {
                return(new JsonErrorResult(validationError));
            }

            try
            {
                using (SqlConnection conn = sqlServer.GetConnection())
                {
                    await conn.OpenAsync();

                    using (SqlCommand cmd = sqlServer.GetSpCommand("dbo.Employee_CheckEmployeeStatus", conn))
                    {
                        cmd.AddBinaryParam("@PermanentKey", 16, authResult.Key.ToArray());
                        cmd.AddIntParam("@PlaceId", data.PlaceId);

                        SqlParameter EmployeeIdParam         = cmd.AddIntParam("@EmployeeId").Output();
                        SqlParameter EmployeeFirstNameParam  = cmd.AddNVarCharParam("@EmployeeFirstName", 50).Output();
                        SqlParameter EmployeeLastNameParam   = cmd.AddNVarCharParam("@EmployeeLastName", 50).Output();
                        SqlParameter EmployeeIsDisabledParam = cmd.AddBitParam("@EmployeeIsDisabled").Output();
                        SqlParameter PlaceGroupIdParam       = cmd.AddIntParam("@PlaceGroupId").Output();
                        SqlParameter PlaceGroupNameParam     = cmd.AddNVarCharParam("@PlaceGroupName", 50).Output();
                        SqlParameter retValParam             = cmd.AddReturnValue();

                        await cmd.ExecuteNonQueryAsync();

                        int retVal = retValParam.GetInt32OrDefault();
                        if (retVal == -1)
                        {
                            return(this.GetAuthKeyNotFoundResponse());
                        }

                        CheckStatusResponse response = new CheckStatusResponse();
                        response.EmployeeId         = EmployeeIdParam.GetInt32OrDefault();
                        response.EmployeeFirstName  = EmployeeFirstNameParam.Value.ToString();
                        response.EmployeeLastName   = EmployeeLastNameParam.Value.ToString();
                        response.EmployeeIsDisabled = EmployeeIsDisabledParam.GetBooleanOrDefault();
                        response.PlaceGroupId       = PlaceGroupIdParam.GetInt32OrNull();
                        response.PlaceGroupName     = PlaceGroupNameParam.GetStringOrNull();

                        return(new JsonResult(response));
                    }
                }
            }
            catch (Exception ex)
            {
                return(new JsonErrorResult(this.GetExceptionResponse(ex)));
            }
        }
Пример #3
0
        public async Task <IActionResult> Handle(HttpRequest request, ExitSsRequest data)
        {
            AuthByKeyPairResult authResult = this.GetAuthenticationKeyPair(request);

            if (!authResult.Result)
            {
                return(new JsonErrorResult(authResult.ErrorResponse));
            }

            try
            {
                using (SqlConnection conn = sqlServer.GetConnection())
                {
                    await conn.OpenAsync();

                    using (SqlCommand cmd = sqlServer.GetSpCommand("dbo.Employee_ExitSecuredSession", conn))
                    {
                        cmd.AddBinaryParam("@PermanentKey", 16, authResult.RegularKey.ToArray());
                        cmd.AddBinaryParam("@SecuredKey", 16, authResult.SecuredKey.ToArray());
                        SqlParameter retValParam = cmd.AddReturnValue();

                        await cmd.ExecuteNonQueryAsync();

                        int retVal = retValParam.GetInt32OrDefault();
                        if (retVal < 0)
                        {
                            ErrorResponse errorResponse = this.GetErrorResponse(retVal);
                            return(new JsonErrorResult(errorResponse));
                        }

                        return(new EmptyResult());
                    }
                }
            }
            catch (Exception ex)
            {
                return(new JsonErrorResult(this.GetExceptionResponse(ex)));
            }
        }
Пример #4
0
        public async Task <IActionResult> Handle(RegisterRequest data)
        {
            ErrorResponse validationError = this.ValidateRequest(data);

            if (validationError != null)
            {
                return(new JsonErrorResult(validationError));
            }

            try
            {
                byte[] permanentKey = Guid.NewGuid().ToByteArray();

                using (SqlConnection conn = sqlServer.GetConnection())
                {
                    await conn.OpenAsync();

                    using (SqlCommand cmd = sqlServer.GetSpCommand("Employee_Register", conn))
                    {
                        cmd.AddNVarCharParam("@FirstName", 50, data.FirstName);
                        cmd.AddNVarCharParam("@LastName", 50, data.LastName);
                        cmd.AddCharParam("@Phone", 10, data.Phone);
                        cmd.AddCharParam("@PinCode", 4, data.PinCode);
                        cmd.AddUniqueIdentifierParam("@LinkParameter", data.LinkParameter);
                        cmd.AddIntParam("@PlaceId", data.PlaceToJoinId);
                        cmd.AddBinaryParam("@PermanentKey", 16, permanentKey);
                        SqlParameter retValParam = cmd.AddReturnValue();

                        await cmd.ExecuteNonQueryAsync();

                        int retVal = retValParam.GetInt32OrDefault();
                        if (retVal < 0)
                        {
                            ErrorResponse errorResponse = this.GetErrorResponse(retVal);
                            return(new JsonErrorResult(errorResponse));
                        }
                    }
                }

                RegisterResponse response = new RegisterResponse();
                response.PermanentKey = AuthKey.Create(permanentKey).ToString();
                return(new JsonResult(response));
            }
            catch (Exception ex)
            {
                return(new JsonErrorResult(this.GetExceptionResponse(ex)));
            }
        }
Пример #5
0
        public async Task <IActionResult> Handle(HttpRequest request, JoinPlaceRequest data)
        {
            AuthByKeyResult authResult = this.GetAuthenticationKey(request);

            if (!authResult.Result)
            {
                return(new JsonErrorResult(authResult.ErrorResponse));
            }

            ErrorResponse validationError = this.ValidateRequest(data);

            if (validationError != null)
            {
                return(new JsonErrorResult(validationError));
            }

            try
            {
                using (SqlConnection conn = sqlServer.GetConnection())
                {
                    await conn.OpenAsync();

                    using (SqlCommand cmd = sqlServer.GetSpCommand("dbo.Employee_JoinPlace", conn))
                    {
                        cmd.AddBinaryParam("@PermanentKey", 16, authResult.Key.ToArray());
                        cmd.AddUniqueIdentifierParam("@LinkParameter", data.LinkParameter);
                        cmd.AddIntParam("@PlaceId", data.PlaceToJoinId);
                        SqlParameter retValParam = cmd.AddReturnValue();

                        await cmd.ExecuteNonQueryAsync();

                        int retVal = retValParam.GetInt32OrDefault();

                        if (retVal == -1)
                        {
                            return(this.GetAuthKeyNotFoundResponse());
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                return(new JsonErrorResult(this.GetExceptionResponse(ex)));
            }

            return(new EmptyResult());
        }
Пример #6
0
        public async Task <IActionResult> Handle(LoginRequest data)
        {
            ErrorResponse validationError = this.ValidateRequest(data);

            if (validationError != null)
            {
                return(new JsonErrorResult(validationError));
            }

            try
            {
                using (SqlConnection conn = sqlServer.GetConnection())
                {
                    await conn.OpenAsync();

                    using (SqlCommand cmd = sqlServer.GetSpCommand("Employee_Login", conn))
                    {
                        cmd.AddCharParam("@Phone", 10, data.Phone);
                        cmd.AddCharParam("@PinCode", 4, data.PinCode);

                        SqlParameter PermanentKeyParam = cmd.AddBinaryParam("@PermanentKey", 16).Output();
                        SqlParameter retValParam       = cmd.AddReturnValue();

                        await cmd.ExecuteNonQueryAsync();

                        int retVal = retValParam.GetInt32OrDefault();
                        if (retVal < 0)
                        {
                            ErrorResponse errorResponse = this.GetErrorResponse(retVal);
                            return(new JsonErrorResult(errorResponse));
                        }

                        LoginResponse response = new LoginResponse();
                        response.PermanentKey = PermanentKeyParam.Value.ToString();
                        return(new JsonResult(response));
                    }
                }
            }
            catch (Exception ex)
            {
                return(new JsonErrorResult(this.GetExceptionResponse(ex)));
            }
        }
Пример #7
0
        public async Task <IActionResult> Handle(HttpRequest request, FollowReglinkRequest data)
        {
            AuthByKeyResult authResult = this.HasAuthenticationKey(request);

            if (!authResult.Result)
            {
                return(new JsonErrorResult(authResult.ErrorResponse));
            }

            ErrorResponse validationError = this.ValidateRequest(data);

            if (validationError != null)
            {
                return(new JsonErrorResult(validationError));
            }

            try
            {
                using (SqlConnection conn = sqlServer.GetConnection())
                {
                    await conn.OpenAsync();

                    using (SqlCommand cmd = sqlServer.GetSpCommand("Employee_FollowRegistrationLink", conn))
                    {
                        cmd.AddUniqueIdentifierParam("@LinkParameter", data.LinkParameter);
                        cmd.AddBinaryParam("@PermanentKey", 16, authResult.Key.ToArray());

                        SqlParameter LinkPlaceIdParam        = cmd.AddIntParam("@LinkPlaceId").Output();
                        SqlParameter LinkPlaceNameParam      = cmd.AddNVarCharParam("@LinkPlaceName", 100).Output();
                        SqlParameter LinkPlaceAddressParam   = cmd.AddNVarCharParam("@LinkPlaceAddress", 100).Output();
                        SqlParameter LinkPlaceCityParam      = cmd.AddNVarCharParam("@LinkPlaceCity", 40).Output();
                        SqlParameter EmployeeIdParam         = cmd.AddIntParam("@EmployeeId").Output();
                        SqlParameter EmployeePlaceIdParam    = cmd.AddIntParam("@EmployeePlaceId").Output();
                        SqlParameter EmployeeIsDisabledParam = cmd.AddBitParam("@EmployeeIsDisabled").Output();
                        SqlParameter retValParam             = cmd.AddReturnValue();

                        await cmd.ExecuteNonQueryAsync();

                        int retVal = retValParam.GetInt32OrDefault();
                        if (retVal < 0)
                        {
                            ErrorResponse errorResponse = this.GetErrorResponse(retVal);
                            return(new JsonErrorResult(errorResponse));
                        }

                        FollowReglinkResponse response = new FollowReglinkResponse();
                        response.LinkPlaceId        = LinkPlaceIdParam.GetInt32OrDefault();
                        response.LinkPlaceName      = LinkPlaceNameParam.Value.ToString();
                        response.LinkPlaceAddress   = LinkPlaceAddressParam.Value.ToString();
                        response.LinkPlaceCity      = LinkPlaceCityParam.Value.ToString();
                        response.EmployeeId         = EmployeeIdParam.GetInt32OrNull();
                        response.EmployeePlaceId    = EmployeePlaceIdParam.GetInt32OrNull();
                        response.EmployeeIsDisabled = EmployeeIsDisabledParam.GetBooleanOrNull();
                        return(new JsonResult(response));
                    }
                }
            }
            catch (Exception ex)
            {
                return(new JsonErrorResult(this.GetExceptionResponse(ex)));
            }
        }
Пример #8
0
        private async Task GetQrCodeAsync(Update update, Employee employee)
        {
            string receiverCode = employee.Place.Id.ToString() + "-" + employee.Id.ToString();
            string qrString     = "ST00011|Name=ООО Чаевые-24|PersonalAcc=40702810970010113722|BankName=МОСКОВСКИЙ ФИЛИАЛ АО КБ \"МОДУЛЬБАНК\"|" +
                                  "BIC=044525092|CorrespAcc=30101810645250000092|PayeeINN=1651083591|" +
                                  "Purpose=Дарение чаевых коллективу по договору-оферте tips24.ru/" + receiverCode + "|" +
                                  "PayerAddress=" + employee.Place.City + ", " + employee.Place.Address + "|LastName=Гость|FirstName=заведения";

            //string qrString = "ST00011|Name=ИП Галяутдинов Ринат Ибрагимович|PersonalAcc=40802810470210002677|BankName=МОСКОВСКИЙ ФИЛИАЛ АО КБ \"МОДУЛЬБАНК\"|BIC=044525092|CorrespAcc=30101810645250000092|PayeeINN=165117672519|" +
            //	"Purpose=Дарение чаевых коллективу по договору-оферте tips24.ru/" + receiverCode + "|" +
            //	"PayerAddress="+ employee.PlaceCity + ", " + employee.PlaceAddress + "|LastName=Гость|FirstName=заведения";

            byte[] hash = GetQrHash(qrString);
            if (employee.QrCode != null && employee.QrCode.IsValid(hash))
            {
                ReplyKeyboardMarkup keyboard = GetStandardKeyboardMarkup(employee);
                Message             response = await _telegramClient.SendPhotoAsync(update.Message.From.Id, new InputOnlineFile(employee.QrCode.FileId),
                                                                                    null, ParseMode.Default, false, 0, keyboard, _cts.Token);

                await this.WriteMessageLog(new QrCodeOutputMessageLog(employee, employee.QrCode.FileId, receiverCode, keyboard));

                return;
            }

            QRCodeWriter qrWriter = new QRCodeWriter();
            Dictionary <ZXing.EncodeHintType, object> hints = new Dictionary <ZXing.EncodeHintType, object>();

            hints.Add(ZXing.EncodeHintType.CHARACTER_SET, "windows-1251");
            hints.Add(ZXing.EncodeHintType.MARGIN, 1);
            ZXing.Common.BitMatrix matrix = qrWriter.encode(qrString, ZXing.BarcodeFormat.QR_CODE, 640, 640, hints);

            BarcodeWriter <Rgb24> writer = new BarcodeWriter <Rgb24>();

            string fileId = null;

            using (MemoryStream ms = new MemoryStream())
            {
                using (Image <Rgb24> image = writer.Write(matrix))
                {
                    image.Save(ms, new PngEncoder()
                    {
                        ColorType = PngColorType.Grayscale, BitDepth = PngBitDepth.Bit8
                    });
                }
                ms.Position = 0;

                ReplyKeyboardMarkup keyboard = GetStandardKeyboardMarkup(employee);
                Message             response = await _telegramClient.SendPhotoAsync(update.Message.From.Id, new InputOnlineFile(ms), null, ParseMode.Default, false, 0, keyboard, _cts.Token);

                fileId = response.Photo[0].FileId;
                await this.WriteMessageLog(new QrCodeOutputMessageLog(employee, fileId, receiverCode, keyboard));
            }

            using (SqlConnection conn = _sqlServer.GetConnection())
            {
                await conn.OpenAsync();

                using (SqlCommand cmd = _sqlServer.GetSpCommand("telegram.UpdateQrCodeFileId", conn))
                {
                    cmd.AddBigIntParam("@UserId", employee.TelegramUserId);
                    cmd.AddVarCharParam("@QrCodeFileId", 64, fileId);
                    cmd.AddBinaryParam("@QrCodeStringHash", 40, hash);

                    await cmd.ExecuteNonQueryAsync();
                }
            }
        }