public T Exchange <T>(DataModels.ITokenRequest Request, DataModels.Client Client) where T : DataModels.Token, new() { Server.DataModel.AuthorizationCode code = AuthorizationCodeModel.GetAuthorizationCode(Request.code, Client.id, Request.redirect_uri != null ? Request.redirect_uri.ToString() : null); if (code == null) { throw new DataModels.TokenRequestError(DataModels.ErrorCodes.invalid_request, "Invalid token"); } DataModels.Approval Approval = ApprovalModel.GetApproval(Client.id, code.resource_owner_id); if (!AuthorizationCodeModel.DeleteAuthorizationCode(code.authorization_code, code.client_id, code.redirect_uri)) { throw new DataModels.TokenRequestError(DataModels.ErrorCodes.access_denied, "Code already used"); } return(TokenModel.InsertToken <T>( Extension.TokenHelper.CreateAccessToken(), DataModels.TokenTypes.bearer, 3600, DateTime.Now.GetTotalSeconds(), Client.id, Approval.scope, Approval.resource_owner_id, Approval.refresh_token)); }
public Server.DataModel.AuthorizationCode Authorize(DataModels.ITokenRequest Request, DataModels.Approval Approval, DataModels.Client Client, DataModels.ResourceOwner Owner) { Server.DataModel.AuthorizationCode code = AuthorizationCodeModel.InsertAuthorizationCode( Extension.TokenHelper.CreateAccessToken(), Client, Owner, DateTime.Now.GetTotalSeconds(), Approval.scope, Request.redirect_uri); if (code == null) { throw new DataModels.TokenRequestError(DataModels.ErrorCodes.server_error, "Error storing access code"); } if (string.IsNullOrWhiteSpace(Approval.refresh_token)) { Approval.refresh_token = Extension.TokenHelper.CreateAccessToken(); if (!ApprovalModel.AddOrUpdateApproval(Approval)) { AuthorizationCodeModel.DeleteAuthorizationCode(code.authorization_code, code.client_id, code.redirect_uri); throw new DataModels.TokenRequestError(DataModels.ErrorCodes.server_error, "Error updating approval"); } } return(code); }