feat: increase password max to 256, fix i18n, and force re-login #83

- Raise password maximum length from 32 to 256 characters
- fix profileSchema to accept `t` for proper internationalization
- Invalidate user's WebUI token on password change, requiring re-login
This commit is contained in:
rustmailer
2025-12-30 11:05:07 +08:00
parent c01872284e
commit 62d956c7d6
23 changed files with 66 additions and 54 deletions
+7 -1
View File
@@ -16,7 +16,6 @@
// 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/>.
use crate::modules::account::migration::{AccountModel, AccountType};
use crate::modules::cache::imap::mailbox::{Attribute, AttributeEnum, MailBox};
use crate::modules::context::executors::MAIL_CONTEXT;
@@ -64,8 +63,15 @@ pub async fn convert_names_to_mailboxes(
for name in names.into_iter() {
// Convert the name into a MailBox structure
let mailbox_name = name.name().to_string();
let mut mailbox: MailBox = name.into();
tracing::debug!(
raw = &mailbox_name,
decoded = &mailbox.name,
"mailbox name comparison"
);
if contains_no_select(&mailbox.attributes) {
continue;
}
+6
View File
@@ -444,6 +444,7 @@ impl BichonUser {
pub async fn update(id: u64, request: UserUpdateRequest) -> BichonResult<()> {
let _ = &request.validate().await?;
let password_changed = request.password.is_some();
if DEFAULT_ADMIN_USER_ID == id && request.global_roles.is_some() {
return Err(raise_error!(
@@ -537,6 +538,11 @@ impl BichonUser {
},
)
.await?;
if password_changed {
AccessTokenModel::reset_webui_token(id).await?;
}
Ok(())
}
+4 -4
View File
@@ -204,9 +204,9 @@ impl UserCreateRequest {
ErrorCode::InvalidParameter
));
}
if password_len > 32 {
if password_len > 256 {
return Err(raise_error!(
"Password cannot exceed 32 characters.".into(),
"Password cannot exceed 256 characters.".into(),
ErrorCode::InvalidParameter
));
}
@@ -317,9 +317,9 @@ impl UserUpdateRequest {
if let Some(password) = &self.password {
let len = password.len();
if len < 8 || len > 32 {
if len < 8 || len > 256 {
return Err(raise_error!(
"Password must be 8-32 characters.".into(),
"Password must be 8-256 characters.".into(),
ErrorCode::InvalidParameter
));
}