Improve youth mode action token flow
This commit is contained in:
+15
-3
@@ -3021,7 +3021,7 @@ func serveIMYouthModeEnable(wrt http.ResponseWriter, req *http.Request) {
|
||||
writeIMError(wrt, req, http.StatusBadRequest, 30000, imReasonMalformedRequest, "malformed request", nil)
|
||||
return
|
||||
}
|
||||
if _, err := store.Security.ConsumeActionToken(principal.TenantID, principal.Uid, strings.TrimSpace(body.ActionToken), "set_independent_password", "youth_mode", time.Now().UTC().Round(time.Millisecond)); err != nil {
|
||||
if _, err := store.Security.ConsumeActionToken(principal.TenantID, principal.Uid, strings.TrimSpace(body.ActionToken), "enable_youth_mode", "youth_mode", time.Now().UTC().Round(time.Millisecond)); err != nil {
|
||||
writeIMError(wrt, req, http.StatusForbidden, 30042, imReasonActionToken, "action token invalid", nil)
|
||||
return
|
||||
}
|
||||
@@ -6081,7 +6081,19 @@ func serveIMIndependentPassword(wrt http.ResponseWriter, req *http.Request) {
|
||||
writeIMError(wrt, req, http.StatusInternalServerError, 90000, imReasonInternal, "internal error", nil)
|
||||
return
|
||||
}
|
||||
writeIMSuccess(wrt, req, map[string]any{"status": "ok", "purpose": purpose})
|
||||
enableToken, enableExpiresAt, err := issueIMActionToken(principal.TenantID, principal.Uid, "enable_youth_mode", purpose)
|
||||
if err != nil {
|
||||
writeIMError(wrt, req, http.StatusInternalServerError, 90000, imReasonInternal, "internal error", nil)
|
||||
return
|
||||
}
|
||||
writeIMSuccess(wrt, req, map[string]any{
|
||||
"status": "ok",
|
||||
"password_set": true,
|
||||
"purpose": purpose,
|
||||
"enable_action_token": enableToken,
|
||||
"enable_action_expires_at": enableExpiresAt.Format(time.RFC3339Nano),
|
||||
"next_action": "enable_youth_mode",
|
||||
})
|
||||
}
|
||||
|
||||
func serveIMIndependentPasswordVerify(wrt http.ResponseWriter, req *http.Request) {
|
||||
@@ -6338,7 +6350,7 @@ func issueIMActionToken(tenantID types.TenantID, uid types.Uid, action, target s
|
||||
|
||||
func defaultIMActionTarget(action, fallback string) string {
|
||||
switch action {
|
||||
case "set_independent_password", "close_youth_mode", "reset_independent_password":
|
||||
case "set_independent_password", "enable_youth_mode", "close_youth_mode", "reset_independent_password":
|
||||
return "youth_mode"
|
||||
default:
|
||||
return fallback
|
||||
|
||||
Reference in New Issue
Block a user