Coverage for gws-app/gws/plugin/auth_method/web/action.py: 84%

37 statements  

« prev     ^ index     » next       coverage.py v7.11.0, created at 2025-10-16 23:09 +0200

1"""Check user logins and logouts.""" 

2 

3from typing import cast 

4 

5import gws 

6import gws.base.action 

7 

8from . import core 

9 

10gws.ext.new.action('auth') 

11 

12 

13class Config(gws.base.action.Config): 

14 """Web-based authorization action configuration.""" 

15 

16 pass 

17 

18 

19class Props(gws.base.action.Props): 

20 pass 

21 

22 

23class Object(gws.base.action.Object): 

24 method: core.Object 

25 

26 def configure(self): 

27 m = self.configure_method() 

28 if not m: 

29 raise gws.Error('web authorization method required') 

30 self.method = m 

31 

32 def configure_method(self): 

33 for m in self.root.app.authMgr.methods: 

34 if m.extType == 'web': 

35 return cast(core.Object, m) 

36 

37 @gws.ext.command.api('authCheck') 

38 def check(self, req: gws.WebRequester, p: gws.Request) -> core.UserResponse: 

39 if req.user.isGuest: 

40 return core.UserResponse(user=None) 

41 return core.UserResponse(user=gws.props_of(req.user, req.user)) 

42 

43 @gws.ext.command.api('authLogin') 

44 def login(self, req: gws.WebRequester, p: core.LoginRequest) -> core.LoginResponse: 

45 return self.method.handle_login(req, p) 

46 

47 @gws.ext.command.api('authMfaVerify') 

48 def mfa_verify(self, req: gws.WebRequester, p: core.MfaVerifyRequest) -> core.LoginResponse: 

49 return self.method.handle_mfa_verify(req, p) 

50 

51 @gws.ext.command.api('authMfaRestart') 

52 def mfa_restart(self, req: gws.WebRequester, p: gws.Request) -> core.LoginResponse: 

53 return self.method.handle_mfa_restart(req, p) 

54 

55 @gws.ext.command.api('authLogout') 

56 def logout(self, req: gws.WebRequester, p: gws.Request) -> core.LogoutResponse: 

57 return self.method.handle_logout(req)