gotosocial/internal/api/model/user.go
tobi bcda048eab
[feature] Self-serve email change for users (#2957)
* [feature] Email change

* frontend stuff for changing email

* docs

* tests etc

* differentiate more clearly between local user+account and account

* populate user
2024-06-06 14:43:25 +01:00

97 lines
3.6 KiB
Go

// GoToSocial
// Copyright (C) GoToSocial Authors admin@gotosocial.org
// SPDX-License-Identifier: AGPL-3.0-or-later
//
// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU Affero General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU Affero General Public License for more details.
//
// You should have received a copy of the GNU Affero General Public License
// along with this program. If not, see <http://www.gnu.org/licenses/>.
package model
// User models fields relevant to one user.
//
// swagger:model user
type User struct {
// Database ID of this user.
// example: 01FBVD42CQ3ZEEVMW180SBX03B
ID string `json:"id"`
// Time this user was created. (ISO 8601 Datetime)
// example: 2021-07-30T09:20:25+00:00
CreatedAt string `json:"created_at"`
// Confirmed email address of this user, if set.
// example: someone@example.org
Email string `json:"email,omitempty"`
// Unconfirmed email address of this user, if set.
// example: someone.else@somewhere.else.example.org
UnconfirmedEmail string `json:"unconfirmed_email,omitempty"`
// Reason for sign-up, if provided.
// example: Please! Pretty please!
Reason string `json:"reason,omitempty"`
// Time at which this user was last emailed, if at all. (ISO 8601 Datetime)
// example: 2021-07-30T09:20:25+00:00
LastEmailedAt string `json:"last_emailed_at,omitempty"`
// Time at which the email given in the `email` field was confirmed, if at all. (ISO 8601 Datetime)
// example: 2021-07-30T09:20:25+00:00
ConfirmedAt string `json:"confirmed_at,omitempty"`
// Time when the last "please confirm your email address" email was sent, if at all. (ISO 8601 Datetime)
// example: 2021-07-30T09:20:25+00:00
ConfirmationSentAt string `json:"confirmation_sent_at,omitempty"`
// User is a moderator.
// example: false
Moderator bool `json:"moderator"`
// User is an admin.
// example: false
Admin bool `json:"admin"`
// User's account is disabled.
// example: false
Disabled bool `json:"disabled"`
// User was approved by an admin.
// example: true
Approved bool `json:"approved"`
// Time when the last "please reset your password" email was sent, if at all. (ISO 8601 Datetime)
// example: 2021-07-30T09:20:25+00:00
ResetPasswordSentAt string `json:"reset_password_sent_at,omitempty"`
}
// PasswordChangeRequest models user password change parameters.
//
// swagger:parameters userPasswordChange
type PasswordChangeRequest struct {
// User's previous password.
//
// in: formData
// required: true
OldPassword string `form:"old_password" json:"old_password" xml:"old_password" validation:"required"`
// Desired new password.
// If the password does not have high enough entropy, it will be rejected.
// See https://github.com/wagslane/go-password-validator
//
// in: formData
// required: true
NewPassword string `form:"new_password" json:"new_password" xml:"new_password" validation:"required"`
}
// EmailChangeRequest models user email change parameters.
//
// swagger:parameters userEmailChange
type EmailChangeRequest struct {
// User's current password, for verification.
//
// in: formData
// required: true
Password string `form:"password" json:"password" xml:"password" validation:"required"`
// Desired new email address.
//
// in: formData
// required: true
NewEmail string `form:"new_email" json:"new_email" xml:"new_email" validation:"required"`
}