public IActionResult SetThumbnail([FromBody] TransferFile?transferFile) { try { using UserProfileContext userProfileContext = CreateUserProfileContext(out DbSet <RegisteredUser> registeredUsers, out _, out _); if (!IsTokenValid(registeredUsers, out RegisteredUser? loginUser)) { return(Unauthorized()); } if (transferFile == null) { return(BadRequest()); } // 設定 using MemoryStream memoryStream = new MemoryStream(transferFile.Content); loginUser.Bitmap = ServerCommon.CreateThumbnail(memoryStream, transferFile.Mime, YbdConstants.USER_THUMBNAIL_WIDTH_MAX, YbdConstants.USER_THUMBNAIL_HEIGHT_MAX, true); loginUser.Mime = transferFile.Mime; loginUser.LastModified = YbdCommon.UtcNowModifiedJulianDate(); userProfileContext.SaveChanges(); return(Ok()); } catch (Exception excep) { Debug.WriteLine("プロフィール画像設定サーバーエラー:\n" + excep.Message); Debug.WriteLine(" スタックトレース:\n" + excep.StackTrace); return(InternalServerError()); } }
public IActionResult AddUser([FromBody] LoginInfo registerInfo) { try { if (!registerInfo.IsValid()) { return(BadRequest()); } using UserProfileContext userProfileContext = CreateUserProfileContext(out DbSet <RegisteredUser> registeredUsers, out _, out _); RegisteredUser newUser = new(); newUser.Name = registerInfo.Name; newUser.Password = registerInfo.Password; newUser.LastModified = newUser.LastLogin = YbdCommon.UtcNowModifiedJulianDate(); if (!IsAdminRegistered(registeredUsers)) { // 管理者未登録の場合は管理者登録でなければならない if (newUser.Name != YbdConstants.ADMIN_NAME) { return(BadRequest()); } newUser.IsAdmin = true; } // 同じ名前のユーザーが既に存在している場合は登録できない if (registeredUsers.FirstOrDefault(x => x.Name == newUser.Name) != null) { return(Conflict()); } // 登録 HashPassword(newUser); registeredUsers.Add(newUser); userProfileContext.SaveChanges(); String idAndToken = GenerateIdAndTokenString(newUser.Id); Debug.WriteLine("AddUser() " + idAndToken); // 登録と同時にログインできるように ID とログイン用トークンを返す return(Ok(idAndToken)); } catch (Exception excep) { Debug.WriteLine("ユーザー登録サーバーエラー:\n" + excep.Message); Debug.WriteLine(" スタックトレース:\n" + excep.StackTrace); return(InternalServerError()); } }
public IActionResult Login([FromBody] LoginInfo loginInfo) { try { if (!loginInfo.IsValid()) { return(BadRequest()); } #if DEBUG Thread.Sleep(1000); #endif // ユーザーを検索 using UserProfileContext userProfileContext = CreateUserProfileContext(out DbSet <RegisteredUser> registeredUsers, out _, out _); RegisteredUser?loginUser = registeredUsers.SingleOrDefault(x => x.Name == loginInfo.Name); if (loginUser == null) { return(NotAcceptable()); } // パスワードハッシュの一致を確認 if (loginUser.Password != HashPassword(loginInfo.Password, loginUser.Salt)) { return(NotAcceptable()); } String idAndToken = GenerateIdAndTokenString(loginUser.Id); Debug.WriteLine("Login() " + idAndToken); loginUser.LastLogin = YbdCommon.UtcNowModifiedJulianDate(); userProfileContext.SaveChanges(); // ID とログイン用トークンを返す return(Ok(idAndToken)); } catch (Exception excep) { Debug.WriteLine("ログインサーバーエラー:\n" + excep.Message); Debug.WriteLine(" スタックトレース:\n" + excep.StackTrace); return(InternalServerError()); } }
public IActionResult SetPassword([FromBody] String?[] passwords) { try { using UserProfileContext userProfileContext = CreateUserProfileContext(out DbSet <RegisteredUser> registeredUsers, out _, out _); if (!IsTokenValid(registeredUsers, out RegisteredUser? loginUser)) { return(Unauthorized()); } if (passwords.Length < 2) { return(BadRequest()); } String?currentPassword = passwords[0]; String?newPassword = passwords[1]; if (String.IsNullOrEmpty(currentPassword) || String.IsNullOrEmpty(newPassword)) { return(BadRequest()); } // 現在のパスワードハッシュの一致を確認 if (loginUser.Password != HashPassword(currentPassword, loginUser.Salt)) { return(NotAcceptable()); } // 設定 loginUser.Password = newPassword; loginUser.LastModified = YbdCommon.UtcNowModifiedJulianDate(); HashPassword(loginUser); userProfileContext.SaveChanges(); return(Ok()); } catch (Exception excep) { Debug.WriteLine("パスワード設定サーバーエラー:\n" + excep.Message); Debug.WriteLine(" スタックトレース:\n" + excep.StackTrace); return(InternalServerError()); } }
public IActionResult SetName([FromBody] String?newName) { try { using UserProfileContext userProfileContext = CreateUserProfileContext(out DbSet <RegisteredUser> registeredUsers, out _, out _); if (!IsTokenValid(registeredUsers, out RegisteredUser? loginUser)) { return(Unauthorized()); } if (String.IsNullOrEmpty(newName)) { return(BadRequest()); } // 管理者の名前は変更できない if (loginUser.IsAdmin) { return(BadRequest()); } // 同じ名前のユーザーが既に存在している場合は登録できない if (registeredUsers.FirstOrDefault(x => x.Name == newName) != null) { return(Conflict()); } // 設定 loginUser.Name = newName; loginUser.LastModified = YbdCommon.UtcNowModifiedJulianDate(); userProfileContext.SaveChanges(); return(Ok()); } catch (Exception excep) { Debug.WriteLine("名前設定サーバーエラー:\n" + excep.Message); Debug.WriteLine(" スタックトレース:\n" + excep.StackTrace); return(InternalServerError()); } }
public IActionResult AddStock([FromBody] AvailableSong availableSong) { try { using UserProfileContext userProfileContext = CreateUserProfileContext(out DbSet <RegisteredUser> registeredUsers, out DbSet <StockSong> stockSongs, out _); if (!IsTokenValid(registeredUsers, out RegisteredUser? loginUser)) { return(Unauthorized()); } StockSong?stockSong = stockSongs.SingleOrDefault(x => x.UserId == loginUser.Id && x.AvailableSongId == availableSong.Id); if (stockSong == null) { // 新規追加 stockSong = new(); YbdCommon.CopySongProperty(availableSong, stockSong); stockSong.AvailableSongId = availableSong.Id; stockSong.UserId = loginUser.Id; stockSong.RequestTime = YbdCommon.UtcNowModifiedJulianDate(); stockSongs.Add(stockSong); } else { // 登録日時更新 stockSong.RequestTime = YbdCommon.UtcNowModifiedJulianDate(); } userProfileContext.SaveChanges(); return(Ok()); } catch (Exception excep) { Debug.WriteLine("後で歌う予定追加サーバーエラー:\n" + excep.Message); Debug.WriteLine(" スタックトレース:\n" + excep.StackTrace); return(InternalServerError()); } }