SetUserEnabledAction.vala 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  1. using Statum;
  2. namespace Spry.Actions {
  3. /**
  4. * Enables or disables the user targeted by the sealed private data
  5. * ({@link UserActionPrivate}.`user_id`, falling back to the `user_id`
  6. * form field when no blob was sent), toggled by the `enabled` form field
  7. * (checkbox-style: the field is absent when unchecked). Admin-guarded.
  8. */
  9. public class SetUserEnabledAction : UserManagementAction {
  10. /** Notification shown when no `user_id` was supplied. */
  11. protected virtual string user_required_message { get { return "A user id is required."; } }
  12. /** Notification shown after enabling a user. */
  13. protected virtual string user_enabled_message { get { return "User has been enabled."; } }
  14. /** Notification shown after disabling a user. */
  15. protected virtual string user_disabled_message { get { return "User has been disabled."; } }
  16. /** Notification shown when the update could not be persisted. */
  17. protected virtual string update_failed_message { get { return "Could not update the user. Please try again later."; } }
  18. public override async DirectiveBuilder handle() throws GLib.Error {
  19. var guard = yield require_permission_guard();
  20. if (guard != null) {
  21. return (!)guard;
  22. }
  23. string enabled_text = "";
  24. if (request.form != null) {
  25. enabled_text = request.form.get_field("enabled") ?? "";
  26. }
  27. int64 user_id = target_user_id();
  28. if (user_id == 0) {
  29. return directives().notify("error", user_required_message);
  30. }
  31. bool enabled = enabled_text.down() == "on" || enabled_text.down() == "true" || enabled_text.down() == "1";
  32. try {
  33. yield users.set_user_enabled(user_id, enabled);
  34. return directives().notify("success", enabled ? user_enabled_message : user_disabled_message);
  35. } catch (Error e) {
  36. return directives().notify("error",
  37. ProfileValidation.internal_error_message(e, update_failed_message));
  38. }
  39. }
  40. }
  41. }