/// <summary> /// 指定されたアクセストークンを削除します。 /// 顧客のロック情報も削除します。 /// </summary> /// <param name="userlock">0は顧客ロックを解除しない。1は顧客ロックを解除する。</param> /// <returns>レスポンス</returns> public async Task <HttpResponseMessage> DeleteAndUnLock(int userlock) { //--- アクセストークンが指定されているかを確認 TokenInfo info = null; try { info = TokenInfo.From(this.Request); } catch (Exception ex) { return(this.Request.CreateErrorResponse(HttpStatusCode.BadRequest, ex)); } if (!info.HasAccessToken) { return(this.Request.CreateErrorResponse(HttpStatusCode.BadRequest, "アクセストークンが指定されていません。")); } //-- STR ////ユーザがロックしている顧客を解放 //var user_id = await this.accessTokenRepository.GetUserIdAsync(info.AccessToken); //if (userlock == 1) //{ // if (user_id != null) // await new CommonRepository().DeleteUnlockByUserId((int)user_id); //} //-- END //--- 削除実行 var result = await this.accessTokenRepository.DeleteAsync(info.AccessToken).ConfigureAwait(false); return(result ? this.Request.CreateResponse(HttpStatusCode.NoContent) : this.Request.CreateResponse(HttpStatusCode.NotFound)); }
/// <summary> /// 実処理前後をフックし、カスタム処理を行います。 /// </summary> /// <param name="request">リクエスト</param> /// <param name="cancellationToken">キャンセルトークン</param> /// <returns>レスポンス</returns> protected override async Task <HttpResponseMessage> SendAsync(HttpRequestMessage request, CancellationToken cancellationToken) { //--- アクセストークンが指定されているかを確認 TokenInfo info = null; try { info = TokenInfo.From(request); } catch (Exception ex) { return(request.CreateErrorResponse(HttpStatusCode.BadRequest, ex)); } if (!info.HasAccessToken) { return(request.CreateErrorResponse(HttpStatusCode.BadRequest, "アクセストークンが指定されていません。")); } //--- アクセストークンが有効かを確認 var userId = await this.accessTokenRepository.GetUserIdAsync(info.AccessToken).ConfigureAwait(false); if (!userId.HasValue) { return(request.CreateErrorResponse(HttpStatusCode.Unauthorized, "指定されたアクセストークンは無効です。")); } //--- ユーザーIDをキャッシュ var context = request.GetHttpContext(); context.SetUserId(userId.Value); //--- 実処理の呼び出し return(await base.SendAsync(request, cancellationToken).ConfigureAwait(false)); }
/// <summary> /// アクセストークンを発行します。 /// </summary> /// <returns>アクセストークン</returns> public async Task <AccessToken> Post() { //--- リクエストトークンが指定されているか TokenInfo info = null; try { info = TokenInfo.From(this.Request); } catch { throw new HttpResponseException(HttpStatusCode.BadRequest); } if (!info.HasRequestToken) { throw new HttpResponseException(HttpStatusCode.BadRequest); } //--- リクエストトークンが有効かを確認 var isValid = await this.requestTokenRepository.IsValidAsync(info.RequestToken).ConfigureAwait(false); if (!isValid) { throw new HttpResponseException(HttpStatusCode.Unauthorized); } //--- 使用したリクエストトークンを削除 var deleted = await this.requestTokenRepository.DeleteAsync(info.RequestToken).ConfigureAwait(false); if (!deleted) { throw new HttpResponseException(HttpStatusCode.InternalServerError); } //--- ユーザー認証情報が指定されているか確認 var userInfo = await this.Request.Content.ReadAsByteArrayAsync().ConfigureAwait(false); if (userInfo == null || userInfo.Length == 0) { throw new HttpResponseException(HttpStatusCode.BadRequest); } //--- ユーザーID / パスワードを照合 var service = new CryptoService(info.RequestToken); var json = service.Decrypt(userInfo); var authInfo = JsonConvert.DeserializeObject <UserAuthInfo>(json); var authorized = await this.employeeRepository.AuthenticateAsync(authInfo).ConfigureAwait(false); if (!authorized) { throw new HttpResponseException(HttpStatusCode.Unauthorized); } //--- アクセストークンを発行 return(await this.accessTokenRepository.CreateAsync(authInfo.Id).ConfigureAwait(false)); }
/// <summary> /// 指定されたアクセストークンを削除します。 /// </summary> /// <returns>レスポンス</returns> public async Task <HttpResponseMessage> Delete() { //--- アクセストークンが指定されているかを確認 TokenInfo info = null; try { info = TokenInfo.From(this.Request); } catch (Exception ex) { return(this.Request.CreateErrorResponse(HttpStatusCode.BadRequest, ex)); } if (!info.HasAccessToken) { return(this.Request.CreateErrorResponse(HttpStatusCode.BadRequest, "アクセストークンが指定されていません。")); } //--- 削除実行 var result = await this.accessTokenRepository.DeleteAsync(info.AccessToken).ConfigureAwait(false); return(result ? this.Request.CreateResponse(HttpStatusCode.NoContent) : this.Request.CreateResponse(HttpStatusCode.NotFound)); }