diff --git a/pms_api_rest/datamodels/pms_user.py b/pms_api_rest/datamodels/pms_user.py index 9174f9197..eda442713 100644 --- a/pms_api_rest/datamodels/pms_user.py +++ b/pms_api_rest/datamodels/pms_user.py @@ -7,6 +7,7 @@ class PmsApiRestUserInput(Datamodel): _name = "pms.api.rest.user.input" username = fields.String(required=False, allow_none=True) password = fields.String(required=False, allow_none=True) + newPassword = fields.String(required=False, allow_none=True) userId = fields.Integer(required=False, allow_none=True) @@ -25,3 +26,7 @@ class PmsApiRestUserOutput(Datamodel): availabilityRuleFields = fields.List( fields.String(), required=False, allow_none=True ) + +class PmsApiRestUserLoginOutput(Datamodel): + _name = "pms.api.rest.user.login.output" + login = fields.String(required=True, allow_none=False) diff --git a/pms_api_rest/services/pms_user_service.py b/pms_api_rest/services/pms_user_service.py index 533b47d63..5979eea09 100644 --- a/pms_api_rest/services/pms_user_service.py +++ b/pms_api_rest/services/pms_user_service.py @@ -95,3 +95,32 @@ class PmsRoomTypeClassService(Component): ) return True + @restapi.method( + [ + ( + [ + "/p//change-password", + ], + "PATCH", + ) + ], + output_param=Datamodel("pms.api.rest.user.login.output", is_list=False), + input_param=Datamodel("pms.api.rest.user.input", is_list=False), + auth="jwt_api_pms", + ) + def change_password(self, user_id, input_data): + user = self.env["res.users"].sudo().search([("id", "=", user_id)]) + if user: + try: + user.with_user(user)._check_credentials(input_data.password, None) + except: + raise MissingError(_("Wrong password")) + + + user.change_password(input_data.password, input_data.newPassword) + + PmsUserInfo = self.env.datamodels["pms.api.rest.user.login.output"] + return PmsUserInfo( + login=user.login, + ) +