1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34 package info.magnolia.cms.security.auth.callback;
35
36 import info.magnolia.cms.security.User;
37
38 import java.io.IOException;
39
40 import javax.security.auth.callback.Callback;
41 import javax.security.auth.callback.CallbackHandler;
42 import javax.security.auth.callback.NameCallback;
43 import javax.security.auth.callback.PasswordCallback;
44 import javax.security.auth.callback.TextOutputCallback;
45 import javax.security.auth.callback.UnsupportedCallbackException;
46
47 import org.slf4j.Logger;
48 import org.slf4j.LoggerFactory;
49
50
51
52
53
54 public class CredentialsCallbackHandler implements CallbackHandler {
55
56 protected static Logger log = LoggerFactory.getLogger(CredentialsCallbackHandler.class);
57
58 protected String name;
59
60 protected char[] pswd;
61
62
63
64
65 protected String realm;
66
67 protected User user;
68
69
70
71
72 public CredentialsCallbackHandler() {
73
74 }
75
76 public CredentialsCallbackHandler(String name, char[] pswd) {
77 this.name = name;
78 this.pswd = pswd;
79 }
80
81 public CredentialsCallbackHandler(String name, char[] pswd, String realm) {
82 this(name, pswd);
83 this.realm = realm;
84 }
85
86
87
88
89 @Override
90 public void handle(Callback[] callbacks) throws IOException, UnsupportedCallbackException {
91 for (int i = 0; i < callbacks.length; i++) {
92 if (callbacks[i] instanceof NameCallback) {
93 ((NameCallback) callbacks[i]).setName(this.name);
94 } else if (callbacks[i] instanceof PasswordCallback) {
95 ((PasswordCallback) callbacks[i]).setPassword(this.pswd);
96 } else if (callbacks[i] instanceof RealmCallback) {
97 ((RealmCallback) callbacks[i]).setRealm(this.realm);
98 } else if (callbacks[i] instanceof UserCallback) {
99 user = ((UserCallback) callbacks[i]).getUser();
100 } else if (callbacks[i] instanceof TextOutputCallback) {
101 TextOutputCallback outputCallback = (TextOutputCallback) callbacks[i];
102 switch (outputCallback.getMessageType()) {
103 case TextOutputCallback.INFORMATION:
104 log.info(outputCallback.getMessage());
105 break;
106 case TextOutputCallback.ERROR:
107 log.error(outputCallback.getMessage());
108 break;
109 case TextOutputCallback.WARNING:
110 log.warn(outputCallback.getMessage());
111 break;
112 default:
113 log.debug("Unsupported message type : {} - Message:", outputCallback.getMessageType(), outputCallback.getMessage());
114 }
115 }
116 }
117 }
118
119
120 public User getUser() {
121 return this.user;
122 }
123 }