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 }
95 else if (callbacks[i] instanceof PasswordCallback) {
96 ((PasswordCallback) callbacks[i]).setPassword(this.pswd);
97 }
98 else if (callbacks[i] instanceof RealmCallback) {
99 ((RealmCallback) callbacks[i]).setRealm(this.realm);
100 }
101 else if (callbacks[i] instanceof UserCallback) {
102 user = ((UserCallback) callbacks[i]).getUser();
103 }
104 else if (callbacks[i] instanceof TextOutputCallback) {
105 TextOutputCallback outputCallback = (TextOutputCallback) callbacks[i];
106 switch (outputCallback.getMessageType()) {
107 case TextOutputCallback.INFORMATION:
108 log.info(outputCallback.getMessage());
109 break;
110 case TextOutputCallback.ERROR:
111 log.error(outputCallback.getMessage());
112 break;
113 case TextOutputCallback.WARNING:
114 log.warn(outputCallback.getMessage());
115 break;
116 default:
117 if (log.isDebugEnabled()) {
118 log.debug("Unsupported message type : {}", Integer
119 .toString(outputCallback.getMessageType()));
120 log.debug("Message : {}", outputCallback.getMessage());
121 }
122 }
123 }
124 }
125 }
126
127
128 public User getUser() {
129 return this.user;
130 }
131 }