コード例 #1
0
        private void _ctx_SavedChanges(object sender, Microsoft.EntityFrameworkCore.SavedChangesEventArgs e)
        {
            var lastDbUpdateTime = DateTime.Now;


            int libCount = _ctx.LastRecordTimes.Count();

            if (libCount == 0)
            {
                _ctx.LastRecordTimes.Add(new LastRecordTime()
                {
                    lastUpdateTime = DateTime.Now
                });
            }
            else
            {
                //_ctx.LastRecordTimes.Find(1).lastUpdateTime = DateTime.Now;
                _ctx.LastRecordTimes.FirstOrDefault().lastUpdateTime = DateTime.Now;
            }


            _ctx.SavedChanges -= _ctx_SavedChanges;
            _ctx.SaveChanges();
            _ctx.SavedChanges += _ctx_SavedChanges;
        }
コード例 #2
0
        public ActionResult MoveFileToFtp(string id)
        {
            myFileMetadata md = FileVerification(id, StoragePath, true);

            if (md.FileInfo is null)
            {
                _logger.LogError("Не удалось получить информацию по файлу: {0}", Path.Combine(UploadsPath, id));
                return(new ObjectResult(new ServerActionResult()
                {
                    Success = false,
                    Info = "Ошибка обработки запроса",
                    Status = StylesMessageEnum.warning.ToString()
                }));
            }

            DbContext.FilesStorage.Remove(md.Object);
            DbContext.SaveChanges();

            string file_name = PickFileName(md.Object.Name, UploadsPath);

            md.FileInfo.MoveTo(Path.Combine(UploadsPath, file_name));
            if (!(md.ThumbFileInfo is null))
            {
                md.ThumbFileInfo.MoveTo(Path.Combine(UploadsThumbsPath, file_name));
            }

            return(new ObjectResult(new ServerActionResult()
            {
                Success = true,
                Info = "Файл выгружен в общую папку: " + file_name,
                Status = StylesMessageEnum.success.ToString(),
                Tag = file_name
            }));
        }
コード例 #3
0
        public static void Main(string[] args)
        {
            var host = CreateHostBuilder(args).Build();

            using (var scope = host.Services.CreateScope())
            {
                var services = scope.ServiceProvider;

                try
                {
                    AppDataBaseContext   context = services.GetRequiredService <AppDataBaseContext>();
                    IOptions <AppConfig> options = services.GetRequiredService <IOptions <AppConfig> >();
                    if (options.Value.HasDemoData)
                    {
                        SampleDemoData.Initialize(context);
                    }
                    if (options.Value.SetUserRootById > 0)
                    {
                        UserObjectModel user = context.Users.FirstOrDefault(x => x.Id == options.Value.SetUserRootById);
                        if (user != null)
                        {
                            user.Role = AccessLevelUserRolesEnum.ROOT;
                            context.SaveChanges();
                        }
                    }
                }
                catch (Exception ex)
                {
                    var logger = services.GetRequiredService <ILogger <Program> >();
                    logger.LogError(ex, "An error occurred seeding the DB.");
                }
            }
            host.Run();
        }
コード例 #4
0
        public Transaction Post(Transaction transaction)
        {
            User user       = _ctx.Users.FirstOrDefault(x => x.Email == User.Identity.Name);
            User targetUser = _ctx.Users.FirstOrDefault(x => x.Id == transaction.TargetUserId);

            transaction.OwnerUserId = user.Id;
            transaction.Date        = (Int32)(DateTime.UtcNow.Subtract(new DateTime(1970, 1, 1))).TotalSeconds;
            transaction.Balance     = user.Balance - transaction.Amount;

            user.Balance        = transaction.Balance;
            targetUser.Balance += transaction.Amount;

            _ctx.Transactions.Add(transaction);
            _ctx.Users.Update(user);
            _ctx.Users.Update(targetUser);
            _ctx.SaveChanges();

            return(transaction);
        }
コード例 #5
0
        /*public Categoria ObtenerCategoria(int Id)
         * {
         *  using (var db = new AppDataBaseContext())
         *  {
         *      return db
         *          .Categorias
         *          .Where(categoria => categoria.Item.Id == Id);
         *
         *  }
         * }*/
        //TODO

        public void AddItem(string nombre, float precio, Categoria categoria)
        {
            using (var db = new AppDataBaseContext())
            {
                db.Items
                .AddOrUpdate(new Item()
                {
                    /*Dni = dni,
                     * Nombre = nombre,
                     * Apellido = apellido,
                     * FechaNacimiento = fechaNacimiento*/
                    Nombre    = nombre,
                    Precio    = precio,
                    Categoria = categoria
                });

                db.SaveChanges();
            }
        }
コード例 #6
0
        public UsersController(AppDataBaseContext context)
        {
            this.db = context;


            db.Users.Add(new User {
                Name = "bob", Age = 66, Phone = +3989879877
            });
            db.Users.Add(new User {
                Name = "kolya", Age = 26, Phone = +39464665478
            });
            db.Users.Add(new User {
                Name = "vasya", Age = 31, Phone = +394545455
            });
            db.Users.Add(new User {
                Name = "ola", Age = 26, Phone = +3945454533
            });
            db.Users.Add(new User {
                Name = "max", Age = 8, Phone = +345458794552
            });

            db.SaveChanges();
        }
