Allow for removal of registry lock passwords in User objects (#2609)

This essentially enables the "forgot password" flow
This commit is contained in:
gbrodman
2024-11-14 21:01:17 +00:00
committed by GitHub
parent 78cc1b2937
commit e54075fea3
4 changed files with 107 additions and 5 deletions
@@ -36,9 +36,9 @@ import javax.annotation.Nullable;
import javax.inject.Inject;
/**
* An authenticam mechanism that verifies the OIDC token.
* An authentication mechanism that verifies the OIDC token.
*
* <p>Currently, two flavors are supported: one that checkes for the OIDC token as a regular bearer
* <p>Currently, two flavors are supported: one that checks for the OIDC token as a regular bearer
* token, and another that checks for the OIDC token passed by IAP. In both cases, the {@link
* AuthResult} with the highest {@link AuthLevel} possible is returned. So, if the email address for
* which the token is minted exists both as a {@link User} and as a service account, the returned
@@ -14,6 +14,7 @@
package google.registry.tools;
import static com.google.common.base.Preconditions.checkArgument;
import static google.registry.persistence.transaction.TransactionManagerFactory.tm;
import static google.registry.util.PreconditionsUtils.checkArgumentNotNull;
@@ -41,6 +42,15 @@ public abstract class CreateOrUpdateUserCommand extends ConfirmingCommand {
+ " to remove the field.")
private String registryLockEmailAddress;
@Nullable
@Parameter(
names = "--registry_lock_password",
description =
"Sets the registry lock password for this user, or removes it (allowing the user to"
+ " re-set it). Do not set the password explicitly unless in exceptional"
+ " circumstances.")
private String registryLockPassword;
@Nullable
@Parameter(
names = "--admin",
@@ -94,6 +104,25 @@ public abstract class CreateOrUpdateUserCommand extends ConfirmingCommand {
builder.setRegistryLockEmailAddress(registryLockEmailAddress);
}
}
// Ditto the registry lock password
if (registryLockPassword != null) {
if (registryLockEmailAddress != null) {
// Edge case, make sure we're not removing an email and setting a password at the same time
checkArgument(
!registryLockEmailAddress.isEmpty(),
"Cannot set/remove registry lock password on a user without a registry lock email"
+ " address");
} else {
checkArgument(
user != null && user.getRegistryLockEmailAddress().isPresent(),
"Cannot set/remove registry lock password on a user without a registry lock email"
+ " address");
}
builder.removeRegistryLockPassword();
if (!registryLockPassword.isEmpty()) {
builder.setRegistryLockPassword(registryLockPassword);
}
}
tm().put(builder.build());
}
}