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