//日記の設定変更を行う
        public async Task <IActionResult> OnPostAsync()
        {
            if (!ModelState.IsValid)
            {
                return(Page());
            }

            //認証情報から日記を取得
            string id    = HttpContext.User.FindFirst(ClaimTypes.NameIdentifier).Value;
            Diary  diary = await _context.diaries.FirstOrDefaultAsync(m => m.Id == id);

            //POSTデータを適用
            diary.note = form.note;
            diary.pub  = form.pub;

            //DBへ保存
            _context.Attach(diary).State = EntityState.Modified;
            try {
                await _context.SaveChangesAsync();
            } catch (DbUpdateConcurrencyException) {
                if (!_context.diaries.Any(e => e.Id == diary.Id))
                {
                    return(NotFound());
                }
                else
                {
                    throw;
                }
            }

            return(RedirectToPage("/My"));
        }
Example #2
0
        //Post
        public async Task <IActionResult> OnPostAsync(string returnUrl = null)
        {
            //必須入力がないなどの場合、処理しない
            if (!ModelState.IsValid)
            {
                return(Page());
            }

            //認証処理
            Diary diary = await _context.diaries.FindAsync(Input.diaryId);

            if (diary == null)
            {
                message = "エラー:日記が見つかりません";
                return(Page());
            }
            else if (!PBKDF2.Verify(Input.pass, diary.pass))
            {
                message = "エラー:鍵が一致しません";
                return(Page());
            }
            //認証成功

            //ログイン日時をDBへ保存
            diary.last = DateTime.Now;
            _context.Attach(diary).State = EntityState.Modified;
            //try {
            await _context.SaveChangesAsync();

            //} catch (Exception ex) { }

            //ログイン処理
            //認証情報の登録
            var identity = new ClaimsIdentity(CookieAuthenticationDefaults.AuthenticationScheme); //Cookie認証を利用する

            identity.AddClaim(new Claim(ClaimTypes.NameIdentifier, Input.diaryId));               //Idを格納
            var salt = new byte[8];

            RandomNumberGenerator.Create().GetBytes(salt);
            identity.AddClaim(new Claim(ClaimTypes.Sid, Convert.ToBase64String(salt)));             //csrf用id

            //ログイン
            await HttpContext.SignInAsync(
                CookieAuthenticationDefaults.AuthenticationScheme,
                new ClaimsPrincipal(identity),
                new AuthenticationProperties
            {
                IsPersistent = false,                    //ブラウザを閉じたとき、ログインを維持するか
                ExpiresUtc   = DateTime.UtcNow.AddMinutes(30),
            });

            return(LocalRedirect(returnUrl ?? Url.Content("~/")));
        }
Example #3
0
        //POST
        public async Task <IActionResult> OnPostAsync()
        {
            if (!ModelState.IsValid)
            {
                return(Page());
            }

            //パスワードをハッシュ化する
            this.Diary.pass = PBKDF2.Hash(this.Diary.pass).ToString();

            //日記、その他の項目を初期設定する。(id, noteは、POSTされた値を使用する)
            this.Diary.pub     = PUBLICITY.pub;
            this.Diary.last    = DateTime.Now;
            this.Diary.excha   = EXCHA.disable;
            this.Diary.writa   = WRITA.able;
            this.Diary.retTime = DateTime.Now;
            this.Diary.exid    = null;

            //DBへ保存する
            _context.diaries.Add(Diary);
            try {
                await _context.SaveChangesAsync();
            } catch (DbUpdateException ex) {
                _logger.Log(LogLevel.Error, ex.Message);
                //id重複確認
                if (_context.diaries.Any(e => e.Id == Diary.Id))
                {
                    this.message = "エラー:既に使用されているIDです";
                    return(Page());
                }
                else
                {
                    throw;
                }
            }
            return(RedirectToPage("/Account/Login"));
        }
Example #4
0
        //leafの作成、編集を行う
        public async Task <IActionResult> OnPostAsync()
        {
            if (!ModelState.IsValid)
            {
                message = "エラー:入力が正しくありません";
                return(Page());
            }
            //基本情報の取得
            ClaimsPrincipal user     = HttpContext.User;
            Diary           objDiary = await _context.diaries.FindAsync(leaf.diaryId);

            if (objDiary == null)
            {
                return(StatusCode(404));
            }
            //Leaf dbLeaf = _context.leaves.Where(l => (l.diaryId == leaf.diaryId && l.time == leaf.time)).FirstOrDefault();
            Leaf         dbLeaf  = null;
            IList <Leaf> Lleaves = _context.leaves.Where(l => l.diaryId == leaf.diaryId).ToList();

            for (int i = 0; i < Lleaves.Count(); i++)
            {
                if (Lleaves[i].time.ToString() == leaf.time.ToString())
                {
                    dbLeaf = Lleaves[i];
                    break;
                }
            }

            if (dbLeaf == null)
            {
                createFlag  = DiaryAuth.authCreateLeaf(user, objDiary);                    //作成権限を取得
                editFlag    = false;
                commentFlag = false;
            }
            else
            {
                createFlag = false;
                editFlag   = await DiaryAuth.authEditLeaf(user, _context, dbLeaf);                 //編集権限を取得

                commentFlag = await DiaryAuth.authCommentLeaf(user, _context, dbLeaf);             //コメント権限を取得
            }

            //権限に従い、処理を行う
            //作成か
            if (createFlag)
            {
                //作成のとき
                //leafの作成
                leaf.diaryId = user.FindFirst(ClaimTypes.NameIdentifier).Value;
                leaf.time    = DateTime.Now;
                leaf.exid    = null;
                leaf.comment = null;
                _context.leaves.Add(leaf);
                //日記フラグの変更
                Diary my = await _context.diaries.FindAsync(user.FindFirst(ClaimTypes.NameIdentifier).Value);

                my.excha = EXCHA.able;
                my.writa = WRITA.disable;
                _context.Attach(my).State = EntityState.Modified;
            }            //コメントか
            else if (commentFlag)
            {
                //コメントのとき
                dbLeaf.exid    = user.FindFirst(ClaimTypes.NameIdentifier).Value;
                dbLeaf.comment = leaf.comment;
                _context.Attach(dbLeaf).State = EntityState.Modified;
                //日記フラグの変更
                Diary my = await _context.diaries.FindAsync(user.FindFirst(ClaimTypes.NameIdentifier).Value);

                my.writa = WRITA.able;
                my.excha = EXCHA.disable;
                _context.Attach(my).State       = EntityState.Modified;
                _context.Attach(objDiary).State = EntityState.Modified;
            }            //編集か
            else if (editFlag)
            {
                //編集のとき
                dbLeaf.title    = leaf.title;
                dbLeaf.contents = leaf.contents;
                _context.Attach(dbLeaf).State = EntityState.Modified;
            }
            else
            {
                //変更権限なしのとき
                return(StatusCode(403));
            }

            await _context.SaveChangesAsync();

            //catch (DbUpdateConcurrencyException) {/* 存在しないときのエラー */}

            return(Redirect("~/Leaves/Index?id=" + leaf.diaryId));
        }