// Code generated by go-swagger; DO NOT EDIT. // (c) 2012-2020 by Taxnexus, Inc. // 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: // // `$$$` // // **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$$$` // // 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$$$` // // 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$$$` // // // **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: // // `$$$$$` // // **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 }