// GET: Secrets
        public async Task <ActionResult> List(string filter = "")
        {
            var username = User.Identity.Name;

            var query = @"SELECT s.SecretId as SecretId, Description, Text, Name as [User] FROM Users u
                          JOIN Secrets s ON s.UserId = u.UserId
                          WHERE Name = '{0}'";

            var completeQuery = string.Format(query, username);

            if (!string.IsNullOrWhiteSpace(filter))
            {
                completeQuery += string.Format(" AND Description LIKE '%{0}%'", filter);
            }

            using (var entities = new PenEntities())
            {
                var secrets = await entities.Database.SqlQuery <SecretModel>(completeQuery).ToListAsync();

                //    var secrets = await entities
                //        .Users
                //        .Where(x => x.Name == username)
                //        .SelectMany(x => x.Secrets)
                //        .Select(x => new SecretModel() { SecretId = x.SecretId, Description = x.Description, Text = x.Text, User = x.User.Name })
                //        .ToListAsync();

                return(View(new SecretsListModel()
                {
                    User = username,
                    Secrets = secrets,
                    Filter = filter
                }));
            }
        }
Exemple #2
0
        public async Task <ActionResult> Index()
        {
            using (var entities = new PenEntities())
            {
                var user = await entities.Users.FirstAsync(x => x.Name == User.Identity.Name);

                return(View(new UserModel()
                {
                    Name = user.Name, Status = user.Status
                }));
            }
        }
        public async Task <ActionResult> Create(SecretModel model)
        {
            if (!ModelState.IsValid)
            {
                return(this.View(model));
            }

            using (var entities = new PenEntities())
            {
                var user = await entities.Users.FirstAsync(x => x.Name == User.Identity.Name);

                user.Secrets.Add(new Secret()
                {
                    Description = model.Description,
                    Text        = model.Text
                });
                await entities.SaveChangesAsync();
            }

            return(RedirectToAction("List"));
        }
        // GET: Secrets/1
        public async Task <ActionResult> Details(int secretId)
        {
            //NOTE: We do not check user
            using (var entities = new PenEntities())
            {
                var secret = await entities.Secrets.FirstOrDefaultAsync(x => x.SecretId == secretId);

                if (secret == null)
                {
                    throw new HttpException(404, "Secret not found");
                }

                return(this.View(new SecretModel
                {
                    SecretId = secret.SecretId,
                    Description = secret.Description,
                    Text = secret.Text,
                    User = secret.User.Name
                }));
            }
        }
Exemple #5
0
        private static async Task NewUserHandler(IOwinContext context, Func <Task> next)
        {
            var user = context.Authentication.User;

            if (user != null)
            {
                var username = user.Identity.Name;

                using (var entities = new PenEntities())
                {
                    using (var transaction = entities.Database.BeginTransaction(IsolationLevel.Serializable))
                    {
                        try
                        {
                            var userEntity = await entities.Users.FirstOrDefaultAsync(x => x.Name == username);

                            if (userEntity == null)
                            {
                                entities.Users.Add(new User()
                                {
                                    Name = username, Status = ""
                                });

                                await entities.SaveChangesAsync();
                            }

                            transaction.Commit();
                        }
                        catch
                        {
                            transaction.Rollback();
                            throw;
                        }
                    }
                }
            }

            await next.Invoke();
        }
Exemple #6
0
        public async Task <ActionResult> ChangeStatus(string status = null)
        {
            using (var entities = new PenEntities())
            {
                var user = await entities
                           .Users
                           .Where(x => x.Name == User.Identity.Name)
                           .FirstAsync();

                if (status == null)
                {
                    return(this.View("ChangeStatus",
                                     new StatusModel {
                        Status = user.Status
                    }));
                }
                ;

                user.Status = status;
                await entities.SaveChangesAsync();

                return(RedirectToAction("Index"));
            }
        }