1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 package org.apache.james.userrepository;
23
24 import org.apache.james.api.user.User;
25 import org.apache.james.impl.user.DefaultJamesUser;
26 import org.apache.james.impl.user.DefaultUser;
27 import org.apache.mailet.MailAddress;
28
29 import java.sql.PreparedStatement;
30 import java.sql.ResultSet;
31 import java.sql.SQLException;
32
33
34
35
36
37 public class JamesUsersJdbcRepository extends AbstractJdbcUsersRepository {
38
39
40
41 protected User readUserFromResultSet(ResultSet rsUsers) throws SQLException {
42
43 String username = rsUsers.getString(1);
44 String pwdHash = rsUsers.getString(2);
45 String pwdAlgorithm = rsUsers.getString(3);
46 boolean useForwarding = rsUsers.getBoolean(4);
47 String forwardingDestination = rsUsers.getString(5);
48 boolean useAlias = rsUsers.getBoolean(6);
49 String alias = rsUsers.getString(7);
50
51 MailAddress forwardAddress = null;
52 if ( forwardingDestination != null ) {
53 try {
54 forwardAddress = new MailAddress(forwardingDestination);
55 } catch (javax.mail.internet.ParseException pe) {
56 StringBuffer exceptionBuffer = new StringBuffer(256).append(
57 "Invalid mail address in database: ").append(
58 forwardingDestination).append(", for user ").append(
59 username).append(".");
60 throw new RuntimeException(exceptionBuffer.toString());
61 }
62 }
63
64
65 DefaultJamesUser user = new DefaultJamesUser(username, pwdHash,
66 pwdAlgorithm);
67 user.setForwarding(useForwarding);
68 user.setForwardingDestination(forwardAddress);
69 user.setAliasing(useAlias);
70 user.setAlias(alias);
71
72 return user;
73 }
74
75
76
77
78
79
80 protected void setUserForInsertStatement(User user,
81 PreparedStatement userInsert) throws SQLException {
82 setUserForStatement(user, userInsert, false);
83 }
84
85
86
87
88
89 protected void setUserForUpdateStatement(User user,
90 PreparedStatement userUpdate) throws SQLException {
91 setUserForStatement(user, userUpdate, true);
92 }
93
94
95
96
97
98
99
100
101
102
103
104
105 private void setUserForStatement(User user, PreparedStatement stmt,
106 boolean userNameLast) throws SQLException {
107
108 int nameIndex = 1;
109 int colOffset = 1;
110 if ( userNameLast ) {
111 nameIndex = 7;
112 colOffset = 0;
113 }
114
115
116 DefaultJamesUser jamesUser;
117 if (user instanceof DefaultJamesUser) {
118 jamesUser = (DefaultJamesUser)user;
119 } else if (user instanceof DefaultUser) {
120 DefaultUser aUser = (DefaultUser)user;
121 jamesUser = new DefaultJamesUser(aUser.getUserName(), aUser
122 .getHashedPassword(), aUser.getHashAlgorithm());
123 }
124
125 else {
126 throw new RuntimeException("An unknown implementation of User was "
127 + "found. This implementation cannot be "
128 + "persisted to a UsersJDBCRepsitory.");
129 }
130
131
132 stmt.setString(nameIndex, jamesUser.getUserName());
133 stmt.setString(1 + colOffset, jamesUser.getHashedPassword());
134 stmt.setString(2 + colOffset, jamesUser.getHashAlgorithm());
135 stmt.setInt(3 + colOffset, (jamesUser.getForwarding() ? 1 : 0));
136
137 MailAddress forwardAddress = jamesUser.getForwardingDestination();
138 String forwardDestination = null;
139 if ( forwardAddress != null ) {
140 forwardDestination = forwardAddress.toString();
141 }
142 stmt.setString(4 + colOffset, forwardDestination);
143 stmt.setInt(5 + colOffset, (jamesUser.getAliasing() ? 1 : 0));
144 stmt.setString(6 + colOffset, jamesUser.getAlias());
145 }
146
147
148
149
150
151
152
153 public boolean addUser(String username, String password) {
154 User newbie = new DefaultJamesUser(username, "SHA");
155 newbie.setPassword(password);
156 return addUser(newbie);
157 }
158
159 }