/// <summary> /// リクエストトークンをAPIモデルに変換します。 /// </summary> /// <param name="dbModel">データベースモデル</param> /// <returns>APIモデル</returns> public static ApiModels.RequestToken ToApiModel(this T_REQUEST_TOKEN dbModel) { if (dbModel == null) { throw new ArgumentNullException("dbModel"); } return(new RequestToken { Value = dbModel.VALUE, CreationTime = dbModel.CREATION_TIME.Value, ExpirationTime = dbModel.EXPIRATION_TIME.Value, }); }
/// <summary> /// 指定されたトークンを削除します。 /// </summary> /// <param name="token">トークン</param> /// <returns>削除に成功したかどうか</returns> public async Task <bool> DeleteAsync(string token) { var parameter = new T_REQUEST_TOKEN { VALUE = token }; using (var connection = DbConnector.CreateDbConnection()) { connection.Open(); var result = await connection.DeleteAsync(parameter); return(result == 1); } }
/// <summary> /// 新規にトークンを発行します。 /// </summary> /// <returns>生成されたリクエストトークン</returns> public async Task <RequestToken> CreateAsync() { using (var connection = DbConnector.CreateDbConnection()) { connection.Open(); var now = DateTime.Now; var token = new T_REQUEST_TOKEN { VALUE = Guid.NewGuid().ToString(), CREATION_TIME = now, EXPIRATION_TIME = now + AuthSettings.RequestTokenValidDuration, }; var result = await connection.InsertAsync(token).ConfigureAwait(false); return(result == 1 ? token.ToApiModel() : null); } }
/// <summary> /// 指定されたトークンが有効かどうかを確認します。 /// </summary> /// <param name="token">トークン</param> /// <returns>有効かどうか</returns> public async Task <bool> IsValidAsync(string token) { var sql = PrimitiveSql.CreateSelectSql <T_REQUEST_TOKEN>(); var parameter = new T_REQUEST_TOKEN { VALUE = token }; using (var connection = DbConnector.CreateDbConnection()) { connection.Open(); var record = (await connection.QueryAsync <T_REQUEST_TOKEN>(sql, parameter) .ConfigureAwait(false)) .FirstOrDefault(); return(record == null ? false : DateTime.Now <= record.EXPIRATION_TIME); } }