diff options
author | Freya Murphy <freya@freyacat.org> | 2024-05-21 21:11:19 -0400 |
---|---|---|
committer | Freya Murphy <freya@freyacat.org> | 2024-05-21 21:11:19 -0400 |
commit | 8d544d58af232e82c740cfcb271d20965020c133 (patch) | |
tree | b258dacda826fe8ca7d9c703588262a153b9f6d5 /src/db/rest/user/api_update_password.sql | |
parent | fix modals (diff) | |
download | xssbook2-8d544d58af232e82c740cfcb271d20965020c133.tar.gz xssbook2-8d544d58af232e82c740cfcb271d20965020c133.tar.bz2 xssbook2-8d544d58af232e82c740cfcb271d20965020c133.zip |
things
Diffstat (limited to 'src/db/rest/user/api_update_password.sql')
-rw-r--r-- | src/db/rest/user/api_update_password.sql | 44 |
1 files changed, 44 insertions, 0 deletions
diff --git a/src/db/rest/user/api_update_password.sql b/src/db/rest/user/api_update_password.sql new file mode 100644 index 0000000..34cc1ac --- /dev/null +++ b/src/db/rest/user/api_update_password.sql @@ -0,0 +1,44 @@ +CREATE FUNCTION api.update_password( + current_password TEXT, + new_password TEXT +) +RETURNS void +LANGUAGE plpgsql VOLATILE +AS $BODY$ +DECLARE + _user_id INTEGER; + _real_password TEXT; +BEGIN + _user_id = _api.get_user_id(); + + PERFORM _api.validate_text( + _text => new_password, + _column => 'password', + _min => 1, + _max => 256 + ); + + SELECT password + INTO _real_password + FROM admin.user + WHERE id = _user_id; + + IF _real_password <> current_password THEN + PERFORM _api.raise( + _msg => 'api_invalid_password' + ); + END IF; + + UPDATE + admin.user + SET + "password" = new_password + WHERE + id = _user_id; +END +$BODY$; + +GRANT EXECUTE ON FUNCTION api.update_password(TEXT, TEXT) + TO rest_user; +GRANT SELECT, UPDATE ON TABLE admin.user + TO rest_user; |