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
55 public class CredentialsCallbackHandler implements CallbackHandler {
56
57 protected static Logger log = LoggerFactory.getLogger(CredentialsCallbackHandler.class);
58
59 protected String name;
60
61 protected char[] pswd;
62
63
64
65
66 protected String realm;
67
68 protected User user;
69
70
71
72
73 public CredentialsCallbackHandler() {
74
75 }
76
77 public CredentialsCallbackHandler(String name, char[] pswd) {
78 this.name = name;
79 this.pswd = pswd;
80 }
81
82 public CredentialsCallbackHandler(String name, char[] pswd, String realm) {
83 this(name, pswd);
84 this.realm = realm;
85 }
86
87
88
89
90 @Override
91 public void handle(Callback[] callbacks) throws IOException, UnsupportedCallbackException {
92 for (int i = 0; i < callbacks.length; i++) {
93 if (callbacks[i] instanceof NameCallback) {
94 ((NameCallback) callbacks[i]).setName(this.name);
95 }
96 else if (callbacks[i] instanceof PasswordCallback) {
97 ((PasswordCallback) callbacks[i]).setPassword(this.pswd);
98 }
99 else if (callbacks[i] instanceof RealmCallback) {
100 ((RealmCallback) callbacks[i]).setRealm(this.realm);
101 }
102 else if (callbacks[i] instanceof UserCallback) {
103 user = ((UserCallback) callbacks[i]).getUser();
104 }
105 else if (callbacks[i] instanceof TextOutputCallback) {
106 TextOutputCallback outputCallback = (TextOutputCallback) callbacks[i];
107 switch (outputCallback.getMessageType()) {
108 case TextOutputCallback.INFORMATION:
109 log.info(outputCallback.getMessage());
110 break;
111 case TextOutputCallback.ERROR:
112 log.error(outputCallback.getMessage());
113 break;
114 case TextOutputCallback.WARNING:
115 log.warn(outputCallback.getMessage());
116 break;
117 default:
118 if (log.isDebugEnabled()) {
119 log.debug("Unsupported message type : {}", Integer
120 .toString(outputCallback.getMessageType()));
121 log.debug("Message : {}", outputCallback.getMessage());
122 }
123 }
124 }
125 }
126 }
127
128
129 public User getUser() {
130 return this.user;
131 }
132 }