//日記の設定変更を行う 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")); }
//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("~/"))); }
//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")); }
//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)); }