コード例 #7
0
        public async Task <IActionResult> Post([FromBody] RegisterModel regUser)
        {
            if (!AppOptions.AllowedWebRegistration)
            {
                return(new ObjectResult(new ServerActionResult()
                {
                    Success = false,
                    Info = "Регистрация через web интерфейс отключена администратором",
                    Status = StylesMessageEnum.warning.ToString()
                }));
            }

            if (!ModelState.IsValid)
            {
                return(new ObjectResult(new ServerActionResult()
                {
                    Success = false,
                    Info = "Ошибка контроля валидации модели. Регистрация отклонена.",
                    Status = StylesMessageEnum.warning.ToString(),
                    Tag = ModelState
                }));
            }

            if (AppOptions.IsEnableReCaptchaV2 || AppOptions.IsEnableReCaptchaV2Invisible)
            {
                string privatKey = AppOptions.IsEnableReCaptchaV2Invisible
                    ? AppOptions.reCaptchaV2InvisiblePrivatKey
                    : AppOptions.reCaptchaV2PrivatKey;
                reCaptcha2ResponseModel reCaptcha2Status = reCaptchaVerifier.reCaptcha2SiteVerify(privatKey, regUser.g_recaptcha_response, HttpContext.Connection.RemoteIpAddress.ToString());

                if (reCaptcha2Status is null || !reCaptcha2Status.success || (reCaptcha2Status.ErrorСodes != null && reCaptcha2Status.ErrorСodes.Length > 0))
                {
                    return(new ObjectResult(new ServerActionResult()
                    {
                        Success = false,
                        Info = "Неудачная попытка регистрации. Ошибка верификации reCaptcha.",
                        Status = StylesMessageEnum.danger.ToString(),
                        Tag = reCaptcha2Status
                    }));
                }
            }

            if (await DbContext.Users.AnyAsync(u => u.Name.ToLower() == regUser.PublicNameRegister.ToLower()))
            {
                return(new ObjectResult(new ServerActionResult()
                {
                    Success = false,
                    Info = "Неудачная попытка регистрации. Публичное имя используется другим пользователем. Введите другое.",
                    Status = StylesMessageEnum.warning.ToString()
                }));
            }

            UserObjectModel user = DbContext.Users.FirstOrDefault(u => u.Email.ToLower() == regUser.EmailRegister.ToLower());

            if (user != null)
            {
                return(new ObjectResult(new ServerActionResult()
                {
                    Success = false,
                    Info = "Неудачная попытка регистрации. Логин занят. Придумайте другой лгин для входа или воспользуйтесь формой входа.",
                    Status = StylesMessageEnum.warning.ToString()
                }));
            }

            DepartmentObjectModel userDepartment = DbContext.Departments.FirstOrDefault(x => x.Name.ToLower() == "user");

            if (userDepartment is null)
            {
                userDepartment = new DepartmentObjectModel()
                {
                    Name = "user", isReadonly = true
                };
                DbContext.Departments.Add(userDepartment);
                DbContext.SaveChanges();
            }

            user = new UserObjectModel {
                Email = regUser.EmailRegister, Name = regUser.PublicNameRegister, Password = glob_tools.GetHashString(regUser.PasswordRegister), Role = AccessLevelUserRolesEnum.Auth, DepartmentId = userDepartment.Id
            };
            DbContext.Users.Add(user);
            DbContext.SaveChanges();

            await Authenticate(user);

            return(new ObjectResult(new ServerActionResult()
            {
                Success = true,
                Info = "Регистрация успешно завершена",
                Status = StylesMessageEnum.success.ToString(),
                Tag = new { user.Name, user.Role, Department = user.Department.Name }
            }));
        }
コード例 #8
0
        public async Task Post(User user)
        {
            //user.Username is not null
            if (string.IsNullOrWhiteSpace(user.Username))
            {
                Response.StatusCode = 400;
                await Response.WriteAsync("You must send a username");

                return;
            }

            //user.Password is not null
            if (string.IsNullOrWhiteSpace(user.Password))
            {
                Response.StatusCode = 400;
                await Response.WriteAsync("You must send a password");

                return;
            }

            //user.Email is not null
            if (string.IsNullOrWhiteSpace(user.Email))
            {
                Response.StatusCode = 400;
                await Response.WriteAsync("You must send a valid email address");

                return;
            }
            //user.Email is not valid
            var regex = new Regex(@"\w+([-+.']\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*", RegexOptions.Compiled);
            var match = regex.Match(user.Email);

            if (!(match.Success && match.Length == user.Email.Length))
            {
                Response.StatusCode = 400;
                await Response.WriteAsync("You must send a valid email address");

                return;
            }

            //user.Email is already exist in db
            var anyUser = _ctx.Users.Any(p => string.Compare(p.Email, user.Email) == 0);

            if (anyUser)
            {
                Response.StatusCode = 400;
                await Response.WriteAsync("User with that email already exist");

                return;
            }

            user.Password = CalculateMD5Hash(user.Password);

            var email    = user.Email;
            var password = user.Password;

            user.Balance = 500;

            _ctx.Users.Add(user);
            _ctx.SaveChanges();

            var identity = GetIdentity(email, password);

            if (identity == null)
            {
                Response.StatusCode = 400;
                await Response.WriteAsync("Invalid username or password. - " + password);

                return;
            }

            var now = DateTime.UtcNow;
            var jwt = new JwtSecurityToken(
                issuer: AuthOptions.ISSUER,
                notBefore: now,
                claims: identity.Claims,
                expires: now.Add(TimeSpan.FromMinutes(AuthOptions.LIFETIME)),
                signingCredentials: new SigningCredentials(
                    AuthOptions.GetSymmetricSecurityKey(),
                    SecurityAlgorithms.HmacSha256)
                );
            var encodedJwt = new JwtSecurityTokenHandler().WriteToken(jwt);

            var response = new
            {
                id_token = encodedJwt,
                username = identity.Name
            };

            Response.ContentType = "application/json";
            await Response.WriteAsync(
                JsonConvert.SerializeObject(response,
                                            new JsonSerializerSettings {
                Formatting = Formatting.Indented
            }));
        }