user provider

v0.1.7 v0.1.7
Vernon Keenan 2023-10-12 23:04:25 +00:00
parent 64ad9b374f
commit effff98c06
25 changed files with 1655 additions and 821 deletions

View File

@ -155,6 +155,9 @@ type User struct {
// Profile
ProfileID string `json:"ProfileID,omitempty"`
// Provider
Provider string `json:"Provider,omitempty"`
// Info Emails
ReceivesAdminEmails bool `json:"ReceivesAdminEmails,omitempty"`

View File

@ -48,7 +48,7 @@ type ClientService interface {
/*
DeleteAccount deletes an account
Delete SalesforceDevops.net Account record
Delete WorkDifferentWithAI.com Account record
*/
func (a *Client) DeleteAccount(params *DeleteAccountParams, authInfo runtime.ClientAuthInfoWriter, opts ...ClientOption) (*DeleteAccountOK, error) {
// TODO: Validate the params before sending
@ -128,7 +128,7 @@ func (a *Client) GetAccounts(params *GetAccountsParams, authInfo runtime.ClientA
}
/*
PostAccounts adds a new account to salesforce devops net
PostAccounts adds a new account to work different with a i com
Account record to be added
*/

View File

@ -48,7 +48,7 @@ type ClientService interface {
/*
DeleteAsset deletes an asset
Delete SalesforceDevops.net Asset record
Delete WorkDifferentWithAI.com Asset record
*/
func (a *Client) DeleteAsset(params *DeleteAssetParams, authInfo runtime.ClientAuthInfoWriter, opts ...ClientOption) (*DeleteAssetOK, error) {
// TODO: Validate the params before sending
@ -128,7 +128,7 @@ func (a *Client) GetAssets(params *GetAssetsParams, authInfo runtime.ClientAuthI
}
/*
PostAssets adds a new asset to salesforce devops net
PostAssets adds a new asset to work different with a i com
Asset record to be added
*/

View File

@ -48,7 +48,7 @@ type ClientService interface {
/*
DeleteContact deletes a contact
Delete SalesforceDevops.net Contact record
Delete WorkDifferentWithAI.com Contact record
*/
func (a *Client) DeleteContact(params *DeleteContactParams, authInfo runtime.ClientAuthInfoWriter, opts ...ClientOption) (*DeleteContactOK, error) {
// TODO: Validate the params before sending

View File

@ -48,7 +48,7 @@ type ClientService interface {
/*
DeleteContract deletes an contract
Delete SalesforceDevops.net Contract record
Delete WorkDifferentWithAI.com Contract record
*/
func (a *Client) DeleteContract(params *DeleteContractParams, authInfo runtime.ClientAuthInfoWriter, opts ...ClientOption) (*DeleteContractOK, error) {
// TODO: Validate the params before sending
@ -128,7 +128,7 @@ func (a *Client) GetContracts(params *GetContractsParams, authInfo runtime.Clien
}
/*
PostContracts adds a new contract to salesforce devops net
PostContracts adds a new contract to work different with a i com
Contract record to be added
*/

View File

@ -48,7 +48,7 @@ type ClientService interface {
/*
DeleteLead deletes a contact
Delete SalesforceDevops.net Lead record
Delete WorkDifferentWithAI.com Lead record
*/
func (a *Client) DeleteLead(params *DeleteLeadParams, authInfo runtime.ClientAuthInfoWriter, opts ...ClientOption) (*DeleteLeadOK, error) {
// TODO: Validate the params before sending

View File

@ -0,0 +1,157 @@
// Code generated by go-swagger; DO NOT EDIT.
// (c) 2012-2023 by Vernon Keenan
// All rights reserved worldwide.
// Proprietary product; unlicensed use is not allowed
package users
// This file was generated by the swagger tool.
// Editing this file might prove futile when you re-run the swagger generate command
import (
"context"
"net/http"
"time"
"github.com/go-openapi/errors"
"github.com/go-openapi/runtime"
cr "github.com/go-openapi/runtime/client"
"github.com/go-openapi/strfmt"
"code.tnxs.net/work/lib/api/members/members_models"
)
// NewPostUsersAuthParams creates a new PostUsersAuthParams object,
// with the default timeout for this client.
//
// Default values are not hydrated, since defaults are normally applied by the API server side.
//
// To enforce default values in parameter, use SetDefaults or WithDefaults.
func NewPostUsersAuthParams() *PostUsersAuthParams {
return &PostUsersAuthParams{
timeout: cr.DefaultTimeout,
}
}
// NewPostUsersAuthParamsWithTimeout creates a new PostUsersAuthParams object
// with the ability to set a timeout on a request.
func NewPostUsersAuthParamsWithTimeout(timeout time.Duration) *PostUsersAuthParams {
return &PostUsersAuthParams{
timeout: timeout,
}
}
// NewPostUsersAuthParamsWithContext creates a new PostUsersAuthParams object
// with the ability to set a context for a request.
func NewPostUsersAuthParamsWithContext(ctx context.Context) *PostUsersAuthParams {
return &PostUsersAuthParams{
Context: ctx,
}
}
// NewPostUsersAuthParamsWithHTTPClient creates a new PostUsersAuthParams object
// with the ability to set a custom HTTPClient for a request.
func NewPostUsersAuthParamsWithHTTPClient(client *http.Client) *PostUsersAuthParams {
return &PostUsersAuthParams{
HTTPClient: client,
}
}
/*
PostUsersAuthParams contains all the parameters to send to the API endpoint
for the post users auth operation.
Typically these are written to a http.Request.
*/
type PostUsersAuthParams struct {
/* UserAuthRequest.
A simple user authentication request
*/
UserAuthRequest *members_models.UserAuth
timeout time.Duration
Context context.Context
HTTPClient *http.Client
}
// WithDefaults hydrates default values in the post users auth params (not the query body).
//
// All values with no default are reset to their zero value.
func (o *PostUsersAuthParams) WithDefaults() *PostUsersAuthParams {
o.SetDefaults()
return o
}
// SetDefaults hydrates default values in the post users auth params (not the query body).
//
// All values with no default are reset to their zero value.
func (o *PostUsersAuthParams) SetDefaults() {
// no default values defined for this parameter
}
// WithTimeout adds the timeout to the post users auth params
func (o *PostUsersAuthParams) WithTimeout(timeout time.Duration) *PostUsersAuthParams {
o.SetTimeout(timeout)
return o
}
// SetTimeout adds the timeout to the post users auth params
func (o *PostUsersAuthParams) SetTimeout(timeout time.Duration) {
o.timeout = timeout
}
// WithContext adds the context to the post users auth params
func (o *PostUsersAuthParams) WithContext(ctx context.Context) *PostUsersAuthParams {
o.SetContext(ctx)
return o
}
// SetContext adds the context to the post users auth params
func (o *PostUsersAuthParams) SetContext(ctx context.Context) {
o.Context = ctx
}
// WithHTTPClient adds the HTTPClient to the post users auth params
func (o *PostUsersAuthParams) WithHTTPClient(client *http.Client) *PostUsersAuthParams {
o.SetHTTPClient(client)
return o
}
// SetHTTPClient adds the HTTPClient to the post users auth params
func (o *PostUsersAuthParams) SetHTTPClient(client *http.Client) {
o.HTTPClient = client
}
// WithUserAuthRequest adds the userAuthRequest to the post users auth params
func (o *PostUsersAuthParams) WithUserAuthRequest(userAuthRequest *members_models.UserAuth) *PostUsersAuthParams {
o.SetUserAuthRequest(userAuthRequest)
return o
}
// SetUserAuthRequest adds the userAuthRequest to the post users auth params
func (o *PostUsersAuthParams) SetUserAuthRequest(userAuthRequest *members_models.UserAuth) {
o.UserAuthRequest = userAuthRequest
}
// WriteToRequest writes these params to a swagger request
func (o *PostUsersAuthParams) WriteToRequest(r runtime.ClientRequest, reg strfmt.Registry) error {
if err := r.SetTimeout(o.timeout); err != nil {
return err
}
var res []error
if o.UserAuthRequest != nil {
if err := r.SetBodyParam(o.UserAuthRequest); err != nil {
return err
}
}
if len(res) > 0 {
return errors.CompositeValidationError(res...)
}
return nil
}

View File

@ -0,0 +1,157 @@
// Code generated by go-swagger; DO NOT EDIT.
// (c) 2012-2023 by Vernon Keenan
// All rights reserved worldwide.
// Proprietary product; unlicensed use is not allowed
package users
// This file was generated by the swagger tool.
// Editing this file might prove futile when you re-run the swagger generate command
import (
"context"
"net/http"
"time"
"github.com/go-openapi/errors"
"github.com/go-openapi/runtime"
cr "github.com/go-openapi/runtime/client"
"github.com/go-openapi/strfmt"
"code.tnxs.net/work/lib/api/members/members_models"
)
// NewPostUsersAuthPasswordParams creates a new PostUsersAuthPasswordParams object,
// with the default timeout for this client.
//
// Default values are not hydrated, since defaults are normally applied by the API server side.
//
// To enforce default values in parameter, use SetDefaults or WithDefaults.
func NewPostUsersAuthPasswordParams() *PostUsersAuthPasswordParams {
return &PostUsersAuthPasswordParams{
timeout: cr.DefaultTimeout,
}
}
// NewPostUsersAuthPasswordParamsWithTimeout creates a new PostUsersAuthPasswordParams object
// with the ability to set a timeout on a request.
func NewPostUsersAuthPasswordParamsWithTimeout(timeout time.Duration) *PostUsersAuthPasswordParams {
return &PostUsersAuthPasswordParams{
timeout: timeout,
}
}
// NewPostUsersAuthPasswordParamsWithContext creates a new PostUsersAuthPasswordParams object
// with the ability to set a context for a request.
func NewPostUsersAuthPasswordParamsWithContext(ctx context.Context) *PostUsersAuthPasswordParams {
return &PostUsersAuthPasswordParams{
Context: ctx,
}
}
// NewPostUsersAuthPasswordParamsWithHTTPClient creates a new PostUsersAuthPasswordParams object
// with the ability to set a custom HTTPClient for a request.
func NewPostUsersAuthPasswordParamsWithHTTPClient(client *http.Client) *PostUsersAuthPasswordParams {
return &PostUsersAuthPasswordParams{
HTTPClient: client,
}
}
/*
PostUsersAuthPasswordParams contains all the parameters to send to the API endpoint
for the post users auth password operation.
Typically these are written to a http.Request.
*/
type PostUsersAuthPasswordParams struct {
/* UserAuthRequest.
A simple user authentication request
*/
UserAuthRequest *members_models.UserAuth
timeout time.Duration
Context context.Context
HTTPClient *http.Client
}
// WithDefaults hydrates default values in the post users auth password params (not the query body).
//
// All values with no default are reset to their zero value.
func (o *PostUsersAuthPasswordParams) WithDefaults() *PostUsersAuthPasswordParams {
o.SetDefaults()
return o
}
// SetDefaults hydrates default values in the post users auth password params (not the query body).
//
// All values with no default are reset to their zero value.
func (o *PostUsersAuthPasswordParams) SetDefaults() {
// no default values defined for this parameter
}
// WithTimeout adds the timeout to the post users auth password params
func (o *PostUsersAuthPasswordParams) WithTimeout(timeout time.Duration) *PostUsersAuthPasswordParams {
o.SetTimeout(timeout)
return o
}
// SetTimeout adds the timeout to the post users auth password params
func (o *PostUsersAuthPasswordParams) SetTimeout(timeout time.Duration) {
o.timeout = timeout
}
// WithContext adds the context to the post users auth password params
func (o *PostUsersAuthPasswordParams) WithContext(ctx context.Context) *PostUsersAuthPasswordParams {
o.SetContext(ctx)
return o
}
// SetContext adds the context to the post users auth password params
func (o *PostUsersAuthPasswordParams) SetContext(ctx context.Context) {
o.Context = ctx
}
// WithHTTPClient adds the HTTPClient to the post users auth password params
func (o *PostUsersAuthPasswordParams) WithHTTPClient(client *http.Client) *PostUsersAuthPasswordParams {
o.SetHTTPClient(client)
return o
}
// SetHTTPClient adds the HTTPClient to the post users auth password params
func (o *PostUsersAuthPasswordParams) SetHTTPClient(client *http.Client) {
o.HTTPClient = client
}
// WithUserAuthRequest adds the userAuthRequest to the post users auth password params
func (o *PostUsersAuthPasswordParams) WithUserAuthRequest(userAuthRequest *members_models.UserAuth) *PostUsersAuthPasswordParams {
o.SetUserAuthRequest(userAuthRequest)
return o
}
// SetUserAuthRequest adds the userAuthRequest to the post users auth password params
func (o *PostUsersAuthPasswordParams) SetUserAuthRequest(userAuthRequest *members_models.UserAuth) {
o.UserAuthRequest = userAuthRequest
}
// WriteToRequest writes these params to a swagger request
func (o *PostUsersAuthPasswordParams) WriteToRequest(r runtime.ClientRequest, reg strfmt.Registry) error {
if err := r.SetTimeout(o.timeout); err != nil {
return err
}
var res []error
if o.UserAuthRequest != nil {
if err := r.SetBodyParam(o.UserAuthRequest); err != nil {
return err
}
}
if len(res) > 0 {
return errors.CompositeValidationError(res...)
}
return nil
}

View File

@ -0,0 +1,403 @@
// Code generated by go-swagger; DO NOT EDIT.
// (c) 2012-2023 by Vernon Keenan
// All rights reserved worldwide.
// Proprietary product; unlicensed use is not allowed
package users
// This file was generated by the swagger tool.
// Editing this file might prove futile when you re-run the swagger generate command
import (
"fmt"
"io"
"github.com/go-openapi/runtime"
"github.com/go-openapi/strfmt"
"code.tnxs.net/work/lib/api/members/members_models"
)
// PostUsersAuthPasswordReader is a Reader for the PostUsersAuthPassword structure.
type PostUsersAuthPasswordReader struct {
formats strfmt.Registry
}
// ReadResponse reads a server response into the received o.
func (o *PostUsersAuthPasswordReader) ReadResponse(response runtime.ClientResponse, consumer runtime.Consumer) (interface{}, error) {
switch response.Code() {
case 200:
result := NewPostUsersAuthPasswordOK()
if err := result.readResponse(response, consumer, o.formats); err != nil {
return nil, err
}
return result, nil
case 401:
result := NewPostUsersAuthPasswordUnauthorized()
if err := result.readResponse(response, consumer, o.formats); err != nil {
return nil, err
}
return nil, result
case 404:
result := NewPostUsersAuthPasswordNotFound()
if err := result.readResponse(response, consumer, o.formats); err != nil {
return nil, err
}
return nil, result
case 422:
result := NewPostUsersAuthPasswordUnprocessableEntity()
if err := result.readResponse(response, consumer, o.formats); err != nil {
return nil, err
}
return nil, result
case 500:
result := NewPostUsersAuthPasswordInternalServerError()
if err := result.readResponse(response, consumer, o.formats); err != nil {
return nil, err
}
return nil, result
default:
return nil, runtime.NewAPIError("response status code does not match any response statuses defined for this endpoint in the swagger spec", response, response.Code())
}
}
// NewPostUsersAuthPasswordOK creates a PostUsersAuthPasswordOK with default headers values
func NewPostUsersAuthPasswordOK() *PostUsersAuthPasswordOK {
return &PostUsersAuthPasswordOK{}
}
/*
PostUsersAuthPasswordOK describes a response with status code 200, with default header values.
Response with single UserAuth object
*/
type PostUsersAuthPasswordOK struct {
Payload *members_models.UserAuth
}
// IsSuccess returns true when this post users auth password o k response has a 2xx status code
func (o *PostUsersAuthPasswordOK) IsSuccess() bool {
return true
}
// IsRedirect returns true when this post users auth password o k response has a 3xx status code
func (o *PostUsersAuthPasswordOK) IsRedirect() bool {
return false
}
// IsClientError returns true when this post users auth password o k response has a 4xx status code
func (o *PostUsersAuthPasswordOK) IsClientError() bool {
return false
}
// IsServerError returns true when this post users auth password o k response has a 5xx status code
func (o *PostUsersAuthPasswordOK) IsServerError() bool {
return false
}
// IsCode returns true when this post users auth password o k response a status code equal to that given
func (o *PostUsersAuthPasswordOK) IsCode(code int) bool {
return code == 200
}
// Code gets the status code for the post users auth password o k response
func (o *PostUsersAuthPasswordOK) Code() int {
return 200
}
func (o *PostUsersAuthPasswordOK) Error() string {
return fmt.Sprintf("[POST /users/auth/password][%d] postUsersAuthPasswordOK %+v", 200, o.Payload)
}
func (o *PostUsersAuthPasswordOK) String() string {
return fmt.Sprintf("[POST /users/auth/password][%d] postUsersAuthPasswordOK %+v", 200, o.Payload)
}
func (o *PostUsersAuthPasswordOK) GetPayload() *members_models.UserAuth {
return o.Payload
}
func (o *PostUsersAuthPasswordOK) readResponse(response runtime.ClientResponse, consumer runtime.Consumer, formats strfmt.Registry) error {
o.Payload = new(members_models.UserAuth)
// response payload
if err := consumer.Consume(response.Body(), o.Payload); err != nil && err != io.EOF {
return err
}
return nil
}
// NewPostUsersAuthPasswordUnauthorized creates a PostUsersAuthPasswordUnauthorized with default headers values
func NewPostUsersAuthPasswordUnauthorized() *PostUsersAuthPasswordUnauthorized {
return &PostUsersAuthPasswordUnauthorized{}
}
/*
PostUsersAuthPasswordUnauthorized describes a response with status code 401, with default header values.
Access Unauthorized, invalid API-KEY was used
*/
type PostUsersAuthPasswordUnauthorized struct {
Payload *members_models.Error
}
// IsSuccess returns true when this post users auth password unauthorized response has a 2xx status code
func (o *PostUsersAuthPasswordUnauthorized) IsSuccess() bool {
return false
}
// IsRedirect returns true when this post users auth password unauthorized response has a 3xx status code
func (o *PostUsersAuthPasswordUnauthorized) IsRedirect() bool {
return false
}
// IsClientError returns true when this post users auth password unauthorized response has a 4xx status code
func (o *PostUsersAuthPasswordUnauthorized) IsClientError() bool {
return true
}
// IsServerError returns true when this post users auth password unauthorized response has a 5xx status code
func (o *PostUsersAuthPasswordUnauthorized) IsServerError() bool {
return false
}
// IsCode returns true when this post users auth password unauthorized response a status code equal to that given
func (o *PostUsersAuthPasswordUnauthorized) IsCode(code int) bool {
return code == 401
}
// Code gets the status code for the post users auth password unauthorized response
func (o *PostUsersAuthPasswordUnauthorized) Code() int {
return 401
}
func (o *PostUsersAuthPasswordUnauthorized) Error() string {
return fmt.Sprintf("[POST /users/auth/password][%d] postUsersAuthPasswordUnauthorized %+v", 401, o.Payload)
}
func (o *PostUsersAuthPasswordUnauthorized) String() string {
return fmt.Sprintf("[POST /users/auth/password][%d] postUsersAuthPasswordUnauthorized %+v", 401, o.Payload)
}
func (o *PostUsersAuthPasswordUnauthorized) GetPayload() *members_models.Error {
return o.Payload
}
func (o *PostUsersAuthPasswordUnauthorized) readResponse(response runtime.ClientResponse, consumer runtime.Consumer, formats strfmt.Registry) error {
o.Payload = new(members_models.Error)
// response payload
if err := consumer.Consume(response.Body(), o.Payload); err != nil && err != io.EOF {
return err
}
return nil
}
// NewPostUsersAuthPasswordNotFound creates a PostUsersAuthPasswordNotFound with default headers values
func NewPostUsersAuthPasswordNotFound() *PostUsersAuthPasswordNotFound {
return &PostUsersAuthPasswordNotFound{}
}
/*
PostUsersAuthPasswordNotFound describes a response with status code 404, with default header values.
Resource was not found
*/
type PostUsersAuthPasswordNotFound struct {
Payload *members_models.Error
}
// IsSuccess returns true when this post users auth password not found response has a 2xx status code
func (o *PostUsersAuthPasswordNotFound) IsSuccess() bool {
return false
}
// IsRedirect returns true when this post users auth password not found response has a 3xx status code
func (o *PostUsersAuthPasswordNotFound) IsRedirect() bool {
return false
}
// IsClientError returns true when this post users auth password not found response has a 4xx status code
func (o *PostUsersAuthPasswordNotFound) IsClientError() bool {
return true
}
// IsServerError returns true when this post users auth password not found response has a 5xx status code
func (o *PostUsersAuthPasswordNotFound) IsServerError() bool {
return false
}
// IsCode returns true when this post users auth password not found response a status code equal to that given
func (o *PostUsersAuthPasswordNotFound) IsCode(code int) bool {
return code == 404
}
// Code gets the status code for the post users auth password not found response
func (o *PostUsersAuthPasswordNotFound) Code() int {
return 404
}
func (o *PostUsersAuthPasswordNotFound) Error() string {
return fmt.Sprintf("[POST /users/auth/password][%d] postUsersAuthPasswordNotFound %+v", 404, o.Payload)
}
func (o *PostUsersAuthPasswordNotFound) String() string {
return fmt.Sprintf("[POST /users/auth/password][%d] postUsersAuthPasswordNotFound %+v", 404, o.Payload)
}
func (o *PostUsersAuthPasswordNotFound) GetPayload() *members_models.Error {
return o.Payload
}
func (o *PostUsersAuthPasswordNotFound) readResponse(response runtime.ClientResponse, consumer runtime.Consumer, formats strfmt.Registry) error {
o.Payload = new(members_models.Error)
// response payload
if err := consumer.Consume(response.Body(), o.Payload); err != nil && err != io.EOF {
return err
}
return nil
}
// NewPostUsersAuthPasswordUnprocessableEntity creates a PostUsersAuthPasswordUnprocessableEntity with default headers values
func NewPostUsersAuthPasswordUnprocessableEntity() *PostUsersAuthPasswordUnprocessableEntity {
return &PostUsersAuthPasswordUnprocessableEntity{}
}
/*
PostUsersAuthPasswordUnprocessableEntity describes a response with status code 422, with default header values.
Unprocessable Entity, likely a bad parameter
*/
type PostUsersAuthPasswordUnprocessableEntity struct {
Payload *members_models.Error
}
// IsSuccess returns true when this post users auth password unprocessable entity response has a 2xx status code
func (o *PostUsersAuthPasswordUnprocessableEntity) IsSuccess() bool {
return false
}
// IsRedirect returns true when this post users auth password unprocessable entity response has a 3xx status code
func (o *PostUsersAuthPasswordUnprocessableEntity) IsRedirect() bool {
return false
}
// IsClientError returns true when this post users auth password unprocessable entity response has a 4xx status code
func (o *PostUsersAuthPasswordUnprocessableEntity) IsClientError() bool {
return true
}
// IsServerError returns true when this post users auth password unprocessable entity response has a 5xx status code
func (o *PostUsersAuthPasswordUnprocessableEntity) IsServerError() bool {
return false
}
// IsCode returns true when this post users auth password unprocessable entity response a status code equal to that given
func (o *PostUsersAuthPasswordUnprocessableEntity) IsCode(code int) bool {
return code == 422
}
// Code gets the status code for the post users auth password unprocessable entity response
func (o *PostUsersAuthPasswordUnprocessableEntity) Code() int {
return 422
}
func (o *PostUsersAuthPasswordUnprocessableEntity) Error() string {
return fmt.Sprintf("[POST /users/auth/password][%d] postUsersAuthPasswordUnprocessableEntity %+v", 422, o.Payload)
}
func (o *PostUsersAuthPasswordUnprocessableEntity) String() string {
return fmt.Sprintf("[POST /users/auth/password][%d] postUsersAuthPasswordUnprocessableEntity %+v", 422, o.Payload)
}
func (o *PostUsersAuthPasswordUnprocessableEntity) GetPayload() *members_models.Error {
return o.Payload
}
func (o *PostUsersAuthPasswordUnprocessableEntity) readResponse(response runtime.ClientResponse, consumer runtime.Consumer, formats strfmt.Registry) error {
o.Payload = new(members_models.Error)
// response payload
if err := consumer.Consume(response.Body(), o.Payload); err != nil && err != io.EOF {
return err
}
return nil
}
// NewPostUsersAuthPasswordInternalServerError creates a PostUsersAuthPasswordInternalServerError with default headers values
func NewPostUsersAuthPasswordInternalServerError() *PostUsersAuthPasswordInternalServerError {
return &PostUsersAuthPasswordInternalServerError{}
}
/*
PostUsersAuthPasswordInternalServerError describes a response with status code 500, with default header values.
Server Internal Error
*/
type PostUsersAuthPasswordInternalServerError struct {
Payload *members_models.Error
}
// IsSuccess returns true when this post users auth password internal server error response has a 2xx status code
func (o *PostUsersAuthPasswordInternalServerError) IsSuccess() bool {
return false
}
// IsRedirect returns true when this post users auth password internal server error response has a 3xx status code
func (o *PostUsersAuthPasswordInternalServerError) IsRedirect() bool {
return false
}
// IsClientError returns true when this post users auth password internal server error response has a 4xx status code
func (o *PostUsersAuthPasswordInternalServerError) IsClientError() bool {
return false
}
// IsServerError returns true when this post users auth password internal server error response has a 5xx status code
func (o *PostUsersAuthPasswordInternalServerError) IsServerError() bool {
return true
}
// IsCode returns true when this post users auth password internal server error response a status code equal to that given
func (o *PostUsersAuthPasswordInternalServerError) IsCode(code int) bool {
return code == 500
}
// Code gets the status code for the post users auth password internal server error response
func (o *PostUsersAuthPasswordInternalServerError) Code() int {
return 500
}
func (o *PostUsersAuthPasswordInternalServerError) Error() string {
return fmt.Sprintf("[POST /users/auth/password][%d] postUsersAuthPasswordInternalServerError %+v", 500, o.Payload)
}
func (o *PostUsersAuthPasswordInternalServerError) String() string {
return fmt.Sprintf("[POST /users/auth/password][%d] postUsersAuthPasswordInternalServerError %+v", 500, o.Payload)
}
func (o *PostUsersAuthPasswordInternalServerError) GetPayload() *members_models.Error {
return o.Payload
}
func (o *PostUsersAuthPasswordInternalServerError) readResponse(response runtime.ClientResponse, consumer runtime.Consumer, formats strfmt.Registry) error {
o.Payload = new(members_models.Error)
// response payload
if err := consumer.Consume(response.Body(), o.Payload); err != nil && err != io.EOF {
return err
}
return nil
}

View File

@ -0,0 +1,403 @@
// Code generated by go-swagger; DO NOT EDIT.
// (c) 2012-2023 by Vernon Keenan
// All rights reserved worldwide.
// Proprietary product; unlicensed use is not allowed
package users
// This file was generated by the swagger tool.
// Editing this file might prove futile when you re-run the swagger generate command
import (
"fmt"
"io"
"github.com/go-openapi/runtime"
"github.com/go-openapi/strfmt"
"code.tnxs.net/work/lib/api/members/members_models"
)
// PostUsersAuthReader is a Reader for the PostUsersAuth structure.
type PostUsersAuthReader struct {
formats strfmt.Registry
}
// ReadResponse reads a server response into the received o.
func (o *PostUsersAuthReader) ReadResponse(response runtime.ClientResponse, consumer runtime.Consumer) (interface{}, error) {
switch response.Code() {
case 200:
result := NewPostUsersAuthOK()
if err := result.readResponse(response, consumer, o.formats); err != nil {
return nil, err
}
return result, nil
case 401:
result := NewPostUsersAuthUnauthorized()
if err := result.readResponse(response, consumer, o.formats); err != nil {
return nil, err
}
return nil, result
case 404:
result := NewPostUsersAuthNotFound()
if err := result.readResponse(response, consumer, o.formats); err != nil {
return nil, err
}
return nil, result
case 422:
result := NewPostUsersAuthUnprocessableEntity()
if err := result.readResponse(response, consumer, o.formats); err != nil {
return nil, err
}
return nil, result
case 500:
result := NewPostUsersAuthInternalServerError()
if err := result.readResponse(response, consumer, o.formats); err != nil {
return nil, err
}
return nil, result
default:
return nil, runtime.NewAPIError("response status code does not match any response statuses defined for this endpoint in the swagger spec", response, response.Code())
}
}
// NewPostUsersAuthOK creates a PostUsersAuthOK with default headers values
func NewPostUsersAuthOK() *PostUsersAuthOK {
return &PostUsersAuthOK{}
}
/*
PostUsersAuthOK describes a response with status code 200, with default header values.
Response with single UserAuth object
*/
type PostUsersAuthOK struct {
Payload *members_models.UserAuth
}
// IsSuccess returns true when this post users auth o k response has a 2xx status code
func (o *PostUsersAuthOK) IsSuccess() bool {
return true
}
// IsRedirect returns true when this post users auth o k response has a 3xx status code
func (o *PostUsersAuthOK) IsRedirect() bool {
return false
}
// IsClientError returns true when this post users auth o k response has a 4xx status code
func (o *PostUsersAuthOK) IsClientError() bool {
return false
}
// IsServerError returns true when this post users auth o k response has a 5xx status code
func (o *PostUsersAuthOK) IsServerError() bool {
return false
}
// IsCode returns true when this post users auth o k response a status code equal to that given
func (o *PostUsersAuthOK) IsCode(code int) bool {
return code == 200
}
// Code gets the status code for the post users auth o k response
func (o *PostUsersAuthOK) Code() int {
return 200
}
func (o *PostUsersAuthOK) Error() string {
return fmt.Sprintf("[POST /users/auth][%d] postUsersAuthOK %+v", 200, o.Payload)
}
func (o *PostUsersAuthOK) String() string {
return fmt.Sprintf("[POST /users/auth][%d] postUsersAuthOK %+v", 200, o.Payload)
}
func (o *PostUsersAuthOK) GetPayload() *members_models.UserAuth {
return o.Payload
}
func (o *PostUsersAuthOK) readResponse(response runtime.ClientResponse, consumer runtime.Consumer, formats strfmt.Registry) error {
o.Payload = new(members_models.UserAuth)
// response payload
if err := consumer.Consume(response.Body(), o.Payload); err != nil && err != io.EOF {
return err
}
return nil
}
// NewPostUsersAuthUnauthorized creates a PostUsersAuthUnauthorized with default headers values
func NewPostUsersAuthUnauthorized() *PostUsersAuthUnauthorized {
return &PostUsersAuthUnauthorized{}
}
/*
PostUsersAuthUnauthorized describes a response with status code 401, with default header values.
Access Unauthorized, invalid API-KEY was used
*/
type PostUsersAuthUnauthorized struct {
Payload *members_models.Error
}
// IsSuccess returns true when this post users auth unauthorized response has a 2xx status code
func (o *PostUsersAuthUnauthorized) IsSuccess() bool {
return false
}
// IsRedirect returns true when this post users auth unauthorized response has a 3xx status code
func (o *PostUsersAuthUnauthorized) IsRedirect() bool {
return false
}
// IsClientError returns true when this post users auth unauthorized response has a 4xx status code
func (o *PostUsersAuthUnauthorized) IsClientError() bool {
return true
}
// IsServerError returns true when this post users auth unauthorized response has a 5xx status code
func (o *PostUsersAuthUnauthorized) IsServerError() bool {
return false
}
// IsCode returns true when this post users auth unauthorized response a status code equal to that given
func (o *PostUsersAuthUnauthorized) IsCode(code int) bool {
return code == 401
}
// Code gets the status code for the post users auth unauthorized response
func (o *PostUsersAuthUnauthorized) Code() int {
return 401
}
func (o *PostUsersAuthUnauthorized) Error() string {
return fmt.Sprintf("[POST /users/auth][%d] postUsersAuthUnauthorized %+v", 401, o.Payload)
}
func (o *PostUsersAuthUnauthorized) String() string {
return fmt.Sprintf("[POST /users/auth][%d] postUsersAuthUnauthorized %+v", 401, o.Payload)
}
func (o *PostUsersAuthUnauthorized) GetPayload() *members_models.Error {
return o.Payload
}
func (o *PostUsersAuthUnauthorized) readResponse(response runtime.ClientResponse, consumer runtime.Consumer, formats strfmt.Registry) error {
o.Payload = new(members_models.Error)
// response payload
if err := consumer.Consume(response.Body(), o.Payload); err != nil && err != io.EOF {
return err
}
return nil
}
// NewPostUsersAuthNotFound creates a PostUsersAuthNotFound with default headers values
func NewPostUsersAuthNotFound() *PostUsersAuthNotFound {
return &PostUsersAuthNotFound{}
}
/*
PostUsersAuthNotFound describes a response with status code 404, with default header values.
Resource was not found
*/
type PostUsersAuthNotFound struct {
Payload *members_models.Error
}
// IsSuccess returns true when this post users auth not found response has a 2xx status code
func (o *PostUsersAuthNotFound) IsSuccess() bool {
return false
}
// IsRedirect returns true when this post users auth not found response has a 3xx status code
func (o *PostUsersAuthNotFound) IsRedirect() bool {
return false
}
// IsClientError returns true when this post users auth not found response has a 4xx status code
func (o *PostUsersAuthNotFound) IsClientError() bool {
return true
}
// IsServerError returns true when this post users auth not found response has a 5xx status code
func (o *PostUsersAuthNotFound) IsServerError() bool {
return false
}
// IsCode returns true when this post users auth not found response a status code equal to that given
func (o *PostUsersAuthNotFound) IsCode(code int) bool {
return code == 404
}
// Code gets the status code for the post users auth not found response
func (o *PostUsersAuthNotFound) Code() int {
return 404
}
func (o *PostUsersAuthNotFound) Error() string {
return fmt.Sprintf("[POST /users/auth][%d] postUsersAuthNotFound %+v", 404, o.Payload)
}
func (o *PostUsersAuthNotFound) String() string {
return fmt.Sprintf("[POST /users/auth][%d] postUsersAuthNotFound %+v", 404, o.Payload)
}
func (o *PostUsersAuthNotFound) GetPayload() *members_models.Error {
return o.Payload
}
func (o *PostUsersAuthNotFound) readResponse(response runtime.ClientResponse, consumer runtime.Consumer, formats strfmt.Registry) error {
o.Payload = new(members_models.Error)
// response payload
if err := consumer.Consume(response.Body(), o.Payload); err != nil && err != io.EOF {
return err
}
return nil
}
// NewPostUsersAuthUnprocessableEntity creates a PostUsersAuthUnprocessableEntity with default headers values
func NewPostUsersAuthUnprocessableEntity() *PostUsersAuthUnprocessableEntity {
return &PostUsersAuthUnprocessableEntity{}
}
/*
PostUsersAuthUnprocessableEntity describes a response with status code 422, with default header values.
Unprocessable Entity, likely a bad parameter
*/
type PostUsersAuthUnprocessableEntity struct {
Payload *members_models.Error
}
// IsSuccess returns true when this post users auth unprocessable entity response has a 2xx status code
func (o *PostUsersAuthUnprocessableEntity) IsSuccess() bool {
return false
}
// IsRedirect returns true when this post users auth unprocessable entity response has a 3xx status code
func (o *PostUsersAuthUnprocessableEntity) IsRedirect() bool {
return false
}
// IsClientError returns true when this post users auth unprocessable entity response has a 4xx status code
func (o *PostUsersAuthUnprocessableEntity) IsClientError() bool {
return true
}
// IsServerError returns true when this post users auth unprocessable entity response has a 5xx status code
func (o *PostUsersAuthUnprocessableEntity) IsServerError() bool {
return false
}
// IsCode returns true when this post users auth unprocessable entity response a status code equal to that given
func (o *PostUsersAuthUnprocessableEntity) IsCode(code int) bool {
return code == 422
}
// Code gets the status code for the post users auth unprocessable entity response
func (o *PostUsersAuthUnprocessableEntity) Code() int {
return 422
}
func (o *PostUsersAuthUnprocessableEntity) Error() string {
return fmt.Sprintf("[POST /users/auth][%d] postUsersAuthUnprocessableEntity %+v", 422, o.Payload)
}
func (o *PostUsersAuthUnprocessableEntity) String() string {
return fmt.Sprintf("[POST /users/auth][%d] postUsersAuthUnprocessableEntity %+v", 422, o.Payload)
}
func (o *PostUsersAuthUnprocessableEntity) GetPayload() *members_models.Error {
return o.Payload
}
func (o *PostUsersAuthUnprocessableEntity) readResponse(response runtime.ClientResponse, consumer runtime.Consumer, formats strfmt.Registry) error {
o.Payload = new(members_models.Error)
// response payload
if err := consumer.Consume(response.Body(), o.Payload); err != nil && err != io.EOF {
return err
}
return nil
}
// NewPostUsersAuthInternalServerError creates a PostUsersAuthInternalServerError with default headers values
func NewPostUsersAuthInternalServerError() *PostUsersAuthInternalServerError {
return &PostUsersAuthInternalServerError{}
}
/*
PostUsersAuthInternalServerError describes a response with status code 500, with default header values.
Server Internal Error
*/
type PostUsersAuthInternalServerError struct {
Payload *members_models.Error
}
// IsSuccess returns true when this post users auth internal server error response has a 2xx status code
func (o *PostUsersAuthInternalServerError) IsSuccess() bool {
return false
}
// IsRedirect returns true when this post users auth internal server error response has a 3xx status code
func (o *PostUsersAuthInternalServerError) IsRedirect() bool {
return false
}
// IsClientError returns true when this post users auth internal server error response has a 4xx status code
func (o *PostUsersAuthInternalServerError) IsClientError() bool {
return false
}
// IsServerError returns true when this post users auth internal server error response has a 5xx status code
func (o *PostUsersAuthInternalServerError) IsServerError() bool {
return true
}
// IsCode returns true when this post users auth internal server error response a status code equal to that given
func (o *PostUsersAuthInternalServerError) IsCode(code int) bool {
return code == 500
}
// Code gets the status code for the post users auth internal server error response
func (o *PostUsersAuthInternalServerError) Code() int {
return 500
}
func (o *PostUsersAuthInternalServerError) Error() string {
return fmt.Sprintf("[POST /users/auth][%d] postUsersAuthInternalServerError %+v", 500, o.Payload)
}
func (o *PostUsersAuthInternalServerError) String() string {
return fmt.Sprintf("[POST /users/auth][%d] postUsersAuthInternalServerError %+v", 500, o.Payload)
}
func (o *PostUsersAuthInternalServerError) GetPayload() *members_models.Error {
return o.Payload
}
func (o *PostUsersAuthInternalServerError) readResponse(response runtime.ClientResponse, consumer runtime.Consumer, formats strfmt.Registry) error {
o.Payload = new(members_models.Error)
// response payload
if err := consumer.Consume(response.Body(), o.Payload); err != nil && err != io.EOF {
return err
}
return nil
}

View File

@ -38,6 +38,10 @@ type ClientService interface {
PostUsers(params *PostUsersParams, authInfo runtime.ClientAuthInfoWriter, opts ...ClientOption) (*PostUsersOK, error)
PostUsersAuth(params *PostUsersAuthParams, authInfo runtime.ClientAuthInfoWriter, opts ...ClientOption) (*PostUsersAuthOK, error)
PostUsersAuthPassword(params *PostUsersAuthPasswordParams, authInfo runtime.ClientAuthInfoWriter, opts ...ClientOption) (*PostUsersAuthPasswordOK, error)
PostUsersOnboard(params *PostUsersOnboardParams, authInfo runtime.ClientAuthInfoWriter, opts ...ClientOption) (*PostUsersOnboardOK, error)
PutUsers(params *PutUsersParams, authInfo runtime.ClientAuthInfoWriter, opts ...ClientOption) (*PutUsersOK, error)
@ -127,6 +131,88 @@ func (a *Client) PostUsers(params *PostUsersParams, authInfo runtime.ClientAuthI
panic(msg)
}
/*
PostUsersAuth authenticates a user
Authenticate a user
*/
func (a *Client) PostUsersAuth(params *PostUsersAuthParams, authInfo runtime.ClientAuthInfoWriter, opts ...ClientOption) (*PostUsersAuthOK, error) {
// TODO: Validate the params before sending
if params == nil {
params = NewPostUsersAuthParams()
}
op := &runtime.ClientOperation{
ID: "postUsersAuth",
Method: "POST",
PathPattern: "/users/auth",
ProducesMediaTypes: []string{"application/json"},
ConsumesMediaTypes: []string{"application/json"},
Schemes: []string{"http"},
Params: params,
Reader: &PostUsersAuthReader{formats: a.formats},
AuthInfo: authInfo,
Context: params.Context,
Client: params.HTTPClient,
}
for _, opt := range opts {
opt(op)
}
result, err := a.transport.Submit(op)
if err != nil {
return nil, err
}
success, ok := result.(*PostUsersAuthOK)
if ok {
return success, nil
}
// unexpected success response
// safeguard: normally, absent a default response, unknown success responses return an error above: so this is a codegen issue
msg := fmt.Sprintf("unexpected success response for postUsersAuth: API contract not enforced by server. Client expected to get an error, but got: %T", result)
panic(msg)
}
/*
PostUsersAuthPassword changes user password
Change user password
*/
func (a *Client) PostUsersAuthPassword(params *PostUsersAuthPasswordParams, authInfo runtime.ClientAuthInfoWriter, opts ...ClientOption) (*PostUsersAuthPasswordOK, error) {
// TODO: Validate the params before sending
if params == nil {
params = NewPostUsersAuthPasswordParams()
}
op := &runtime.ClientOperation{
ID: "postUsersAuthPassword",
Method: "POST",
PathPattern: "/users/auth/password",
ProducesMediaTypes: []string{"application/json"},
ConsumesMediaTypes: []string{"application/json"},
Schemes: []string{"http"},
Params: params,
Reader: &PostUsersAuthPasswordReader{formats: a.formats},
AuthInfo: authInfo,
Context: params.Context,
Client: params.HTTPClient,
}
for _, opt := range opts {
opt(op)
}
result, err := a.transport.Submit(op)
if err != nil {
return nil, err
}
success, ok := result.(*PostUsersAuthPasswordOK)
if ok {
return success, nil
}
// unexpected success response
// safeguard: normally, absent a default response, unknown success responses return an error above: so this is a codegen issue
msg := fmt.Sprintf("unexpected success response for postUsersAuthPassword: API contract not enforced by server. Client expected to get an error, but got: %T", result)
panic(msg)
}
/*
PostUsersOnboard asyncs onboard new users

View File

@ -1,270 +0,0 @@
// Code generated by go-swagger; DO NOT EDIT.
// (c) 2012-2023 by Vernon Keenan
// All rights reserved worldwide.
// Proprietary product; unlicensed use is not allowed
package members_models
// This file was generated by the swagger tool.
// Editing this file might prove futile when you re-run the swagger generate command
import (
"context"
"encoding/json"
"github.com/go-openapi/errors"
"github.com/go-openapi/strfmt"
"github.com/go-openapi/swag"
"github.com/go-openapi/validate"
)
// ClerkUser Clerk user object
//
// swagger:model ClerkUser
type ClerkUser struct {
// If Backup Codes are configured on the instance, you can provide them to enable it on the newly created user without the need to reset them.
// You must provide the backup codes in plain format or the corresponding bcrypt digest.
BackupCodes []string `json:"backup_codes"`
// A custom date/time denoting _when_ the user signed up to the application, specified in RFC3339 format (e.g. `2012-10-20T07:15:20.902Z`).
CreatedAt *string `json:"created_at,omitempty"`
// Email addresses to add to the user.
// Must be unique across your instance.
// The first email address will be set as the user's primary email address.
EmailAddress []string `json:"email_address"`
// The ID of the user as used in your external systems or your previous authentication solution.
// Must be unique across your instance.
ExternalID *string `json:"external_id,omitempty"`
// The first name to assign to the user
FirstName *string `json:"first_name,omitempty"`
// The last name to assign to the user
LastName *string `json:"last_name,omitempty"`
// The plaintext password to give the user.
// Must be at least 8 characters long, and can not be in any list of hacked passwords.
Password *string `json:"password,omitempty"`
// In case you already have the password digests and not the passwords, you can use them for the newly created user via this property.
// The digests should be generated with one of the supported algorithms.
// The hashing algorithm can be specified using the `password_hasher` property.
PasswordDigest *string `json:"password_digest,omitempty"`
// The hashing algorithm that was used to generate the password digest.
// The algorithms we support at the moment are [bcrypt](https://en.wikipedia.org/wiki/Bcrypt), md5, pbkdf2_sha256, [pbkdf2_sha256_django](https://docs.djangoproject.com/en/4.0/topics/auth/passwords/), [scrypt_firebase](https://firebaseopensource.com/projects/firebase/scrypt/) and 2 [argon2](https://argon2.online/) variants, argon2i and argon2id.
// Each of the above expects the incoming digest to be of a particular format.
//
// More specifically:
//
// **bcrypt:** The digest should be of the following form:
//
// `$<algorithm version>$<cost>$<salt & hash>`
//
// **md5:** The digest should follow the regular form e.g.:
//
// `5f4dcc3b5aa765d61d8327deb882cf99`
//
// **pbkdf2_sha256:** This is the PBKDF2 algorithm using the SHA256 hashing function. The format should be as follows:
//
// `pbkdf2_sha256$<iterations>$<salt>$<hash>`
//
// Note: Both the salt and the hash are expected to be base64-encoded.
//
// **pbkdf2_sha256_django:** This is the Django-specific variant of PBKDF2 and the digest should have the following format (as exported from Django):
//
// `pbkdf2_sha256$<iterations>$<salt>$<hash>`
//
// Note: The salt is expected to be un-encoded, the hash is expected base64-encoded.
//
// **pbkdf2_sha1:** This is similar to pkbdf2_sha256_django, but with two differences:
// 1. uses sha1 instead of sha256
// 2. accepts the hash as a hex-encoded string
//
// The format is the following:
//
// `pbkdf2_sha1$<iterations>$<salt>$<hash-as-hex-string>`
//
//
// **scrypt_firebase:** The Firebase-specific variant of scrypt.
// The value is expected to have 6 segments separated by the $ character and include the following information:
//
// _hash:_ The actual Base64 hash. This can be retrieved when exporting the user from Firebase.
// _salt:_ The salt used to generate the above hash. Again, this is given when exporting the user.
// _signer key:_ The base64 encoded signer key.
// _salt separator:_ The base64 encoded salt separator.
// _rounds:_ The number of rounds the algorithm needs to run.
// _memory cost:_ The cost of the algorithm run
//
// The first 2 (hash and salt) are per user and can be retrieved when exporting the user from Firebase.
// The other 4 values (signer key, salt separator, rounds and memory cost) are project-wide settings and can be retrieved from the project's password hash parameters.
//
// Once you have all these, you can combine it in the following format and send this as the digest in order for Clerk to accept it:
//
// `<hash>$<salt>$<signer key>$<salt separator>$<rounds>$<memory cost>`
//
// **argon2i:** Algorithms in the argon2 family generate digests that encode the following information:
//
// _version (v):_ The argon version, version 19 is assumed
// _memory (m):_ The memory used by the algorithm (in kibibytes)
// _iterations (t):_ The number of iterations to perform
// _parallelism (p):_ The number of threads to use
//
// Parts are demarcated by the `$` character, with the first part identifying the algorithm variant.
// The middle part is a comma-separated list of the encoding options (memory, iterations, parallelism).
// The final part is the actual digest.
//
// `$argon2i$v=19$m=4096,t=3,p=1$4t6CL3P7YiHBtwESXawI8Hm20zJj4cs7/4/G3c187e0$m7RQFczcKr5bIR0IIxbpO2P0tyrLjf3eUW3M3QSwnLc`
//
// **argon2id:** See the previous algorithm for an explanation of the formatting.
//
// For the argon2id case, the value of the algorithm in the first part of the digest is `argon2id`:
//
// `$argon2id$v=19$m=64,t=4,p=8$Z2liZXJyaXNo$iGXEpMBTDYQ8G/71tF0qGjxRHEmR3gpGULcE93zUJVU`
//
// If you need support for any particular hashing algorithm, [please let us know](https://clerk.com/support).
// Enum: [bcrypt md5 pbkdf2_sha256 pbkdf2_sha256_django pbkdf2_sha1 scrypt_firebase argon2i argon2id]
PasswordHasher *string `json:"password_hasher,omitempty"`
// Phone numbers to add to the user.
// Must be unique across your instance.
// The first phone number will be set as the user's primary phone number.
PhoneNumber []string `json:"phone_number"`
// Metadata saved on the user, that is only visible to your Backend API
PrivateMetadata interface{} `json:"private_metadata,omitempty"`
// Metadata saved on the user, that is visible to both your Frontend and Backend APIs
PublicMetadata interface{} `json:"public_metadata,omitempty"`
// When set to `true` all password checks are skipped.
// It is recommended to use this method only when migrating plaintext passwords to Clerk.
// Upon migration the user base should be prompted to pick stronger password.
SkipPasswordChecks bool `json:"skip_password_checks,omitempty"`
// When set to `true`, `password` is not required anymore when creating the user and can be omitted.
// This is useful when you are trying to create a user that doesn't have a password, in an instance that is using passwords.
// Please note that you cannot use this flag if password is the only way for a user to sign into your instance.
SkipPasswordRequirement bool `json:"skip_password_requirement,omitempty"`
// In case TOTP is configured on the instance, you can provide the secret to enable it on the newly created user without the need to reset it.
// Please note that currently the supported options are:
// * Period: 30 seconds
// * Code length: 6 digits
// * Algorithm: SHA1
TotpSecret *string `json:"totp_secret,omitempty"`
// Metadata saved on the user, that can be updated from both the Frontend and Backend APIs.
// Note: Since this data can be modified from the frontend, it is not guaranteed to be safe.
UnsafeMetadata interface{} `json:"unsafe_metadata,omitempty"`
// The username to give to the user.
// It must be unique across your instance.
Username *string `json:"username,omitempty"`
// Web3 wallets to add to the user.
// Must be unique across your instance.
// The first wallet will be set as the user's primary wallet.
Web3Wallet []string `json:"web3_wallet"`
}
// Validate validates this clerk user
func (m *ClerkUser) Validate(formats strfmt.Registry) error {
var res []error
if err := m.validatePasswordHasher(formats); err != nil {
res = append(res, err)
}
if len(res) > 0 {
return errors.CompositeValidationError(res...)
}
return nil
}
var clerkUserTypePasswordHasherPropEnum []interface{}
func init() {
var res []string
if err := json.Unmarshal([]byte(`["bcrypt","md5","pbkdf2_sha256","pbkdf2_sha256_django","pbkdf2_sha1","scrypt_firebase","argon2i","argon2id"]`), &res); err != nil {
panic(err)
}
for _, v := range res {
clerkUserTypePasswordHasherPropEnum = append(clerkUserTypePasswordHasherPropEnum, v)
}
}
const (
// ClerkUserPasswordHasherBcrypt captures enum value "bcrypt"
ClerkUserPasswordHasherBcrypt string = "bcrypt"
// ClerkUserPasswordHasherMd5 captures enum value "md5"
ClerkUserPasswordHasherMd5 string = "md5"
// ClerkUserPasswordHasherPbkdf2Sha256 captures enum value "pbkdf2_sha256"
ClerkUserPasswordHasherPbkdf2Sha256 string = "pbkdf2_sha256"
// ClerkUserPasswordHasherPbkdf2Sha256Django captures enum value "pbkdf2_sha256_django"
ClerkUserPasswordHasherPbkdf2Sha256Django string = "pbkdf2_sha256_django"
// ClerkUserPasswordHasherPbkdf2Sha1 captures enum value "pbkdf2_sha1"
ClerkUserPasswordHasherPbkdf2Sha1 string = "pbkdf2_sha1"
// ClerkUserPasswordHasherScryptFirebase captures enum value "scrypt_firebase"
ClerkUserPasswordHasherScryptFirebase string = "scrypt_firebase"
// ClerkUserPasswordHasherArgon2i captures enum value "argon2i"
ClerkUserPasswordHasherArgon2i string = "argon2i"
// ClerkUserPasswordHasherArgon2id captures enum value "argon2id"
ClerkUserPasswordHasherArgon2id string = "argon2id"
)
// prop value enum
func (m *ClerkUser) validatePasswordHasherEnum(path, location string, value string) error {
if err := validate.EnumCase(path, location, value, clerkUserTypePasswordHasherPropEnum, true); err != nil {
return err
}
return nil
}
func (m *ClerkUser) validatePasswordHasher(formats strfmt.Registry) error {
if swag.IsZero(m.PasswordHasher) { // not required
return nil
}
// value enum
if err := m.validatePasswordHasherEnum("password_hasher", "body", *m.PasswordHasher); err != nil {
return err
}
return nil
}
// ContextValidate validates this clerk user based on context it is used
func (m *ClerkUser) ContextValidate(ctx context.Context, formats strfmt.Registry) error {
return nil
}
// MarshalBinary interface implementation
func (m *ClerkUser) MarshalBinary() ([]byte, error) {
if m == nil {
return nil, nil
}
return swag.WriteJSON(m)
}
// UnmarshalBinary interface implementation
func (m *ClerkUser) UnmarshalBinary(b []byte) error {
var res ClerkUser
if err := swag.ReadJSON(b, &res); err != nil {
return err
}
*m = res
return nil
}

View File

@ -161,6 +161,9 @@ type User struct {
// Profile
ProfileID *string `json:"ProfileID,omitempty"`
// Login Provider
Provider *string `json:"Provider,omitempty"`
// Info Emails
ReceivesAdminEmails *bool `json:"ReceivesAdminEmails,omitempty"`

View File

@ -0,0 +1,132 @@
// Code generated by go-swagger; DO NOT EDIT.
// (c) 2012-2023 by Vernon Keenan
// All rights reserved worldwide.
// Proprietary product; unlicensed use is not allowed
package members_models
// This file was generated by the swagger tool.
// Editing this file might prove futile when you re-run the swagger generate command
import (
"context"
"github.com/go-openapi/strfmt"
"github.com/go-openapi/swag"
)
// UserAuth user auth
//
// swagger:model UserAuth
type UserAuth struct {
// Access Token
AccessToken *string `json:"accessToken,omitempty"`
// Account ID
AccountID *string `json:"accountId,omitempty"`
// API Key
APIKey *string `json:"apiKey,omitempty"`
// Company Name
CompanyName *string `json:"companyName,omitempty"`
// Contact
ContactID *string `json:"contactId,omitempty"`
// Email address
Email string `json:"email,omitempty"`
// Environment
Environment *string `json:"environment,omitempty"`
// The first name
FirstName *string `json:"firstName,omitempty"`
// GitHub
GitHub *string `json:"gitHub,omitempty"`
// Record ID
ID string `json:"id,omitempty"`
// Photo URL
Image *string `json:"image,omitempty"`
// Active
IsActive *bool `json:"isActive,omitempty"`
// IP address of last login
LastIP *string `json:"lastIp,omitempty"`
// Last login time
LastLogin *string `json:"lastLogin,omitempty"`
// The Last Name
LastName *string `json:"lastName,omitempty"`
// LinkedIn
LinkedIn *string `json:"linkedIn,omitempty"`
// Number of times user has logged in
LoginCount *int64 `json:"loginCount,omitempty"`
// Mobile
MobilePhone *string `json:"mobilePhone,omitempty"`
// Name
Name *string `json:"name,omitempty"`
// Password
Password *string `json:"password,omitempty"`
// Phone
Phone *string `json:"phone,omitempty"`
// Portal Role Level
PortalRole *string `json:"portalRole,omitempty"`
// Provider
Provider *string `json:"provider,omitempty"`
// Onboarding Status
Status *string `json:"status,omitempty"`
// Tenant ID associated with this user
TenantID *string `json:"tenantId,omitempty"`
// Title
Title *string `json:"title,omitempty"`
// Twitter
Twitter *string `json:"twitter,omitempty"`
}
// Validate validates this user auth
func (m *UserAuth) Validate(formats strfmt.Registry) error {
return nil
}
// ContextValidate validates this user auth based on context it is used
func (m *UserAuth) ContextValidate(ctx context.Context, formats strfmt.Registry) error {
return nil
}
// MarshalBinary interface implementation
func (m *UserAuth) MarshalBinary() ([]byte, error) {
if m == nil {
return nil, nil
}
return swag.WriteJSON(m)
}
// UnmarshalBinary interface implementation
func (m *UserAuth) UnmarshalBinary(b []byte) error {
var res UserAuth
if err := swag.ReadJSON(b, &res); err != nil {
return err
}
*m = res
return nil
}

View File

@ -1,60 +0,0 @@
// Code generated by go-swagger; DO NOT EDIT.
// (c) 2012-2023 by Vernon Keenan
// All rights reserved worldwide.
// Proprietary product; unlicensed use is not allowed
package members_models
// This file was generated by the swagger tool.
// Editing this file might prove futile when you re-run the swagger generate command
import (
"context"
"github.com/go-openapi/strfmt"
"github.com/go-openapi/swag"
)
// WebhookClerkRequest Clerk webhook object
//
// swagger:model WebhookClerkRequest
type WebhookClerkRequest struct {
// data
Data interface{} `json:"data,omitempty"`
// object
Object string `json:"object,omitempty"`
// Clerk Name
Type string `json:"type,omitempty"`
}
// Validate validates this webhook clerk request
func (m *WebhookClerkRequest) Validate(formats strfmt.Registry) error {
return nil
}
// ContextValidate validates this webhook clerk request based on context it is used
func (m *WebhookClerkRequest) ContextValidate(ctx context.Context, formats strfmt.Registry) error {
return nil
}
// MarshalBinary interface implementation
func (m *WebhookClerkRequest) MarshalBinary() ([]byte, error) {
if m == nil {
return nil, nil
}
return swag.WriteJSON(m)
}
// UnmarshalBinary interface implementation
func (m *WebhookClerkRequest) UnmarshalBinary(b []byte) error {
var res WebhookClerkRequest
if err := swag.ReadJSON(b, &res); err != nil {
return err
}
*m = res
return nil
}

View File

@ -1,60 +0,0 @@
// Code generated by go-swagger; DO NOT EDIT.
// (c) 2012-2023 by Vernon Keenan
// All rights reserved worldwide.
// Proprietary product; unlicensed use is not allowed
package members_models
// This file was generated by the swagger tool.
// Editing this file might prove futile when you re-run the swagger generate command
import (
"context"
"github.com/go-openapi/strfmt"
"github.com/go-openapi/swag"
)
// WebhookClerkResponse Clerk webhook object
//
// swagger:model WebhookClerkResponse
type WebhookClerkResponse struct {
// data
Data interface{} `json:"data,omitempty"`
// object
Object *string `json:"object,omitempty"`
// Clerk Name
Type *string `json:"type,omitempty"`
}
// Validate validates this webhook clerk response
func (m *WebhookClerkResponse) Validate(formats strfmt.Registry) error {
return nil
}
// ContextValidate validates this webhook clerk response based on context it is used
func (m *WebhookClerkResponse) ContextValidate(ctx context.Context, formats strfmt.Registry) error {
return nil
}
// MarshalBinary interface implementation
func (m *WebhookClerkResponse) MarshalBinary() ([]byte, error) {
if m == nil {
return nil, nil
}
return swag.WriteJSON(m)
}
// UnmarshalBinary interface implementation
func (m *WebhookClerkResponse) UnmarshalBinary(b []byte) error {
var res WebhookClerkResponse
if err := swag.ReadJSON(b, &res); err != nil {
return err
}
*m = res
return nil
}

View File

@ -55,6 +55,7 @@ func MarshalAuthUserToSwagger(obj *auth_models.User) *User {
EndOfDay: obj.EndOfDay,
Environment: obj.Environment,
Extension: obj.Extension,
ExternalAccount: obj.ExternalAccount,
FabricAPIKey: obj.FabricAPIKey,
Fax: obj.Fax,
FirstName: obj.FirstName,
@ -78,6 +79,7 @@ func MarshalAuthUserToSwagger(obj *auth_models.User) *User {
Phone: obj.Phone,
PortalRole: obj.PortalRole,
ProfileID: obj.ProfileID,
Provider: obj.Provider,
ReceivesAdminEmails: obj.ReceivesAdminEmails,
ReceivesAdminInfoEmails: obj.ReceivesAdminInfoEmails,
SenderEmail: obj.SenderEmail,
@ -85,7 +87,6 @@ func MarshalAuthUserToSwagger(obj *auth_models.User) *User {
Signature: obj.Signature,
SmallPhotoURL: obj.SmallPhotoURL,
StartOfDay: obj.StartOfDay,
ExternalAccount: obj.ExternalAccount,
TenantID: obj.TenantID,
TenantUsers: tenantUsers,
TimeZone: obj.TimeZone,

View File

@ -57,6 +57,7 @@ type User struct {
Phone string
PortalRole string
ProfileID string
Provider string
ReceivesAdminEmails bool
ReceivesAdminInfoEmails bool
ReceivesInfoEmails bool

View File

@ -278,6 +278,9 @@ definitions:
ProfileID:
description: Profile
type: string
Provider:
description: Provider
type: string
ReceivesAdminInfoEmails:
description: Admin Info Emails
type: boolean

View File

@ -3,7 +3,7 @@ info:
version: 0.3.4
title: "crm"
description: "Customer Information Microservice"
termsOfService: "https://salesforcedevops.net/terms/"
termsOfService: "https://WorkDifferentWithAI.com/terms/"
contact:
email: "vern@vernonkeenan.com"
license:
@ -242,7 +242,7 @@ responses:
paths:
/accounts:
delete:
description: Delete SalesforceDevops.net Account record
description: Delete WorkDifferentWithAI.com Account record
operationId: deleteAccount
parameters:
- $ref: "#/parameters/accountIdQuery"
@ -312,7 +312,7 @@ paths:
$ref: "#/responses/ServerError"
security:
- ApiKeyAuth: []
summary: Add a new account to SalesforceDevops.net
summary: Add a new account to WorkDifferentWithAI.com
tags:
- Accounts
put:
@ -340,7 +340,7 @@ paths:
- Accounts
/assets:
delete:
description: Delete SalesforceDevops.net Asset record
description: Delete WorkDifferentWithAI.com Asset record
operationId: deleteAsset
parameters:
- $ref: "#/parameters/assetIdQuery"
@ -408,7 +408,7 @@ paths:
$ref: "#/responses/ServerError"
security:
- ApiKeyAuth: []
summary: Add a new asset to SalesforceDevops.net
summary: Add a new asset to WorkDifferentWithAI.com
tags:
- Assets
put:
@ -436,7 +436,7 @@ paths:
- Assets
/contracts:
delete:
description: Delete SalesforceDevops.net Contract record
description: Delete WorkDifferentWithAI.com Contract record
operationId: deleteContract
parameters:
- $ref: "#/parameters/contractIdQuery"
@ -504,7 +504,7 @@ paths:
$ref: "#/responses/ServerError"
security:
- ApiKeyAuth: []
summary: Add a new contract to SalesforceDevops.net
summary: Add a new contract to WorkDifferentWithAI.com
tags:
- Contracts
put:
@ -532,7 +532,7 @@ paths:
- Contracts
/contacts:
delete:
description: Delete SalesforceDevops.net Contact record
description: Delete WorkDifferentWithAI.com Contact record
operationId: deleteContact
parameters:
- $ref: "#/parameters/contactIdQuery"
@ -630,7 +630,7 @@ paths:
- Contacts
/leads:
delete:
description: Delete SalesforceDevops.net Lead record
description: Delete WorkDifferentWithAI.com Lead record
operationId: deleteLead
parameters:
- $ref: "#/parameters/leadIdQuery"

View File

@ -178,6 +178,10 @@ User:
description: Profile
type: string
x-nullable: true
Provider:
description: Login Provider
type: string
x-nullable: true
ReceivesAdminEmails:
description: Info Emails
type: boolean

View File

@ -278,6 +278,9 @@ definitions:
ProfileID:
description: Profile
type: string
Provider:
description: Provider
type: string
ReceivesAdminInfoEmails:
description: Admin Info Emails
type: boolean

View File

@ -3,7 +3,7 @@ info:
version: 0.3.4
title: "crm"
description: "Customer Information Microservice"
termsOfService: "https://salesforcedevops.net/terms/"
termsOfService: "https://WorkDifferentWithAI.com/terms/"
contact:
email: "vern@vernonkeenan.com"
license:
@ -242,7 +242,7 @@ responses:
paths:
/accounts:
delete:
description: Delete SalesforceDevops.net Account record
description: Delete WorkDifferentWithAI.com Account record
operationId: deleteAccount
parameters:
- $ref: "#/parameters/accountIdQuery"
@ -312,7 +312,7 @@ paths:
$ref: "#/responses/ServerError"
security:
- ApiKeyAuth: []
summary: Add a new account to SalesforceDevops.net
summary: Add a new account to WorkDifferentWithAI.com
tags:
- Accounts
put:
@ -340,7 +340,7 @@ paths:
- Accounts
/assets:
delete:
description: Delete SalesforceDevops.net Asset record
description: Delete WorkDifferentWithAI.com Asset record
operationId: deleteAsset
parameters:
- $ref: "#/parameters/assetIdQuery"
@ -408,7 +408,7 @@ paths:
$ref: "#/responses/ServerError"
security:
- ApiKeyAuth: []
summary: Add a new asset to SalesforceDevops.net
summary: Add a new asset to WorkDifferentWithAI.com
tags:
- Assets
put:
@ -436,7 +436,7 @@ paths:
- Assets
/contracts:
delete:
description: Delete SalesforceDevops.net Contract record
description: Delete WorkDifferentWithAI.com Contract record
operationId: deleteContract
parameters:
- $ref: "#/parameters/contractIdQuery"
@ -504,7 +504,7 @@ paths:
$ref: "#/responses/ServerError"
security:
- ApiKeyAuth: []
summary: Add a new contract to SalesforceDevops.net
summary: Add a new contract to WorkDifferentWithAI.com
tags:
- Contracts
put:
@ -532,7 +532,7 @@ paths:
- Contracts
/contacts:
delete:
description: Delete SalesforceDevops.net Contact record
description: Delete WorkDifferentWithAI.com Contact record
operationId: deleteContact
parameters:
- $ref: "#/parameters/contactIdQuery"
@ -630,7 +630,7 @@ paths:
- Contacts
/leads:
delete:
description: Delete SalesforceDevops.net Lead record
description: Delete WorkDifferentWithAI.com Lead record
operationId: deleteLead
parameters:
- $ref: "#/parameters/leadIdQuery"

View File

@ -291,13 +291,13 @@ parameters:
required: true
schema:
$ref: "#/definitions/UserRequest"
WebhookClerkRequest:
description: An array of new WebhookClerk records
UserAuthRequest:
description: A simple user authentication request
in: body
name: webhookclerkRequest
name: UserAuthRequest
required: true
schema:
$ref: "#/definitions/WebhookClerkRequest"
$ref: "#/definitions/UserAuth"
activeQuery:
description: Retrieve active records only?
in: query
@ -566,10 +566,10 @@ responses:
description: Response with User objects
schema:
$ref: "#/definitions/UserResponse"
WebhookClerkResponse:
description: WebhookClerk Response Object
UserAuthResponse:
description: Response with single UserAuth object
schema:
$ref: "#/definitions/WebhookClerkResponse"
$ref: "#/definitions/UserAuth"
paths:
/attendees:
get:
@ -3130,6 +3130,50 @@ paths:
summary: Update Transaction
tags:
- Transactions
/users/auth:
post:
description: Authenticate a user
operationId: postUsersAuth
parameters:
- $ref: "#/parameters/UserAuthRequest"
responses:
"200":
$ref: "#/responses/UserAuthResponse"
"401":
$ref: "#/responses/Unauthorized"
"404":
$ref: "#/responses/NotFound"
"422":
$ref: "#/responses/UnprocessableEntity"
"500":
$ref: "#/responses/ServerError"
summary: Authenticate a user
tags:
- Users
security:
- ApiKeyAuth: []
/users/auth/password:
post:
description: Change user password
operationId: postUsersAuthPassword
parameters:
- $ref: "#/parameters/UserAuthRequest"
responses:
"200":
$ref: "#/responses/UserAuthResponse"
"401":
$ref: "#/responses/Unauthorized"
"404":
$ref: "#/responses/NotFound"
"422":
$ref: "#/responses/UnprocessableEntity"
"500":
$ref: "#/responses/ServerError"
summary: Change user password
tags:
- Users
security:
- ApiKeyAuth: []
/users/onboard:
post:
description: Async onboard new users
@ -3986,223 +4030,113 @@ definitions:
Meta:
$ref: "#/definitions/ResponseMeta"
type: object
WebhookClerkRequest:
description: Clerk webhook object
UserAuth:
properties:
object:
type: string
type:
description: Clerk Name
type: string
data:
type: object
type: object
ClerkUser:
description: Clerk user object
type: object
properties:
external_id:
accountId:
description: Account ID
type: string
x-nullable: true
description: |-
The ID of the user as used in your external systems or your previous authentication solution.
Must be unique across your instance.
first_name:
accessToken:
description: Access Token
type: string
x-nullable: true
description: The first name to assign to the user
last_name:
apiKey:
description: API Key
type: string
x-nullable: true
description: The last name to assign to the user
email_address:
type: array
items:
type: string
x-nullable: true
description: |-
Email addresses to add to the user.
Must be unique across your instance.
The first email address will be set as the user's primary email address.
phone_number:
type: array
items:
type: string
x-nullable: true
description: |-
Phone numbers to add to the user.
Must be unique across your instance.
The first phone number will be set as the user's primary phone number.
web3_wallet:
type: array
items:
type: string
x-nullable: true
description: |-
Web3 wallets to add to the user.
Must be unique across your instance.
The first wallet will be set as the user's primary wallet.
username:
companyName:
description: Company Name
type: string
x-nullable: true
contactId:
description: Contact
type: string
x-nullable: true
email:
description: Email address
type: string
environment:
description: Environment
type: string
x-nullable: true
firstName:
description: The first name
type: string
x-nullable: true
image:
description: Photo URL
type: string
x-nullable: true
gitHub:
description: GitHub
type: string
x-nullable: true
id:
description: Record ID
type: string
isActive:
description: Active
type: boolean
x-nullable: true
lastIp:
description: IP address of last login
type: string
x-nullable: true
lastLogin:
description: Last login time
type: string
x-nullable: true
lastName:
description: The Last Name
type: string
x-nullable: true
linkedIn:
description: LinkedIn
type: string
x-nullable: true
loginCount:
description: Number of times user has logged in
format: int64
type: number
x-nullable: true
mobilePhone:
description: Mobile
type: string
x-nullable: true
name:
description: Name
type: string
x-nullable: true
description: |-
The username to give to the user.
It must be unique across your instance.
password:
description: Password
type: string
x-nullable: true
description: |-
The plaintext password to give the user.
Must be at least 8 characters long, and can not be in any list of hacked passwords.
password_digest:
phone:
description: Phone
type: string
x-nullable: true
description: |-
In case you already have the password digests and not the passwords, you can use them for the newly created user via this property.
The digests should be generated with one of the supported algorithms.
The hashing algorithm can be specified using the `password_hasher` property.
password_hasher:
portalRole:
description: Portal Role Level
type: string
x-nullable: true
description: |-
The hashing algorithm that was used to generate the password digest.
The algorithms we support at the moment are [bcrypt](https://en.wikipedia.org/wiki/Bcrypt), md5, pbkdf2_sha256, [pbkdf2_sha256_django](https://docs.djangoproject.com/en/4.0/topics/auth/passwords/), [scrypt_firebase](https://firebaseopensource.com/projects/firebase/scrypt/) and 2 [argon2](https://argon2.online/) variants, argon2i and argon2id.
Each of the above expects the incoming digest to be of a particular format.
More specifically:
**bcrypt:** The digest should be of the following form:
`$<algorithm version>$<cost>$<salt & hash>`
**md5:** The digest should follow the regular form e.g.:
`5f4dcc3b5aa765d61d8327deb882cf99`
**pbkdf2_sha256:** This is the PBKDF2 algorithm using the SHA256 hashing function. The format should be as follows:
`pbkdf2_sha256$<iterations>$<salt>$<hash>`
Note: Both the salt and the hash are expected to be base64-encoded.
**pbkdf2_sha256_django:** This is the Django-specific variant of PBKDF2 and the digest should have the following format (as exported from Django):
`pbkdf2_sha256$<iterations>$<salt>$<hash>`
Note: The salt is expected to be un-encoded, the hash is expected base64-encoded.
**pbkdf2_sha1:** This is similar to pkbdf2_sha256_django, but with two differences:
1. uses sha1 instead of sha256
2. accepts the hash as a hex-encoded string
The format is the following:
`pbkdf2_sha1$<iterations>$<salt>$<hash-as-hex-string>`
**scrypt_firebase:** The Firebase-specific variant of scrypt.
The value is expected to have 6 segments separated by the $ character and include the following information:
_hash:_ The actual Base64 hash. This can be retrieved when exporting the user from Firebase.
_salt:_ The salt used to generate the above hash. Again, this is given when exporting the user.
_signer key:_ The base64 encoded signer key.
_salt separator:_ The base64 encoded salt separator.
_rounds:_ The number of rounds the algorithm needs to run.
_memory cost:_ The cost of the algorithm run
The first 2 (hash and salt) are per user and can be retrieved when exporting the user from Firebase.
The other 4 values (signer key, salt separator, rounds and memory cost) are project-wide settings and can be retrieved from the project's password hash parameters.
Once you have all these, you can combine it in the following format and send this as the digest in order for Clerk to accept it:
`<hash>$<salt>$<signer key>$<salt separator>$<rounds>$<memory cost>`
**argon2i:** Algorithms in the argon2 family generate digests that encode the following information:
_version (v):_ The argon version, version 19 is assumed
_memory (m):_ The memory used by the algorithm (in kibibytes)
_iterations (t):_ The number of iterations to perform
_parallelism (p):_ The number of threads to use
Parts are demarcated by the `$` character, with the first part identifying the algorithm variant.
The middle part is a comma-separated list of the encoding options (memory, iterations, parallelism).
The final part is the actual digest.
`$argon2i$v=19$m=4096,t=3,p=1$4t6CL3P7YiHBtwESXawI8Hm20zJj4cs7/4/G3c187e0$m7RQFczcKr5bIR0IIxbpO2P0tyrLjf3eUW3M3QSwnLc`
**argon2id:** See the previous algorithm for an explanation of the formatting.
For the argon2id case, the value of the algorithm in the first part of the digest is `argon2id`:
`$argon2id$v=19$m=64,t=4,p=8$Z2liZXJyaXNo$iGXEpMBTDYQ8G/71tF0qGjxRHEmR3gpGULcE93zUJVU`
If you need support for any particular hashing algorithm, [please let us know](https://clerk.com/support).
enum:
- bcrypt
- md5
- pbkdf2_sha256
- pbkdf2_sha256_django
- pbkdf2_sha1
- scrypt_firebase
- argon2i
- argon2id
skip_password_checks:
type: boolean
description: |-
When set to `true` all password checks are skipped.
It is recommended to use this method only when migrating plaintext passwords to Clerk.
Upon migration the user base should be prompted to pick stronger password.
skip_password_requirement:
type: boolean
description: |-
When set to `true`, `password` is not required anymore when creating the user and can be omitted.
This is useful when you are trying to create a user that doesn't have a password, in an instance that is using passwords.
Please note that you cannot use this flag if password is the only way for a user to sign into your instance.
totp_secret:
provider:
description: Provider
type: string
x-nullable: true
description: |-
In case TOTP is configured on the instance, you can provide the secret to enable it on the newly created user without the need to reset it.
Please note that currently the supported options are:
* Period: 30 seconds
* Code length: 6 digits
* Algorithm: SHA1
backup_codes:
type: array
items:
type: string
x-nullable: true
description: |-
If Backup Codes are configured on the instance, you can provide them to enable it on the newly created user without the need to reset them.
You must provide the backup codes in plain format or the corresponding bcrypt digest.
public_metadata:
type: object
description: Metadata saved on the user, that is visible to both
your Frontend and Backend APIs
private_metadata:
type: object
description: Metadata saved on the user, that is only visible to
your Backend API
unsafe_metadata:
type: object
description: |-
Metadata saved on the user, that can be updated from both the Frontend and Backend APIs.
Note: Since this data can be modified from the frontend, it is not guaranteed to be safe.
created_at:
status:
description: Onboarding Status
type: string
x-nullable: true
description: A custom date/time denoting _when_ the user signed
up to the application, specified in RFC3339 format (e.g. `2012-10-20T07:15:20.902Z`).
WebhookClerkResponse:
description: Clerk webhook object
properties:
object:
tenantId:
description: Tenant ID associated with this user
type: string
x-nullable: true
type:
description: Clerk Name
title:
description: Title
type: string
x-nullable: true
twitter:
description: Twitter
type: string
x-nullable: true
data:
type: object
type: object

View File

@ -291,13 +291,13 @@ parameters:
required: true
schema:
$ref: "#/definitions/UserRequest"
WebhookClerkRequest:
description: An array of new WebhookClerk records
UserAuthRequest:
description: A simple user authentication request
in: body
name: webhookclerkRequest
name: UserAuthRequest
required: true
schema:
$ref: "#/definitions/WebhookClerkRequest"
$ref: "#/definitions/UserAuth"
activeQuery:
description: Retrieve active records only?
in: query
@ -566,10 +566,10 @@ responses:
description: Response with User objects
schema:
$ref: "#/definitions/UserResponse"
WebhookClerkResponse:
description: WebhookClerk Response Object
UserAuthResponse:
description: Response with single UserAuth object
schema:
$ref: "#/definitions/WebhookClerkResponse"
$ref: "#/definitions/UserAuth"
paths:
/attendees:
get:
@ -3130,6 +3130,50 @@ paths:
summary: Update Transaction
tags:
- Transactions
/users/auth:
post:
description: Authenticate a user
operationId: postUsersAuth
parameters:
- $ref: "#/parameters/UserAuthRequest"
responses:
"200":
$ref: "#/responses/UserAuthResponse"
"401":
$ref: "#/responses/Unauthorized"
"404":
$ref: "#/responses/NotFound"
"422":
$ref: "#/responses/UnprocessableEntity"
"500":
$ref: "#/responses/ServerError"
summary: Authenticate a user
tags:
- Users
security:
- ApiKeyAuth: []
/users/auth/password:
post:
description: Change user password
operationId: postUsersAuthPassword
parameters:
- $ref: "#/parameters/UserAuthRequest"
responses:
"200":
$ref: "#/responses/UserAuthResponse"
"401":
$ref: "#/responses/Unauthorized"
"404":
$ref: "#/responses/NotFound"
"422":
$ref: "#/responses/UnprocessableEntity"
"500":
$ref: "#/responses/ServerError"
summary: Change user password
tags:
- Users
security:
- ApiKeyAuth: []
/users/onboard:
post:
description: Async onboard new users
@ -3986,223 +4030,113 @@ definitions:
Meta:
$ref: "#/definitions/ResponseMeta"
type: object
WebhookClerkRequest:
description: Clerk webhook object
UserAuth:
properties:
object:
type: string
type:
description: Clerk Name
type: string
data:
type: object
type: object
ClerkUser:
description: Clerk user object
type: object
properties:
external_id:
accountId:
description: Account ID
type: string
x-nullable: true
description: |-
The ID of the user as used in your external systems or your previous authentication solution.
Must be unique across your instance.
first_name:
accessToken:
description: Access Token
type: string
x-nullable: true
description: The first name to assign to the user
last_name:
apiKey:
description: API Key
type: string
x-nullable: true
description: The last name to assign to the user
email_address:
type: array
items:
type: string
x-nullable: true
description: |-
Email addresses to add to the user.
Must be unique across your instance.
The first email address will be set as the user's primary email address.
phone_number:
type: array
items:
type: string
x-nullable: true
description: |-
Phone numbers to add to the user.
Must be unique across your instance.
The first phone number will be set as the user's primary phone number.
web3_wallet:
type: array
items:
type: string
x-nullable: true
description: |-
Web3 wallets to add to the user.
Must be unique across your instance.
The first wallet will be set as the user's primary wallet.
username:
companyName:
description: Company Name
type: string
x-nullable: true
contactId:
description: Contact
type: string
x-nullable: true
email:
description: Email address
type: string
environment:
description: Environment
type: string
x-nullable: true
firstName:
description: The first name
type: string
x-nullable: true
image:
description: Photo URL
type: string
x-nullable: true
gitHub:
description: GitHub
type: string
x-nullable: true
id:
description: Record ID
type: string
isActive:
description: Active
type: boolean
x-nullable: true
lastIp:
description: IP address of last login
type: string
x-nullable: true
lastLogin:
description: Last login time
type: string
x-nullable: true
lastName:
description: The Last Name
type: string
x-nullable: true
linkedIn:
description: LinkedIn
type: string
x-nullable: true
loginCount:
description: Number of times user has logged in
format: int64
type: number
x-nullable: true
mobilePhone:
description: Mobile
type: string
x-nullable: true
name:
description: Name
type: string
x-nullable: true
description: |-
The username to give to the user.
It must be unique across your instance.
password:
description: Password
type: string
x-nullable: true
description: |-
The plaintext password to give the user.
Must be at least 8 characters long, and can not be in any list of hacked passwords.
password_digest:
phone:
description: Phone
type: string
x-nullable: true
description: |-
In case you already have the password digests and not the passwords, you can use them for the newly created user via this property.
The digests should be generated with one of the supported algorithms.
The hashing algorithm can be specified using the `password_hasher` property.
password_hasher:
portalRole:
description: Portal Role Level
type: string
x-nullable: true
description: |-
The hashing algorithm that was used to generate the password digest.
The algorithms we support at the moment are [bcrypt](https://en.wikipedia.org/wiki/Bcrypt), md5, pbkdf2_sha256, [pbkdf2_sha256_django](https://docs.djangoproject.com/en/4.0/topics/auth/passwords/), [scrypt_firebase](https://firebaseopensource.com/projects/firebase/scrypt/) and 2 [argon2](https://argon2.online/) variants, argon2i and argon2id.
Each of the above expects the incoming digest to be of a particular format.
More specifically:
**bcrypt:** The digest should be of the following form:
`$<algorithm version>$<cost>$<salt & hash>`
**md5:** The digest should follow the regular form e.g.:
`5f4dcc3b5aa765d61d8327deb882cf99`
**pbkdf2_sha256:** This is the PBKDF2 algorithm using the SHA256 hashing function. The format should be as follows:
`pbkdf2_sha256$<iterations>$<salt>$<hash>`
Note: Both the salt and the hash are expected to be base64-encoded.
**pbkdf2_sha256_django:** This is the Django-specific variant of PBKDF2 and the digest should have the following format (as exported from Django):
`pbkdf2_sha256$<iterations>$<salt>$<hash>`
Note: The salt is expected to be un-encoded, the hash is expected base64-encoded.
**pbkdf2_sha1:** This is similar to pkbdf2_sha256_django, but with two differences:
1. uses sha1 instead of sha256
2. accepts the hash as a hex-encoded string
The format is the following:
`pbkdf2_sha1$<iterations>$<salt>$<hash-as-hex-string>`
**scrypt_firebase:** The Firebase-specific variant of scrypt.
The value is expected to have 6 segments separated by the $ character and include the following information:
_hash:_ The actual Base64 hash. This can be retrieved when exporting the user from Firebase.
_salt:_ The salt used to generate the above hash. Again, this is given when exporting the user.
_signer key:_ The base64 encoded signer key.
_salt separator:_ The base64 encoded salt separator.
_rounds:_ The number of rounds the algorithm needs to run.
_memory cost:_ The cost of the algorithm run
The first 2 (hash and salt) are per user and can be retrieved when exporting the user from Firebase.
The other 4 values (signer key, salt separator, rounds and memory cost) are project-wide settings and can be retrieved from the project's password hash parameters.
Once you have all these, you can combine it in the following format and send this as the digest in order for Clerk to accept it:
`<hash>$<salt>$<signer key>$<salt separator>$<rounds>$<memory cost>`
**argon2i:** Algorithms in the argon2 family generate digests that encode the following information:
_version (v):_ The argon version, version 19 is assumed
_memory (m):_ The memory used by the algorithm (in kibibytes)
_iterations (t):_ The number of iterations to perform
_parallelism (p):_ The number of threads to use
Parts are demarcated by the `$` character, with the first part identifying the algorithm variant.
The middle part is a comma-separated list of the encoding options (memory, iterations, parallelism).
The final part is the actual digest.
`$argon2i$v=19$m=4096,t=3,p=1$4t6CL3P7YiHBtwESXawI8Hm20zJj4cs7/4/G3c187e0$m7RQFczcKr5bIR0IIxbpO2P0tyrLjf3eUW3M3QSwnLc`
**argon2id:** See the previous algorithm for an explanation of the formatting.
For the argon2id case, the value of the algorithm in the first part of the digest is `argon2id`:
`$argon2id$v=19$m=64,t=4,p=8$Z2liZXJyaXNo$iGXEpMBTDYQ8G/71tF0qGjxRHEmR3gpGULcE93zUJVU`
If you need support for any particular hashing algorithm, [please let us know](https://clerk.com/support).
enum:
- bcrypt
- md5
- pbkdf2_sha256
- pbkdf2_sha256_django
- pbkdf2_sha1
- scrypt_firebase
- argon2i
- argon2id
skip_password_checks:
type: boolean
description: |-
When set to `true` all password checks are skipped.
It is recommended to use this method only when migrating plaintext passwords to Clerk.
Upon migration the user base should be prompted to pick stronger password.
skip_password_requirement:
type: boolean
description: |-
When set to `true`, `password` is not required anymore when creating the user and can be omitted.
This is useful when you are trying to create a user that doesn't have a password, in an instance that is using passwords.
Please note that you cannot use this flag if password is the only way for a user to sign into your instance.
totp_secret:
provider:
description: Provider
type: string
x-nullable: true
description: |-
In case TOTP is configured on the instance, you can provide the secret to enable it on the newly created user without the need to reset it.
Please note that currently the supported options are:
* Period: 30 seconds
* Code length: 6 digits
* Algorithm: SHA1
backup_codes:
type: array
items:
type: string
x-nullable: true
description: |-
If Backup Codes are configured on the instance, you can provide them to enable it on the newly created user without the need to reset them.
You must provide the backup codes in plain format or the corresponding bcrypt digest.
public_metadata:
type: object
description: Metadata saved on the user, that is visible to both
your Frontend and Backend APIs
private_metadata:
type: object
description: Metadata saved on the user, that is only visible to
your Backend API
unsafe_metadata:
type: object
description: |-
Metadata saved on the user, that can be updated from both the Frontend and Backend APIs.
Note: Since this data can be modified from the frontend, it is not guaranteed to be safe.
created_at:
status:
description: Onboarding Status
type: string
x-nullable: true
description: A custom date/time denoting _when_ the user signed
up to the application, specified in RFC3339 format (e.g. `2012-10-20T07:15:20.902Z`).
WebhookClerkResponse:
description: Clerk webhook object
properties:
object:
tenantId:
description: Tenant ID associated with this user
type: string
x-nullable: true
type:
description: Clerk Name
title:
description: Title
type: string
x-nullable: true
twitter:
description: Twitter
type: string
x-nullable: true
data:
type: object
type: object