1 module hunt.framework.auth.BasicAuthRealm; 2 3 import hunt.framework.auth.AuthRealm; 4 import hunt.framework.auth.Claim; 5 import hunt.framework.auth.ClaimTypes; 6 import hunt.framework.auth.JwtToken; 7 import hunt.framework.auth.JwtUtil; 8 import hunt.framework.auth.principal; 9 import hunt.framework.auth.UserDetails; 10 import hunt.framework.auth.UserService; 11 import hunt.framework.provider.ServiceProvider; 12 13 import hunt.collection.ArrayList; 14 import hunt.collection.Collection; 15 import hunt.http.AuthenticationScheme; 16 import hunt.logging; 17 import hunt.shiro; 18 import hunt.String; 19 20 import std.format; 21 import std.range; 22 23 24 /** 25 * 26 */ 27 class BasicAuthRealm : AuthRealm { 28 29 this(UserService userService) { 30 super(userService); 31 } 32 33 override bool supports(AuthenticationToken token) { 34 version(HUNT_AUTH_DEBUG) tracef("AuthenticationToken: %s", typeid(cast(Object)token)); 35 UsernamePasswordToken t = cast(UsernamePasswordToken)token; 36 return t !is null; 37 } 38 39 override protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken token) { 40 string username = token.getPrincipal(); 41 string password = cast(string)token.getCredentials(); 42 43 UserService userService = getUserService(); 44 version(HUNT_AUTH_DEBUG) { 45 infof("username: %s, %s", username, typeid(cast(Object)userService)); 46 } 47 48 if(username.empty) { 49 throw new IncorrectCredentialsException(username); 50 } 51 52 // To authenticate the user with username and password 53 UserDetails user = userService.authenticate(username, password); 54 55 if(user !is null) { 56 57 version(HUNT_AUTH_DEBUG) infof("Realm: %s", getName()); 58 PrincipalCollection pCollection = new SimplePrincipalCollection(user, getName()); 59 String credentials = new String(password); 60 SimpleAuthenticationInfo info = new SimpleAuthenticationInfo(pCollection, credentials); 61 62 return info; 63 } else { 64 throw new IncorrectCredentialsException(username); 65 } 66 } 67 }