Exemplo n.º 1
0
        /// <summary>
        /// 指定されたユーザーに対してアクセストークンを新規に発行します。
        /// </summary>
        /// <param name="userId">ユーザーID</param>
        /// <returns>生成されたトークン</returns>
        public async Task <AccessToken> CreateAsync(int userId)
        {
            using (var transaction = new TransactionScope(TransactionScopeAsyncFlowOption.Enabled))
            {
                //--- レコード追加
                using (var connection = DbConnector.CreateDbConnection())
                {
                    connection.Open();
                    var now   = DateTime.Now;
                    var token = new T_ACCESS_TOKEN
                    {
                        VALUE           = Guid.NewGuid().ToString(),
                        USR_ID          = userId,
                        CREATION_TIME   = now,
                        EXPIRATION_TIME = now + AuthSettings.AccessTokenValidDuration,
                    };
                    var result = await connection.InsertAsync(token).ConfigureAwait(false);

                    if (result == 1)
                    {
                        transaction.Complete();
                        return(token.ToApiModel());
                    }
                    return(null);
                }
            }
        }
Exemplo n.º 2
0
        /// <summary>
        /// アクセストークンをAPIモデルに変換します。
        /// </summary>
        /// <param name="dbModel">データベースモデル</param>
        /// <returns>APIモデル</returns>
        public static AccessToken ToApiModel(this T_ACCESS_TOKEN dbModel)
        {
            if (dbModel == null)
            {
                throw new ArgumentNullException("dbModel");
            }

            return(new AccessToken
            {
                Value = dbModel.VALUE,
                UserId = dbModel.USR_ID,
                CreationTime = dbModel.CREATION_TIME.Value,
                ExpirationTime = dbModel.EXPIRATION_TIME.Value,
            });
        }
Exemplo n.º 3
0
        /// <summary>
        /// 指定されたトークンを利用しているユーザーのIDを取得します。
        /// </summary>
        /// <param name="token">トークン</param>
        /// <returns>ユーザーID</returns>
        public async Task <int?> GetUserIdAsync(string token)
        {
            var sql       = PrimitiveSql.CreateSelectSql <T_ACCESS_TOKEN>();
            var parameter = new T_ACCESS_TOKEN {
                VALUE = token
            };

            using (var connection = DbConnector.CreateDbConnection())
            {
                connection.Open();
                var record = (await connection.QueryAsync <T_ACCESS_TOKEN>(sql, parameter)
                              .ConfigureAwait(false))
                             .FirstOrDefault();
                if (record == null)
                {
                    return(null);
                }
                if (record.EXPIRATION_TIME < DateTime.Now)
                {
                    return(null);
                }
                return(record.USR_ID);
            }
        }