Exemple #1
0
        /// <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));
        }
Exemple #2
0
        /// <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));
        }
Exemple #3
0
        /// <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));
        }
Exemple #4
0
        /// <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));
        }