reset password endpoint polish (#834)

This commit is contained in:
Michael Quigley 2025-02-03 11:57:17 -05:00
parent 164fb96b73
commit d9b32e14c9
No known key found for this signature in database
GPG Key ID: 9B60314A9DD20A62
17 changed files with 263 additions and 69 deletions

View File

@ -19,7 +19,7 @@ func newResetPasswordHandler(cfg *config.Config) *resetPasswordHandler {
} }
func (handler *resetPasswordHandler) Handle(params account.ResetPasswordParams) middleware.Responder { func (handler *resetPasswordHandler) Handle(params account.ResetPasswordParams) middleware.Responder {
if params.Body == nil || params.Body.Token == "" || params.Body.Password == "" { if params.Body.Token == "" || params.Body.Password == "" {
logrus.Error("missing token or password") logrus.Error("missing token or password")
return account.NewResetPasswordNotFound() return account.NewResetPasswordNotFound()
} }

View File

@ -14,8 +14,6 @@ import (
"github.com/go-openapi/runtime" "github.com/go-openapi/runtime"
cr "github.com/go-openapi/runtime/client" cr "github.com/go-openapi/runtime/client"
"github.com/go-openapi/strfmt" "github.com/go-openapi/strfmt"
"github.com/openziti/zrok/rest_model_zrok"
) )
// NewResetPasswordParams creates a new ResetPasswordParams object, // NewResetPasswordParams creates a new ResetPasswordParams object,
@ -64,7 +62,7 @@ ResetPasswordParams contains all the parameters to send to the API endpoint
type ResetPasswordParams struct { type ResetPasswordParams struct {
// Body. // Body.
Body *rest_model_zrok.ResetPasswordRequest Body ResetPasswordBody
timeout time.Duration timeout time.Duration
Context context.Context Context context.Context
@ -120,13 +118,13 @@ func (o *ResetPasswordParams) SetHTTPClient(client *http.Client) {
} }
// WithBody adds the body to the reset password params // WithBody adds the body to the reset password params
func (o *ResetPasswordParams) WithBody(body *rest_model_zrok.ResetPasswordRequest) *ResetPasswordParams { func (o *ResetPasswordParams) WithBody(body ResetPasswordBody) *ResetPasswordParams {
o.SetBody(body) o.SetBody(body)
return o return o
} }
// SetBody adds the body to the reset password params // SetBody adds the body to the reset password params
func (o *ResetPasswordParams) SetBody(body *rest_model_zrok.ResetPasswordRequest) { func (o *ResetPasswordParams) SetBody(body ResetPasswordBody) {
o.Body = body o.Body = body
} }
@ -137,11 +135,9 @@ func (o *ResetPasswordParams) WriteToRequest(r runtime.ClientRequest, reg strfmt
return err return err
} }
var res []error var res []error
if o.Body != nil {
if err := r.SetBodyParam(o.Body); err != nil { if err := r.SetBodyParam(o.Body); err != nil {
return err return err
} }
}
if len(res) > 0 { if len(res) > 0 {
return errors.CompositeValidationError(res...) return errors.CompositeValidationError(res...)

View File

@ -6,11 +6,13 @@ package account
// Editing this file might prove futile when you re-run the swagger generate command // Editing this file might prove futile when you re-run the swagger generate command
import ( import (
"context"
"fmt" "fmt"
"io" "io"
"github.com/go-openapi/runtime" "github.com/go-openapi/runtime"
"github.com/go-openapi/strfmt" "github.com/go-openapi/strfmt"
"github.com/go-openapi/swag"
"github.com/openziti/zrok/rest_model_zrok" "github.com/openziti/zrok/rest_model_zrok"
) )
@ -285,3 +287,44 @@ func (o *ResetPasswordInternalServerError) readResponse(response runtime.ClientR
return nil return nil
} }
/*
ResetPasswordBody reset password body
swagger:model ResetPasswordBody
*/
type ResetPasswordBody struct {
// password
Password string `json:"password,omitempty"`
// token
Token string `json:"token,omitempty"`
}
// Validate validates this reset password body
func (o *ResetPasswordBody) Validate(formats strfmt.Registry) error {
return nil
}
// ContextValidate validates this reset password body based on context it is used
func (o *ResetPasswordBody) ContextValidate(ctx context.Context, formats strfmt.Registry) error {
return nil
}
// MarshalBinary interface implementation
func (o *ResetPasswordBody) MarshalBinary() ([]byte, error) {
if o == nil {
return nil, nil
}
return swag.WriteJSON(o)
}
// UnmarshalBinary interface implementation
func (o *ResetPasswordBody) UnmarshalBinary(b []byte) error {
var res ResetPasswordBody
if err := swag.ReadJSON(b, &res); err != nil {
return err
}
*o = res
return nil
}

View File

@ -1385,7 +1385,14 @@ func init() {
"name": "body", "name": "body",
"in": "body", "in": "body",
"schema": { "schema": {
"$ref": "#/definitions/resetPasswordRequest" "properties": {
"password": {
"type": "string"
},
"token": {
"type": "string"
}
}
} }
} }
], ],
@ -2040,17 +2047,6 @@ func init() {
"$ref": "#/definitions/publicFrontend" "$ref": "#/definitions/publicFrontend"
} }
}, },
"resetPasswordRequest": {
"type": "object",
"properties": {
"password": {
"type": "string"
},
"token": {
"type": "string"
}
}
},
"share": { "share": {
"type": "object", "type": "object",
"properties": { "properties": {
@ -3640,7 +3636,14 @@ func init() {
"name": "body", "name": "body",
"in": "body", "in": "body",
"schema": { "schema": {
"$ref": "#/definitions/resetPasswordRequest" "properties": {
"password": {
"type": "string"
},
"token": {
"type": "string"
}
}
} }
} }
], ],
@ -4328,17 +4331,6 @@ func init() {
"$ref": "#/definitions/publicFrontend" "$ref": "#/definitions/publicFrontend"
} }
}, },
"resetPasswordRequest": {
"type": "object",
"properties": {
"password": {
"type": "string"
},
"token": {
"type": "string"
}
}
},
"share": { "share": {
"type": "object", "type": "object",
"properties": { "properties": {

View File

@ -6,9 +6,12 @@ package account
// Editing this file might prove futile when you re-run the generate command // Editing this file might prove futile when you re-run the generate command
import ( import (
"context"
"net/http" "net/http"
"github.com/go-openapi/runtime/middleware" "github.com/go-openapi/runtime/middleware"
"github.com/go-openapi/strfmt"
"github.com/go-openapi/swag"
) )
// ResetPasswordHandlerFunc turns a function with the right signature into a reset password handler // ResetPasswordHandlerFunc turns a function with the right signature into a reset password handler
@ -54,3 +57,43 @@ func (o *ResetPassword) ServeHTTP(rw http.ResponseWriter, r *http.Request) {
o.Context.Respond(rw, r, route.Produces, route, res) o.Context.Respond(rw, r, route.Produces, route, res)
} }
// ResetPasswordBody reset password body
//
// swagger:model ResetPasswordBody
type ResetPasswordBody struct {
// password
Password string `json:"password,omitempty"`
// token
Token string `json:"token,omitempty"`
}
// Validate validates this reset password body
func (o *ResetPasswordBody) Validate(formats strfmt.Registry) error {
return nil
}
// ContextValidate validates this reset password body based on context it is used
func (o *ResetPasswordBody) ContextValidate(ctx context.Context, formats strfmt.Registry) error {
return nil
}
// MarshalBinary interface implementation
func (o *ResetPasswordBody) MarshalBinary() ([]byte, error) {
if o == nil {
return nil, nil
}
return swag.WriteJSON(o)
}
// UnmarshalBinary interface implementation
func (o *ResetPasswordBody) UnmarshalBinary(b []byte) error {
var res ResetPasswordBody
if err := swag.ReadJSON(b, &res); err != nil {
return err
}
*o = res
return nil
}

View File

@ -12,8 +12,6 @@ import (
"github.com/go-openapi/runtime" "github.com/go-openapi/runtime"
"github.com/go-openapi/runtime/middleware" "github.com/go-openapi/runtime/middleware"
"github.com/go-openapi/validate" "github.com/go-openapi/validate"
"github.com/openziti/zrok/rest_model_zrok"
) )
// NewResetPasswordParams creates a new ResetPasswordParams object // NewResetPasswordParams creates a new ResetPasswordParams object
@ -36,7 +34,7 @@ type ResetPasswordParams struct {
/* /*
In: body In: body
*/ */
Body *rest_model_zrok.ResetPasswordRequest Body ResetPasswordBody
} }
// BindRequest both binds and validates a request, it assumes that complex things implement a Validatable(strfmt.Registry) error interface // BindRequest both binds and validates a request, it assumes that complex things implement a Validatable(strfmt.Registry) error interface
@ -50,7 +48,7 @@ func (o *ResetPasswordParams) BindRequest(r *http.Request, route *middleware.Mat
if runtime.HasBody(r) { if runtime.HasBody(r) {
defer r.Body.Close() defer r.Body.Close()
var body rest_model_zrok.ResetPasswordRequest var body ResetPasswordBody
if err := route.Consumer.Consume(r.Body, &body); err != nil { if err := route.Consumer.Consume(r.Body, &body); err != nil {
res = append(res, errors.NewParseError("body", "body", "", err)) res = append(res, errors.NewParseError("body", "body", "", err))
} else { } else {
@ -65,7 +63,7 @@ func (o *ResetPasswordParams) BindRequest(r *http.Request, route *middleware.Mat
} }
if len(res) == 0 { if len(res) == 0 {
o.Body = &body o.Body = body
} }
} }
} }

View File

@ -47,7 +47,6 @@ model/regenerateToken200Response.ts
model/regenerateTokenRequest.ts model/regenerateTokenRequest.ts
model/registerRequest.ts model/registerRequest.ts
model/removeOrganizationMemberRequest.ts model/removeOrganizationMemberRequest.ts
model/resetPasswordRequest.ts
model/share.ts model/share.ts
model/shareRequest.ts model/shareRequest.ts
model/shareResponse.ts model/shareResponse.ts

View File

@ -21,7 +21,6 @@ import { LoginRequest } from '../model/loginRequest';
import { RegenerateToken200Response } from '../model/regenerateToken200Response'; import { RegenerateToken200Response } from '../model/regenerateToken200Response';
import { RegenerateTokenRequest } from '../model/regenerateTokenRequest'; import { RegenerateTokenRequest } from '../model/regenerateTokenRequest';
import { RegisterRequest } from '../model/registerRequest'; import { RegisterRequest } from '../model/registerRequest';
import { ResetPasswordRequest } from '../model/resetPasswordRequest';
import { VerifyRequest } from '../model/verifyRequest'; import { VerifyRequest } from '../model/verifyRequest';
import { VerifyResponse } from '../model/verifyResponse'; import { VerifyResponse } from '../model/verifyResponse';
@ -420,7 +419,7 @@ export class AccountApi {
* *
* @param body * @param body
*/ */
public async resetPassword (body?: ResetPasswordRequest, options: {headers: {[name: string]: string}} = {headers: {}}) : Promise<{ response: http.IncomingMessage; body?: any; }> { public async resetPassword (body?: RegisterRequest, options: {headers: {[name: string]: string}} = {headers: {}}) : Promise<{ response: http.IncomingMessage; body?: any; }> {
const localVarPath = this.basePath + '/resetPassword'; const localVarPath = this.basePath + '/resetPassword';
let localVarQueryParameters: any = {}; let localVarQueryParameters: any = {};
let localVarHeaderParams: any = (<any>Object).assign({}, this._defaultHeaders); let localVarHeaderParams: any = (<any>Object).assign({}, this._defaultHeaders);
@ -444,7 +443,7 @@ export class AccountApi {
uri: localVarPath, uri: localVarPath,
useQuerystring: this._useQuerystring, useQuerystring: this._useQuerystring,
json: true, json: true,
body: ObjectSerializer.serialize(body, "ResetPasswordRequest") body: ObjectSerializer.serialize(body, "RegisterRequest")
}; };
let authenticationPromise = Promise.resolve(); let authenticationPromise = Promise.resolve();

View File

@ -40,7 +40,6 @@ export * from './regenerateToken200Response';
export * from './regenerateTokenRequest'; export * from './regenerateTokenRequest';
export * from './registerRequest'; export * from './registerRequest';
export * from './removeOrganizationMemberRequest'; export * from './removeOrganizationMemberRequest';
export * from './resetPasswordRequest';
export * from './share'; export * from './share';
export * from './shareRequest'; export * from './shareRequest';
export * from './shareResponse'; export * from './shareResponse';
@ -105,7 +104,6 @@ import { RegenerateToken200Response } from './regenerateToken200Response';
import { RegenerateTokenRequest } from './regenerateTokenRequest'; import { RegenerateTokenRequest } from './regenerateTokenRequest';
import { RegisterRequest } from './registerRequest'; import { RegisterRequest } from './registerRequest';
import { RemoveOrganizationMemberRequest } from './removeOrganizationMemberRequest'; import { RemoveOrganizationMemberRequest } from './removeOrganizationMemberRequest';
import { ResetPasswordRequest } from './resetPasswordRequest';
import { Share } from './share'; import { Share } from './share';
import { ShareRequest } from './shareRequest'; import { ShareRequest } from './shareRequest';
import { ShareResponse } from './shareResponse'; import { ShareResponse } from './shareResponse';
@ -178,7 +176,6 @@ let typeMap: {[index: string]: any} = {
"RegenerateTokenRequest": RegenerateTokenRequest, "RegenerateTokenRequest": RegenerateTokenRequest,
"RegisterRequest": RegisterRequest, "RegisterRequest": RegisterRequest,
"RemoveOrganizationMemberRequest": RemoveOrganizationMemberRequest, "RemoveOrganizationMemberRequest": RemoveOrganizationMemberRequest,
"ResetPasswordRequest": ResetPasswordRequest,
"Share": Share, "Share": Share,
"ShareRequest": ShareRequest, "ShareRequest": ShareRequest,
"ShareResponse": ShareResponse, "ShareResponse": ShareResponse,

View File

@ -70,7 +70,7 @@ from zrok_api.models.public_frontend import PublicFrontend
from zrok_api.models.public_frontend_list import PublicFrontendList from zrok_api.models.public_frontend_list import PublicFrontendList
from zrok_api.models.regenerate_token_body import RegenerateTokenBody from zrok_api.models.regenerate_token_body import RegenerateTokenBody
from zrok_api.models.register_body import RegisterBody from zrok_api.models.register_body import RegisterBody
from zrok_api.models.reset_password_request import ResetPasswordRequest from zrok_api.models.reset_password_body import ResetPasswordBody
from zrok_api.models.reset_password_request_body import ResetPasswordRequestBody from zrok_api.models.reset_password_request_body import ResetPasswordRequestBody
from zrok_api.models.share import Share from zrok_api.models.share import Share
from zrok_api.models.share_request import ShareRequest from zrok_api.models.share_request import ShareRequest

View File

@ -506,7 +506,7 @@ class AccountApi(object):
>>> result = thread.get() >>> result = thread.get()
:param async_req bool :param async_req bool
:param ResetPasswordRequest body: :param ResetPasswordBody body:
:return: None :return: None
If the method is called asynchronously, If the method is called asynchronously,
returns the request thread. returns the request thread.
@ -527,7 +527,7 @@ class AccountApi(object):
>>> result = thread.get() >>> result = thread.get()
:param async_req bool :param async_req bool
:param ResetPasswordRequest body: :param ResetPasswordBody body:
:return: None :return: None
If the method is called asynchronously, If the method is called asynchronously,
returns the request thread. returns the request thread.

View File

@ -60,7 +60,7 @@ from zrok_api.models.public_frontend import PublicFrontend
from zrok_api.models.public_frontend_list import PublicFrontendList from zrok_api.models.public_frontend_list import PublicFrontendList
from zrok_api.models.regenerate_token_body import RegenerateTokenBody from zrok_api.models.regenerate_token_body import RegenerateTokenBody
from zrok_api.models.register_body import RegisterBody from zrok_api.models.register_body import RegisterBody
from zrok_api.models.reset_password_request import ResetPasswordRequest from zrok_api.models.reset_password_body import ResetPasswordBody
from zrok_api.models.reset_password_request_body import ResetPasswordRequestBody from zrok_api.models.reset_password_request_body import ResetPasswordRequestBody
from zrok_api.models.share import Share from zrok_api.models.share import Share
from zrok_api.models.share_request import ShareRequest from zrok_api.models.share_request import ShareRequest

View File

@ -0,0 +1,136 @@
# coding: utf-8
"""
zrok
zrok client access # noqa: E501
OpenAPI spec version: 1.0.0
Generated by: https://github.com/swagger-api/swagger-codegen.git
"""
import pprint
import re # noqa: F401
import six
class ResetPasswordBody(object):
"""NOTE: This class is auto generated by the swagger code generator program.
Do not edit the class manually.
"""
"""
Attributes:
swagger_types (dict): The key is attribute name
and the value is attribute type.
attribute_map (dict): The key is attribute name
and the value is json key in definition.
"""
swagger_types = {
'token': 'str',
'password': 'str'
}
attribute_map = {
'token': 'token',
'password': 'password'
}
def __init__(self, token=None, password=None): # noqa: E501
"""ResetPasswordBody - a model defined in Swagger""" # noqa: E501
self._token = None
self._password = None
self.discriminator = None
if token is not None:
self.token = token
if password is not None:
self.password = password
@property
def token(self):
"""Gets the token of this ResetPasswordBody. # noqa: E501
:return: The token of this ResetPasswordBody. # noqa: E501
:rtype: str
"""
return self._token
@token.setter
def token(self, token):
"""Sets the token of this ResetPasswordBody.
:param token: The token of this ResetPasswordBody. # noqa: E501
:type: str
"""
self._token = token
@property
def password(self):
"""Gets the password of this ResetPasswordBody. # noqa: E501
:return: The password of this ResetPasswordBody. # noqa: E501
:rtype: str
"""
return self._password
@password.setter
def password(self, password):
"""Sets the password of this ResetPasswordBody.
:param password: The password of this ResetPasswordBody. # noqa: E501
:type: str
"""
self._password = password
def to_dict(self):
"""Returns the model properties as a dict"""
result = {}
for attr, _ in six.iteritems(self.swagger_types):
value = getattr(self, attr)
if isinstance(value, list):
result[attr] = list(map(
lambda x: x.to_dict() if hasattr(x, "to_dict") else x,
value
))
elif hasattr(value, "to_dict"):
result[attr] = value.to_dict()
elif isinstance(value, dict):
result[attr] = dict(map(
lambda item: (item[0], item[1].to_dict())
if hasattr(item[1], "to_dict") else item,
value.items()
))
else:
result[attr] = value
if issubclass(ResetPasswordBody, dict):
for key, value in self.items():
result[key] = value
return result
def to_str(self):
"""Returns the string representation of the model"""
return pprint.pformat(self.to_dict())
def __repr__(self):
"""For `print` and `pprint`"""
return self.to_str()
def __eq__(self, other):
"""Returns true if both objects are equal"""
if not isinstance(other, ResetPasswordBody):
return False
return self.__dict__ == other.__dict__
def __ne__(self, other):
"""Returns true if both objects are not equal"""
return not self == other

View File

@ -160,7 +160,11 @@ paths:
- name: body - name: body
in: body in: body
schema: schema:
$ref: "#/definitions/resetPasswordRequest" properties:
token:
type: string
password:
type: string
responses: responses:
200: 200:
description: password reset description: password reset
@ -1295,14 +1299,6 @@ definitions:
items: items:
$ref: "#/definitions/publicFrontend" $ref: "#/definitions/publicFrontend"
resetPasswordRequest:
type: object
properties:
token:
type: string
password:
type: string
share: share:
type: object type: object
properties: properties:

View File

@ -45,7 +45,6 @@ models/RegenerateToken200Response.ts
models/RegenerateTokenRequest.ts models/RegenerateTokenRequest.ts
models/RegisterRequest.ts models/RegisterRequest.ts
models/RemoveOrganizationMemberRequest.ts models/RemoveOrganizationMemberRequest.ts
models/ResetPasswordRequest.ts
models/Share.ts models/Share.ts
models/ShareRequest.ts models/ShareRequest.ts
models/ShareResponse.ts models/ShareResponse.ts

View File

@ -21,7 +21,6 @@ import type {
RegenerateToken200Response, RegenerateToken200Response,
RegenerateTokenRequest, RegenerateTokenRequest,
RegisterRequest, RegisterRequest,
ResetPasswordRequest,
VerifyRequest, VerifyRequest,
VerifyResponse, VerifyResponse,
} from '../models/index'; } from '../models/index';
@ -38,8 +37,6 @@ import {
RegenerateTokenRequestToJSON, RegenerateTokenRequestToJSON,
RegisterRequestFromJSON, RegisterRequestFromJSON,
RegisterRequestToJSON, RegisterRequestToJSON,
ResetPasswordRequestFromJSON,
ResetPasswordRequestToJSON,
VerifyRequestFromJSON, VerifyRequestFromJSON,
VerifyRequestToJSON, VerifyRequestToJSON,
VerifyResponseFromJSON, VerifyResponseFromJSON,
@ -66,8 +63,8 @@ export interface RegisterOperationRequest {
body?: RegisterRequest; body?: RegisterRequest;
} }
export interface ResetPasswordOperationRequest { export interface ResetPasswordRequest {
body?: ResetPasswordRequest; body?: RegisterRequest;
} }
export interface ResetPasswordRequestRequest { export interface ResetPasswordRequestRequest {
@ -230,7 +227,7 @@ export class AccountApi extends runtime.BaseAPI {
/** /**
*/ */
async resetPasswordRaw(requestParameters: ResetPasswordOperationRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise<runtime.ApiResponse<void>> { async resetPasswordRaw(requestParameters: ResetPasswordRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise<runtime.ApiResponse<void>> {
const queryParameters: any = {}; const queryParameters: any = {};
const headerParameters: runtime.HTTPHeaders = {}; const headerParameters: runtime.HTTPHeaders = {};
@ -242,7 +239,7 @@ export class AccountApi extends runtime.BaseAPI {
method: 'POST', method: 'POST',
headers: headerParameters, headers: headerParameters,
query: queryParameters, query: queryParameters,
body: ResetPasswordRequestToJSON(requestParameters['body']), body: RegisterRequestToJSON(requestParameters['body']),
}, initOverrides); }, initOverrides);
return new runtime.VoidApiResponse(response); return new runtime.VoidApiResponse(response);
@ -250,7 +247,7 @@ export class AccountApi extends runtime.BaseAPI {
/** /**
*/ */
async resetPassword(requestParameters: ResetPasswordOperationRequest = {}, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise<void> { async resetPassword(requestParameters: ResetPasswordRequest = {}, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise<void> {
await this.resetPasswordRaw(requestParameters, initOverrides); await this.resetPasswordRaw(requestParameters, initOverrides);
} }

View File

@ -40,7 +40,6 @@ export * from './RegenerateToken200Response';
export * from './RegenerateTokenRequest'; export * from './RegenerateTokenRequest';
export * from './RegisterRequest'; export * from './RegisterRequest';
export * from './RemoveOrganizationMemberRequest'; export * from './RemoveOrganizationMemberRequest';
export * from './ResetPasswordRequest';
export * from './Share'; export * from './Share';
export * from './ShareRequest'; export * from './ShareRequest';
export * from './ShareResponse'; export * from './ShareResponse';