Project

General

Profile

« Previous | Next » 

Revision 60056

[maven-release-plugin] copy for tag uoa-user-management-2.0.0

View differences:

modules/uoa-user-management/tags/uoa-user-management-2.0.0/deploy.info
1
{
2
  "type_source": "SVN", 
3
  "goal": "package -U -T 4C source:jar", 
4
  "url": "http://svn-public.driver.research-infrastructures.eu/driver/dnet40/modules/uoa-user-management/trunk",
5
  "deploy_repository": "dnet4-snapshots", 
6
  "version": "4", 
7
  "mail": "antleb@di.uoa.gr, kiatrop@di.uoa.gr, sbaltzi@di.uoa.gr",
8
  "deploy_repository_url": "http://maven.research-infrastructures.eu/nexus/content/repositories/dnet4-snapshots", 
9
  "name": "uoa-user-management"
10
}
11

  
modules/uoa-user-management/tags/uoa-user-management-2.0.0/src/test/java/eu/dnetlib/openaire/user/AppTest.java
1
package eu.dnetlib.openaire.user;
2

  
3
import junit.framework.Test;
4
import junit.framework.TestCase;
5
import junit.framework.TestSuite;
6

  
7
/**
8
 * Unit test for simple App.
9
 */
10
public class AppTest 
11
    extends TestCase
12
{
13
    /**
14
     * Create the test case
15
     *
16
     * @param testName name of the test case
17
     */
18
    public AppTest( String testName )
19
    {
20
        super( testName );
21
    }
22

  
23
    /**
24
     * @return the suite of tests being tested
25
     */
26
    public static Test suite()
27
    {
28
        return new TestSuite( AppTest.class );
29
    }
30

  
31
    /**
32
     * Rigourous Test :-)
33
     */
34
    public void testApp()
35
    {
36
        assertTrue( true );
37
    }
38
}
modules/uoa-user-management/tags/uoa-user-management-2.0.0/src/test/java/eu/dnetlib/openaire/user/ldap/LDAPEnhancer.java
1
package eu.dnetlib.openaire.user.ldap;
2

  
3
import com.unboundid.ldap.sdk.*;
4
import eu.dnetlib.openaire.user.LDAPUser;
5
import org.junit.Before;
6
import org.junit.Test;
7

  
8
/**
9
 * Created by kiatrop on 27/9/2017.
10
 */
11
public class LDAPEnhancer {
12

  
13
    LDAPConnection ldapConnector;
14
    String ldapUsersDN;
15

  
16
    @Before
17
    public void init() throws LDAPException {
18
        ldapConnector = new LDAPConnection("esperos.di.uoa.gr", 389, "cn=admin,dc=openaire,dc=eu", "serenata");
19
        ldapUsersDN = "ou=users,dc=openaire,dc=eu";
20
    }
21

  
22
    @Test
23
    public void enhance() throws LDAPSearchException {
24
        Filter filter = Filter.createEqualityFilter("ou", "users");
25
        SearchRequest searchRequest = new SearchRequest(ldapUsersDN, SearchScope.SUBORDINATE_SUBTREE, filter);
26
        SearchResult searchResult = ldapConnector.search(searchRequest);
27

  
28
        for (SearchResultEntry entry : searchResult.getSearchEntries()) {
29
            System.out.println(entry.getAttribute("dn"));
30
        }
31
    }
32

  
33
    @Test
34
    public void getUserTest() throws LDAPSearchException {
35
            String usersDN =  "ou=users,dc=openaire,dc=eu";
36

  
37
                Filter filter = Filter.createEqualityFilter("cn","kiatrop");
38
                SearchRequest searchRequest =
39
                        new SearchRequest(usersDN, SearchScope.SUB, filter, "mail", "displayName", "cn");
40

  
41
                SearchResult searchResult = ldapConnector.search(searchRequest);
42
                LDAPUser user = new LDAPUser();
43

  
44
                for (SearchResultEntry entry : searchResult.getSearchEntries()) {
45
                    System.out.println(entry.getAttributeValue("cn"));
46
                    System.out.println(entry.getAttributeValue("mail"));
47
                    System.out.println(entry.getAttributeValue("displayName"));
48
                }
49
        }
50

  
51

  
52

  
53
}
modules/uoa-user-management/tags/uoa-user-management-2.0.0/src/main/java/eu/dnetlib/openaire/user/LDAPUser.java
1
package eu.dnetlib.openaire.user;
2

  
3
/**
4
 * Created by sofia on 29/11/2016.
5
 */
6
public class LDAPUser {
7

  
8
    private String cn;
9
    private String displayName;
10
    private String email;
11

  
12
    public LDAPUser(){
13
    }
14

  
15
    public LDAPUser(String cn, String displayName, String email)
16
    {
17

  
18
        this.cn = cn;
19
        this.displayName = displayName;
20
        this.email = email;
21
    }
22

  
23
    public String getCn() {
24
        return cn;
25
    }
26

  
27
    public void setCn(String cn) {
28
        this.cn = cn;
29
    }
30

  
31
    public String getDisplayName() {
32
        return displayName;
33
    }
34

  
35
    public void setDisplayName(String displayName) {
36
        this.displayName = displayName;
37
    }
38

  
39
    public String getEmail() {
40
        return email;
41
    }
42

  
43
    public void setEmail(String email) {
44
        this.email = email;
45
    }
46

  
47
}
modules/uoa-user-management/tags/uoa-user-management-2.0.0/src/main/java/eu/dnetlib/openaire/user/ldap/UserActionsLDAP.java
1
package eu.dnetlib.openaire.user.ldap;
2

  
3
import com.unboundid.ldap.sdk.*;
4
import org.apache.log4j.Logger;
5

  
6
import java.util.UUID;
7

  
8

  
9
/**
10
 * Created by sofia on 31/10/2016.
11
 */
12
public class UserActionsLDAP {
13

  
14
    transient Logger logger = Logger.getLogger(UserActionsLDAP.class);
15

  
16
    private int ldapPort = 0;
17
    private String ldapAddress;
18
    private String ldapUsername;
19
    private String ldapPassword;
20
    private String ldapUsersDN;
21

  
22
    public boolean activateUser(String activationId) throws Exception {
23
        LDAPConnection connection = null;
24
        try {
25
            logger.debug("activating user with activationId " + activationId);
26
            connection = new LDAPConnection(ldapAddress, ldapPort, ldapUsername, ldapPassword);
27
            Filter filter = Filter.createEqualityFilter("employeeNumber", activationId);
28
            SearchRequest searchRequest = new SearchRequest(ldapUsersDN, SearchScope.SUB, filter, "uid");
29
            SearchResult searchResult = connection.search(searchRequest);
30
            String dn = null;
31

  
32
            if ( searchResult.getSearchEntries().size() > 0	) {
33

  
34
                for (SearchResultEntry entry : searchResult.getSearchEntries()) {
35
                    dn = "uid=" + entry.getAttributeValue("uid") + "," + ldapUsersDN;
36
                }
37

  
38
                Modification mod1 = new Modification(ModificationType.REPLACE, "JoomlaBlockUser", "0");
39
                Modification mod2 = new Modification(ModificationType.REPLACE, "employeeNumber");
40
                connection.modify(dn, mod1, mod2);
41
                return true;
42
            } else {
43
                return false;
44
            }
45
        } catch (Exception e) {
46
            logger.error("", e);
47
            throw e;
48
        } finally {
49
            if (connection != null)
50
                connection.close();
51
        }
52
    }
53

  
54
    public String addUser(String email, String password) throws Exception {
55
        throw new UnsupportedOperationException();
56
    }
57

  
58
    public String addUser(String username, String email, String password, String firstName, String lastName) throws Exception {
59
        logger.debug("adding user " + username + " " + email + " to ldap");
60
        Attribute cn = new Attribute("cn", username);
61
        Attribute displayName = new Attribute("displayName", firstName + " " + lastName);
62
        Attribute mail = new Attribute("mail", email);
63
        Attribute givenName = new Attribute("givenName", firstName);
64
        Attribute joomlaBlockUser = new Attribute("JoomlaBlockUser", "1");
65
        Attribute joomlaGroup = new Attribute("JoomlaGroup", "Registered");
66
        Attribute objectClass = new Attribute("objectClass", "top", "inetOrgPerson", "JoomlaUser");
67
        Attribute userPassword = new Attribute("userPassword", Joomla15PasswordHash.create(password));
68
        Attribute sn = new Attribute("sn", lastName);
69
        Attribute uid = new Attribute("uid", username);
70
        // Attribute joomlaUserParams = new Attribute("JoomlaUserParams", "");
71
        String activationId = UUID.randomUUID().toString();
72
        Attribute x500UniqueIdentifier = new Attribute("employeeNumber", activationId);
73
        LDAPConnection connection = null;
74
        try {
75
            DN dn = new DN("uid=" + username + "," + ldapUsersDN);
76
            System.out.println("cn: " + cn + " displayName: " + displayName + " mail: " + mail + " givenName: " + givenName + " joomlaBlockUser: " + joomlaBlockUser + " joomlaGroup: " + joomlaGroup + " objectClass: " + objectClass + " userPassword: " + userPassword + " sn: " + sn + " uid: " + uid + " x500UniqueIdentifier: " + x500UniqueIdentifier);
77
            Entry entry = new Entry(dn.toNormalizedString(), cn, displayName, mail, givenName, joomlaBlockUser, joomlaGroup, objectClass, userPassword, sn, uid/*
78
																																								 * ,
79
																																								 * joomlaUserParams
80
																																								 */, x500UniqueIdentifier);
81
            connection = new LDAPConnection(ldapAddress, ldapPort, ldapUsername, ldapPassword);
82
            connection.add(entry);
83

  
84
            return activationId;
85
        } catch (Exception e) {
86
            logger.error("", e);
87
            throw e;
88
        } finally {
89
            if (connection != null)
90
                connection.close();
91
        }
92
    }
93

  
94
    public boolean correctCreds(String email, String password) throws Exception {
95
        LDAPConnection connection = null;
96
        try {
97
            logger.debug("checking if user " + email + " entered a correct password when logging in");
98
            connection = new LDAPConnection(ldapAddress, ldapPort, ldapUsername, ldapPassword);
99
            Filter filter = Filter.createEqualityFilter("mail", email);
100
            SearchRequest searchRequest = new SearchRequest(ldapUsersDN, SearchScope.SUB, filter, "userPassword");
101
            SearchResult searchResult = connection.search(searchRequest);
102
            for (SearchResultEntry entry : searchResult.getSearchEntries()) {
103
                if (Joomla15PasswordHash.check(password, entry.getAttributeValue("userPassword")))
104
                    return true;
105
            }
106
            return false;
107
        } catch (Exception e) {
108
            logger.error("", e);
109
            throw e;
110
        } finally {
111
            if (connection != null)
112
                connection.close();
113
        }
114
    }
115

  
116
    public void editUser(String email, String fname, String lname, String inst) throws Exception {
117
        LDAPConnection connection = null;
118
        try {
119
            logger.debug("editing user " + email);
120
            connection = new LDAPConnection(ldapAddress, ldapPort, ldapUsername, ldapPassword);
121
            Filter filter = Filter.createEqualityFilter("mail", email);
122
            SearchRequest searchRequest = new SearchRequest(ldapUsersDN, SearchScope.SUB, filter, "uid");
123
            SearchResult searchResult = connection.search(searchRequest);
124
            String dn = null;
125
            for (SearchResultEntry entry : searchResult.getSearchEntries()) {
126
                dn = "uid=" + entry.getAttributeValue("uid") + "," + ldapUsersDN;
127
            }
128
            Modification mod1 = new Modification(ModificationType.REPLACE, "displayName", fname + " " + lname);
129
            Modification mod2 = new Modification(ModificationType.REPLACE, "givenName", fname);
130
            Modification mod3 = new Modification(ModificationType.REPLACE, "sn", lname);
131
            Modification mod4 = new Modification(ModificationType.REPLACE, "o", inst);
132
            connection.modify(dn, mod1, mod2, mod3, mod4);
133
        } catch (Exception e) {
134
            logger.error("", e);
135
            throw e;
136
        } finally {
137
            if (connection != null)
138
                connection.close();
139
        }
140
    }
141

  
142
    /*
143
    @Override
144
    public eu.dnetlib.openaire.user.user.UserProfile getUser(String userIdentifier) throws Exception {
145
        LDAPConnection connection = null;
146
        try {
147
            logger.debug("getting user " + userIdentifier + " from ldap");
148
            connection = new LDAPConnection(ldapAddress, ldapPort, ldapUsername, ldapPassword);
149
            Filter filter = Filter.createEqualityFilter("mail", userIdentifier);
150
            SearchRequest searchRequest = new SearchRequest(ldapUsersDN, SearchScope.SUB, filter, "mail", "givenName", "sn", "o", "uid");
151
            SearchResult searchResult = connection.search(searchRequest);
152
            UserProfileIS profile = new UserProfileIS();
153
            for (SearchResultEntry entry : searchResult.getSearchEntries()) {
154
                profile.setEmail(entry.getAttributeValue("mail"));
155
                profile.setFname(entry.getAttributeValue("givenName"));
156
                profile.setLname(entry.getAttributeValue("sn"));
157
                profile.setInstitution(entry.getAttributeValue("o"));
158
                profile.setUsername(entry.getAttributeValue("uid"));
159
            }
160
            return profile;
161
        } catch (Exception e) {
162
            logger.error("", e);
163
            throw e;
164
        } finally {
165
            if (connection != null)
166
                connection.close();
167
        }
168
    }*/
169

  
170
    public boolean isAdmin(String email) throws Exception {
171
        LDAPConnection connection = null;
172
        try {
173
            logger.debug("checking if user " + email + " is an administrator");
174
            connection = new LDAPConnection(ldapAddress, ldapPort, ldapUsername, ldapPassword);
175
            Filter filter = Filter.createEqualityFilter("mail", email);
176
            SearchRequest searchRequest = new SearchRequest(ldapUsersDN, SearchScope.SUB, filter, "JoomlaGroup");
177
            SearchResult searchResult = connection.search(searchRequest);
178

  
179
            for (SearchResultEntry entry : searchResult.getSearchEntries()) {
180
                for (String role : entry.getAttributeValues("JoomlaGroup"))
181
                    if (role.equals("validatorAdmin"))
182
                        return true;
183
            }
184
            logger.debug(email + " is not administrator");
185
            return false;
186
        } catch (Exception e) {
187
            logger.error("", e);
188
            throw e;
189
        } finally {
190
            if (connection != null)
191
                connection.close();
192
        }
193
    }
194

  
195
    public boolean isUserActivated(String email) throws Exception {
196
        LDAPConnection connection = null;
197
        try {
198
            logger.debug("checking if user " + email + " is activated");
199
            connection = new LDAPConnection(ldapAddress, ldapPort, ldapUsername, ldapPassword);
200
            Filter filter = Filter.createEqualityFilter("mail", email);
201
            SearchRequest searchRequest = new SearchRequest(ldapUsersDN, SearchScope.SUB, filter, "JoomlaBlockUser");
202
            SearchResult searchResult = connection.search(searchRequest);
203
            for (SearchResultEntry entry : searchResult.getSearchEntries()) {
204
                int val = entry.getAttributeValueAsInteger("JoomlaBlockUser");
205
                if (val == 0)
206
                    return true;
207
                else
208
                    return false;
209
            }
210
        } catch (Exception e) {
211
            logger.error("", e);
212
            throw e;
213
        } finally {
214
            if (connection != null)
215
                connection.close();
216
        }
217
        return false;
218
    }
219

  
220
    public String prepareResetPassword(String email) throws Exception {
221
        LDAPConnection connection = null;
222
        try {
223
            logger.debug("preparing reset password for user " + email);
224
            connection = new LDAPConnection(ldapAddress, ldapPort, ldapUsername, ldapPassword);
225
            Filter filter = Filter.createEqualityFilter("mail", email);
226
            SearchRequest searchRequest = new SearchRequest(ldapUsersDN, SearchScope.SUB, filter, "uid");
227
            SearchResult searchResult = connection.search(searchRequest);
228
            String dn = null;
229
            for (SearchResultEntry entry : searchResult.getSearchEntries()) {
230
                dn = "uid=" + entry.getAttributeValue("uid") + "," + ldapUsersDN;
231
            }
232
            String uuid = UUID.randomUUID().toString();
233
            Modification mod = new Modification(ModificationType.REPLACE, "employeeNumber", uuid);
234
            connection.modify(dn, mod);
235
            return uuid;
236
        } catch (Exception e) {
237
            logger.error("", e);
238
            throw e;
239
        } finally {
240
            if (connection != null)
241
                connection.close();
242
        }
243
    }
244

  
245
    public void resetPassword(String uuid, String password) throws Exception {
246
        LDAPConnection connection = null;
247
        try {
248
            connection = new LDAPConnection(ldapAddress, ldapPort, ldapUsername, ldapPassword);
249
            Filter filter = Filter.createEqualityFilter("employeeNumber", uuid);
250
            SearchRequest searchRequest = new SearchRequest(ldapUsersDN, SearchScope.SUB, filter, "uid");
251
            SearchResult searchResult = connection.search(searchRequest);
252
            String dn = null;
253
            for (SearchResultEntry entry : searchResult.getSearchEntries()) {
254
                dn = "uid=" + entry.getAttributeValue("uid") + "," + ldapUsersDN;
255
            }
256
            Modification mod1 = new Modification(ModificationType.REPLACE, "userPassword", Joomla15PasswordHash.create(password));
257
            Modification mod2 = new Modification(ModificationType.REPLACE, "employeeNumber");
258
            connection.modify(dn, mod1, mod2);
259
        } catch (Exception e) {
260
            logger.error("", e);
261
            throw e;
262
        } finally {
263
            if (connection != null)
264
                connection.close();
265
        }
266
    }
267

  
268
    public boolean userExists(String email) throws Exception {
269
        LDAPConnection connection = null;
270
        try {
271
            logger.debug("checking if user " + email + " exists in ldap");
272
            connection = new LDAPConnection(ldapAddress, ldapPort, ldapUsername, ldapPassword);
273
            Filter filter = Filter.createEqualityFilter("mail", email);
274
            SearchRequest searchRequest = new SearchRequest(ldapUsersDN, SearchScope.SUB, filter, "mail");
275

  
276
            SearchResult searchResult = connection.search(searchRequest);
277
            if (!searchResult.getSearchEntries().isEmpty())
278
                return true;
279

  
280
            return false;
281
        } catch (Exception e) {
282
            logger.error("", e);
283
            throw e;
284
        } finally {
285
            if (connection != null)
286
                connection.close();
287
        }
288
    }
289

  
290
    public boolean usernameExists(String username) throws Exception {
291
        LDAPConnection connection = null;
292
        try {
293
            logger.debug("checking if user " + username + " exists in ldap");
294
            connection = new LDAPConnection(ldapAddress, ldapPort, ldapUsername, ldapPassword);
295
            Filter filter = Filter.createEqualityFilter("uid", username);
296
            SearchRequest searchRequest = new SearchRequest(ldapUsersDN, SearchScope.SUB, filter, "uid");
297
            SearchResult searchResult = connection.search(searchRequest);
298

  
299
            if (!searchResult.getSearchEntries().isEmpty()) {
300
                return true;
301
            }
302

  
303
            return false;
304
        } catch (Exception e) {
305
            logger.error("", e);
306
            throw e;
307
        } finally {
308
            if (connection != null)
309
                connection.close();
310
        }
311
    }
312

  
313
    public String getEmailFromUsername(String username) throws Exception {
314
        LDAPConnection connection = null;
315
        try {
316
            logger.debug("getting email for user " + username);
317
            connection = new LDAPConnection(ldapAddress, ldapPort, ldapUsername, ldapPassword);
318
            Filter filter = Filter.createEqualityFilter("uid", username);
319
            SearchRequest searchRequest = new SearchRequest(ldapUsersDN, SearchScope.SUB, filter, "mail");
320
            SearchResult searchResult = connection.search(searchRequest);
321
            for (SearchResultEntry entry : searchResult.getSearchEntries()) {
322
                return entry.getAttributeValue("mail");
323
            }
324
            return null;
325
        } catch (Exception e) {
326
            logger.error("", e);
327
            throw e;
328
        } finally {
329
            if (connection != null)
330
                connection.close();
331
        }
332
    }
333

  
334
    public String getUsername(String email) throws LDAPException {
335

  
336
        LDAPConnection ldapConnection = new LDAPConnection(ldapAddress, ldapPort, ldapUsername, ldapPassword);
337

  
338
        Filter filter = Filter.createEqualityFilter("mail", email);
339
        SearchRequest searchRequest = new SearchRequest("dc=openaire,dc=eu", SearchScope.SUB, filter, "uid");
340

  
341
        SearchResult searchResult = ldapConnection.search(searchRequest);
342

  
343
        if (searchResult.getSearchEntries() != null) {
344
            if (searchResult.getSearchEntries().size() > 1) {
345
                logger.warn("An email is used for two different usernames! We only keep the first one");
346
            }
347

  
348
            if (searchResult.getSearchEntries().get(0) != null) {
349
                return searchResult.getSearchEntries().get(0).getAttributeValue("uid");
350
            }
351
        }
352

  
353
        return null;
354
    }
355

  
356
    public void setLdapPort(int ldapPort) {
357
        this.ldapPort = ldapPort;
358
    }
359

  
360
    public void setLdapAddress(String ldapAddress) {
361
        this.ldapAddress = ldapAddress;
362
    }
363

  
364
    public void setLdapUsername(String ldapUsername) {
365
        this.ldapUsername = ldapUsername;
366
    }
367

  
368
    public void setLdapPassword(String ldapPassword) {
369
        this.ldapPassword = ldapPassword;
370
    }
371

  
372
    public void setLdapUsersDN(String ldapUsersDN) {
373
        this.ldapUsersDN = ldapUsersDN;
374
    }
375

  
376

  
377
    public static void main(String[] args) {
378

  
379
        UserActionsLDAP ldap =  new UserActionsLDAP();
380

  
381
        String ldapAddress = "esperos.di.uoa.gr";
382
        String ldapUsername = "cn=admin,dc=openaire,dc=eu";
383
        String ldapPassword = "serenata";
384
        String ldapUsersDN = "ou=users,dc=openaire,dc=eu";
385
        int ldapPort = 389;
386

  
387
        ldap.setLdapAddress(ldapAddress);
388
        ldap.setLdapUsername(ldapUsername);
389
        ldap.setLdapPassword(ldapPassword);
390
        ldap.setLdapUsersDN(ldapUsersDN);
391
        ldap.setLdapPort(ldapPort);
392

  
393

  
394

  
395
        // CHECK: usernameExists(uid)
396
        // TERMINAL: ldapsearch -x -LLL -h esperos.di.uoa.gr -b dc=openaire,dc=eu dn
397

  
398
//        try {
399
//            if (ldap.usernameExists("ngasparis"))
400
//                System.out.println("username exists");
401
//            else
402
//                System.out.println("username doesn't exist");
403
//
404
//        } catch (Exception e) {
405
//            e.printStackTrace();
406
//        }
407

  
408

  
409
        // CHECK: userExists(mail)
410
        // TERMINAL: ldapsearch -x -LLL -h esperos.di.uoa.gr -b dc=openaire,dc=eu mail
411

  
412
//        try {
413
//            if (ldap.userExists("n.gasparis@di.uoa.gr"))
414
//                System.out.println("user exists");
415
//            else
416
//                System.out.println("user doesn't exist");
417
//        } catch (Exception e) {
418
//            e.printStackTrace();
419
//        }
420

  
421

  
422
        // CHECK: isUserActivated(mail)
423
        // TODO not sure!
424
        // TERMINAL: ldapsearch -x -LLL -h esperos.di.uoa.gr -b dc=openaire,dc=eu mail
425

  
426
//        try {
427
//            if (ldap.isUserActivated("n.gasparis@di.uoa.gr"))
428
//                System.out.println("user is activated");
429
//            else
430
//                System.out.println("user isn't activated");
431
//        } catch (Exception e) {
432
//            e.printStackTrace();
433
//        }
434

  
435

  
436
        // CHECK: getUser(mail)
437
        // TERMINAL(mail): ldapsearch -x -LLL -h esperos.di.uoa.gr -b dc=openaire,dc=eu mail
438
        // TERMINAL(firstname): ldapsearch -x -LLL -h esperos.di.uoa.gr -b dc=openaire,dc=eu givenName
439
        // TERMINAL(lastname): ldapsearch -x -LLL -h esperos.di.uoa.gr -b dc=openaire,dc=eu sn
440
        // TERMINAL(institution): ldapsearch -x -LLL -h esperos.di.uoa.gr -b dc=openaire,dc=eu o
441
        // TERMINAL(username): ldapsearch -x -LLL -h esperos.di.uoa.gr -b dc=openaire,dc=eu uid
442

  
443
//        try {
444
//            gr.uoa.di.validator.api.user.UserProfileIS userProfile = (gr.uoa.di.validator.api.user.UserProfileIS) ldap.getUser("n.gasparis@di.uoa.gr");
445
//            System.out.println("User with Firstname: "        + userProfile.getFname() +
446
//                                  "\n          Lastname: "    + userProfile.getLname() +
447
//                                  "\n          Username: "    + userProfile.getUsername() +
448
//                                  "\n          Email: "       + userProfile.getEmail() +
449
//                                  "\n          Institution: " + userProfile.getInstitution());
450
//
451
//        } catch (Exception e) {
452
//            e.printStackTrace();
453
//        }
454

  
455
        // CHECK: getEmailFromUsername(username)
456
        // ldapsearch -x -LLL -h esperos.di.uoa.gr -b dc=openaire,dc=eu mail
457

  
458
//        try {
459
//            if (ldap.usernameExists("user is adminngasparis")) {
460
//                String email = ldap.getEmailFromUsername("ngasparis");
461
//                System.out.println("username exists with email: " + email);
462
//            }
463
//            else
464
//                System.out.println("username doesn't exist");
465
//
466
//        } catch (Exception e) {
467
//            e.printStackTrace();
468
//        }
469

  
470
        // CHECK: isAdmin(mail)
471
        // TODO not sure
472

  
473
//        try {
474
//            if (ldap.isAdmin("n.gasparis@di.uoa.gr"))
475
//                System.out.println("user is admin");
476
//            else
477
//                System.out.println("user isn't admin");
478
//        } catch (Exception e) {
479
//            e.printStackTrace();
480
//        }
481

  
482
        // CHECK: addUser(username, email, password, firstname, lastname)
483
        // TERMINAL (check only): ldapsearch -x -LLL -h esperos.di.uoa.gr -b dc=openaire,dc=eu dn
484
//
485
//        try {
486
//            String activationId = ldap.addUser("sbaltzi", "sbaltzi@di.uoa.gr", "12345678", "sofia", "baltzi");
487
//            System.out.println("Added user with activation id:" + activationId);
488
//            gr.uoa.di.validator.api.user.UserProfileIS userProfile = (gr.uoa.di.validator.api.user.UserProfileIS) ldap.getUser("sbaltzi@di.uoa.gr");
489
//            System.out.println("User with Firstname: "        + userProfile.getFname() +
490
//                                  "\n          Lastname: "    + userProfile.getLname() +
491
//                                  "\n          Username: "    + userProfile.getUsername() +
492
//                                  "\n          Email: "       + userProfile.getEmail() +
493
//                                  "\n          Institution: " + userProfile.getInstitution());
494
//
495
//        } catch (Exception e) {
496
//            e.printStackTrace();
497
//        }
498

  
499
        // CHECK: correctCreds(mail, password)
500

  
501
//        try {
502
//            if (ldap.correctCreds("sbaltzi@di.uoa.gr", "12345678"))
503
//                System.out.println("correct credentials");
504
//            else
505
//                System.out.println("wrong credentials");
506
//        } catch (Exception e) {
507
//            e.printStackTrace();
508
//        }
509

  
510

  
511
        // CHECK: editUser()
512
        // TERMINAL(mail): ldapsearch -x -LLL -h esperos.di.uoa.gr -b dc=openaire,dc=eu mail
513
        // TERMINAL(firstname): ldapsearch -x -LLL -h esperos.di.uoa.gr -b dc=openaire,dc=eu givenName
514
        // TERMINAL(lastname): ldapsearch -x -LLL -h esperos.di.uoa.gr -b dc=openaire,dc=eu sn
515
        // TERMINAL(institution): ldapsearch -x -LLL -h esperos.di.uoa.gr -b dc=openaire,dc=eu o
516
        // TERMINAL(username): ldapsearch -x -LLL -h esperos.di.uoa.gr -b dc=openaire,dc=eu uid
517

  
518
//        try {
519
//            ldap.editUser("sbaltzi@di.uoa.gr", "sofie", "baltzi", "di");
520
//            gr.uoa.di.validator.api.user.UserProfileIS userProfile = (gr.uoa.di.validator.api.user.UserProfileIS) ldap.getUser("sbaltzi@di.uoa.gr");
521
//            System.out.println("User with Firstname: "        + userProfile.getFname() +
522
//                                  "\n          Lastname: "    + userProfile.getLname() +
523
//                                  "\n          Username: "    + userProfile.getUsername() +
524
//                                  "\n          Email: "       + userProfile.getEmail() +
525
//                                  "\n          Institution: " + userProfile.getInstitution());
526
//
527
//        } catch (Exception e) {
528
//            e.printStackTrace();
529
//        }
530

  
531
        // CHECK: prepareResetPassword(mail)
532
        // CHECK: resetPassword(mail, newpassword)
533

  
534
//        try {
535
//            String uuid = ldap.prepareResetPassword("sbaltzi@di.uoa.gr");
536
//            System.out.println("uuid is " + uuid);
537
//            ldap.resetPassword(uuid, "12345678");
538
//            if (ldap.correctCreds("sbaltzi@di.uoa.gr", "12345678"))
539
//                System.out.println("correct credentials");
540
//            else
541
//                System.out.println("wrong credentials");
542
//        } catch (Exception e) {
543
//            e.printStackTrace();
544
//        }
545

  
546
    }
547
}
modules/uoa-user-management/tags/uoa-user-management-2.0.0/src/main/java/eu/dnetlib/openaire/user/ldap/MUserActionsLDAP.java
1
package eu.dnetlib.openaire.user.ldap;
2

  
3
import com.unboundid.ldap.sdk.*;
4
import eu.dnetlib.openaire.user.LDAPUser;
5
import eu.dnetlib.openaire.user.MigrationUser;
6
import eu.dnetlib.openaire.user.Role;
7
import eu.dnetlib.openaire.user.dao.RoleDAO;
8
import eu.dnetlib.openaire.user.dao.SQLMigrationUserDAO;
9
import eu.dnetlib.openaire.user.store.LDAPConnector;
10
import org.apache.log4j.Logger;
11
import org.springframework.beans.factory.annotation.Autowired;
12

  
13
import java.sql.SQLException;
14

  
15
/**
16
 * Created by sofia on 7/11/2016.
17
 */
18
public class MUserActionsLDAP {
19

  
20
    @Autowired
21
    private LDAPConnector ldapConnector;
22

  
23
    private static final Logger logger = Logger.getLogger(MUserActionsLDAP.class);
24

  
25
    public  boolean authenticate(String cn, String password) throws LDAPException {
26
        LDAPConnection connection = ldapConnector.getConnection();
27
        String usersDN = ldapConnector.getUsersDN();
28

  
29
        try {
30
            logger.debug("checking if user " + cn + " entered a correct password when logging in");
31

  
32
            Filter filter = Filter.createEqualityFilter("cn", cn);
33

  
34
            SearchRequest searchRequest = new SearchRequest(usersDN, SearchScope.SUB, filter, "userPassword");
35
            SearchResult searchResult = connection.search(searchRequest);
36

  
37
            for (SearchResultEntry entry : searchResult.getSearchEntries()) {
38
                if (Joomla15PasswordHash.check(password, entry.getAttributeValue("userPassword")))
39
                    return true;
40
            }
41

  
42
            return false;
43
        }
44
        finally {
45
            if (connection != null)
46
                connection.close();
47
        }
48
    }
49

  
50
    public boolean usernameExists(String username) throws LDAPException
51
    {
52

  
53
        logger.debug("checking if username " + username + " exists");
54
        LDAPConnection connection = ldapConnector.getConnection();
55
        String usersDN = ldapConnector.getUsersDN();
56

  
57
        try {
58
            logger.debug("checking if username " + username + " exists");
59

  
60
            Filter filter = Filter.createEqualityFilter("cn", username);
61

  
62
            SearchRequest searchRequest = new SearchRequest(usersDN, SearchScope.SUB, filter, "cn");
63
            SearchResult searchResult = connection.search(searchRequest);
64

  
65
            if (!searchResult.getSearchEntries().isEmpty()) {
66
                logger.debug("User exists.");
67
                return true;
68
            }
69
            logger.debug("User does not exist.");
70
            return false;
71
        }
72
        finally {
73
            if (connection != null)
74
                connection.close();
75
        }
76
    }
77

  
78
    public boolean authenticateUser(String email, String password) throws LDAPException {
79
        LDAPConnection connection = ldapConnector.getConnection();
80
        String usersDN = ldapConnector.getUsersDN();
81

  
82
        try {
83
            logger.debug("checking if user " + email + " entered a correct password when logging in");
84
            Filter filter = Filter.createEqualityFilter("mail", email);
85

  
86
            SearchRequest searchRequest = new SearchRequest(usersDN, SearchScope.SUB, filter, "userPassword");
87
            SearchResult searchResult = connection.search(searchRequest);
88

  
89
            for (SearchResultEntry entry : searchResult.getSearchEntries()) {
90
                if (Joomla15PasswordHash.check(password, entry.getAttributeValue("userPassword")))
91
                    logger.debug("User exists.");
92
                    return true;
93
            }
94

  
95
            logger.debug("User does not exist.");
96
            return false;
97
        }
98
        finally {
99
            if (connection != null)
100
                connection.close();
101
        }
102
    }
103

  
104
    public String getRole(String email, String password) throws LDAPException, SQLException {
105

  
106
        boolean authenticated = authenticateUser(email, password);
107

  
108
        if (authenticated)
109
        {
110
            SQLMigrationUserDAO muDAO = new SQLMigrationUserDAO();
111
            MigrationUser mUser = new MigrationUser();
112
            mUser = muDAO.fetchByEmail(email);
113
            RoleDAO roleDAO = new RoleDAO();
114
            Role role = roleDAO.fetchById(mUser.getRoleId());
115
            return role.getRole();
116
        }
117
        return null;
118
    }
119

  
120
    public LDAPUser getUser(String username) throws LDAPException {
121

  
122
        LDAPConnection connection = ldapConnector.getConnection();
123
        String usersDN = ldapConnector.getUsersDN();
124

  
125
        try {
126

  
127
            logger.debug("getting user " + username + " from ldap");
128
            Filter filter = Filter.createEqualityFilter("cn",username);
129
            SearchRequest searchRequest =
130
                    new SearchRequest(usersDN, SearchScope.SUB, filter, "mail", "displayName", "cn");
131

  
132
            SearchResult searchResult = connection.search(searchRequest);
133
            LDAPUser user = new LDAPUser();
134

  
135
            for (SearchResultEntry entry : searchResult.getSearchEntries()) {
136
                user.setCn(entry.getAttributeValue("cn"));
137
                user.setEmail(entry.getAttributeValue("mail"));
138
                user.setDisplayName(entry.getAttributeValue("displayName"));
139
            }
140
            logger.debug("Cn = " + user.getCn() + " mail = " + user.getEmail() + " displayName = " + user.getDisplayName());
141
            return user;
142

  
143
        } finally {
144
            if (connection != null)
145
                connection.close();
146
        }
147
    }
148

  
149
}
modules/uoa-user-management/tags/uoa-user-management-2.0.0/src/main/java/eu/dnetlib/openaire/user/ldap/Joomla15PasswordHash.java
1
package eu.dnetlib.openaire.user.ldap;
2

  
3
import com.unboundid.util.Base64;
4

  
5
import java.security.GeneralSecurityException;
6
import java.security.MessageDigest;
7
import java.util.Random;
8

  
9
/**
10
 * Created by sofia on 31/10/2016.
11
 */
12
public class Joomla15PasswordHash {
13

  
14
    public static boolean check(String passwd,String dbEntry) {
15
        String hashed = "{MD5}"+ Base64.encode(pack(Joomla15PasswordHash.md5(passwd)));
16
        if(dbEntry.equals(hashed))
17
            return true;
18
        else
19
            return false;
20
    }
21

  
22
    static Random _rnd;
23

  
24
    public static String create(String passwd) {
25
        return "{MD5}"+Base64.encode(pack(Joomla15PasswordHash.md5(passwd)));
26
    }
27

  
28
    /** Takes the MD5 hash of a sequence of ASCII or LATIN1 characters,
29
     *  and returns it as a 32-character lowercase hex string.
30
     *
31
     *  Equivalent to MySQL's MD5() function
32
     *  and to perl's Digest::MD5::md5_hex(),
33
     *  and to PHP's md5().
34
     *
35
     *  Does no error-checking of the input,  but only uses the low 8 bits
36
     *  from each input character.
37
     */
38
    public static String md5(String data) {
39
        byte[] bdata = new byte[data.length()]; int i; byte[] hash;
40

  
41
        for (i=0;i<data.length();i++) bdata[i]=(byte)(data.charAt(i)&0xff );
42

  
43
        try {
44
            MessageDigest md5er = MessageDigest.getInstance("MD5");
45
            hash = md5er.digest(bdata);
46
        } catch (GeneralSecurityException e) { throw new RuntimeException(e); }
47

  
48
        StringBuffer r = new StringBuffer(32);
49
        for (i=0;i<hash.length;i++) {
50
            String x = Integer.toHexString(hash[i]&0xff);
51
            if (x.length()<2) r.append("0");
52
            r.append(x);
53
        }
54
        return r.toString();
55
    }
56

  
57
    public static byte[] pack(String md5) {
58
        byte[] bytes = new byte[16];
59
        int j = 0;
60
        for(int i=0; i < 31; i+=2) {
61
            bytes[j] = (byte) Integer.parseInt(md5.charAt(i)+""+md5.charAt(i+1),16);
62
            j++;
63
        }
64
        return bytes;
65
    }
66
}
modules/uoa-user-management/tags/uoa-user-management-2.0.0/src/main/java/eu/dnetlib/openaire/user/utils/LDAPActions.java
1
package eu.dnetlib.openaire.user.utils;
2

  
3
import com.unboundid.ldap.sdk.*;
4
import com.unboundid.ldap.sdk.extensions.PasswordModifyExtendedRequest;
5
import com.unboundid.ldap.sdk.extensions.PasswordModifyExtendedResult;
6

  
7
import eu.dnetlib.openaire.user.store.LDAPConnector;
8

  
9
import org.apache.commons.validator.routines.EmailValidator;
10
import org.apache.log4j.Logger;
11
import org.springframework.beans.factory.annotation.Autowired;
12

  
13
import java.util.ArrayList;
14
import java.util.List;
15

  
16
/**
17
 * Created by kiatrop on 29/9/2017.
18
 */
19

  
20
public class LDAPActions {
21

  
22
    private LDAPConnector ldapConnector;
23

  
24
    private Logger logger = Logger.getLogger(LDAPConnector.class);
25

  
26
    public String getUsername(String email) throws LDAPException {
27
        Filter filter = Filter.createEqualityFilter("mail", email);
28
        SearchRequest searchRequest = new SearchRequest("dc=openaire,dc=eu", SearchScope.SUB, filter, "uid");
29
        SearchResult searchResult = ldapConnector.getConnection().search(searchRequest);
30

  
31
        if (searchResult.getSearchEntries() != null) {
32
            if (searchResult.getSearchEntries().size() > 1) {
33
                logger.warn("An email is used for two different usernames! We only keep the first one.");
34
            }
35

  
36
            if (searchResult.getSearchEntries().size() == 0) {
37
                return null;
38
            }
39

  
40
            if (searchResult.getSearchEntries().get(0) != null) {
41
                return searchResult.getSearchEntries().get(0).getAttributeValue("uid");
42
            }
43
        }
44

  
45
        return null;
46
    }
47

  
48
    public Entry createUser(String username, String email, String firstName, String lastName, String institution, String password) throws Exception {
49

  
50
        if(!username.matches("^[a-zA-Z0-9][a-zA-Z0-9_-]{4,150}")){
51
            throw new CustomLDAPException("Invalid username!");
52
        }
53

  
54
        if(!EmailValidator.getInstance().isValid(email)){
55
            throw new CustomLDAPException("Invalid email!");
56
        }
57

  
58
        Filter uidFilter = Filter.createEqualityFilter("uid", username);
59
        SearchRequest uidRequest = new SearchRequest("dc=openaire,dc=eu", SearchScope.SUB, uidFilter, "cn", "mail", "uid", "objectClass");
60

  
61
        Filter mailFilter = Filter.createEqualityFilter("mail", email);
62
        SearchRequest mailRequest = new SearchRequest("dc=openaire,dc=eu", SearchScope.SUB, mailFilter, "cn", "mail", "uid", "objectClass");
63

  
64
        SearchResult searchResult = ldapConnector.getConnection().search(uidRequest);
65
        if(!searchResult.getSearchEntries().isEmpty()){
66
            throw new CustomLDAPException("Username " + username + " already exists!");
67
        }
68
        searchResult = ldapConnector.getConnection().search(mailRequest);
69
        if(!searchResult.getSearchEntries().isEmpty()){
70
            throw new CustomLDAPException("Email " + email + " already exists!");
71
        }
72

  
73
        Entry entry = new Entry("dn: uid=" + username + ",ou=users,dc=openaire,dc=eu",
74
                "objectClass: inetOrgPerson",
75
                "objectClass: eduPerson",
76
                "cn: "  + username,
77
                "uid: " + username,
78
                "displayName: " + firstName + " " + lastName,
79
                "mail: " + email,
80
                "givenName: " + firstName,
81
                "sn: " + lastName,
82
                "eduPersonPrincipalName: " + username + "@openaire.eu");
83
        if(institution != null && !institution.isEmpty()) {
84
            entry.addAttribute("o", institution);
85
        }
86
        ldapConnector.getConnection().add(entry);
87
        PasswordModifyExtendedRequest passwordModifyExtendedRequest = new PasswordModifyExtendedRequest(entry.getDN(), (String) null, password);
88
        PasswordModifyExtendedResult passwordModifyResult = (PasswordModifyExtendedResult) ldapConnector.getConnection().processExtendedOperation(passwordModifyExtendedRequest);
89
        logger.info("User: " + username + " was created successfully!");
90

  
91
        return entry;
92
    }
93

  
94
    public void updateUser(String username, String email, String firstName, String lastName, String password) throws Exception {
95
        SearchRequest searchRequest = new SearchRequest("dc=openaire,dc=eu", SearchScope.SUB, Filter.createEqualityFilter("uid", username), "mail", "givenName", "sn", "displayName");
96
        SearchResult searchResult = ldapConnector.getConnection().search(searchRequest);
97
        List<Modification> mods = new ArrayList<>();
98

  
99
        if (!searchResult.getSearchEntries().isEmpty()) {
100
            Entry entry = searchResult.getSearchEntries().get(0);
101
            if(!entry.getAttributeValue("mail").equals(email)){
102
                if(!EmailValidator.getInstance().isValid(email)){
103
                    throw new CustomLDAPException("Invalid email!");
104
                }
105
                Filter uidFilter = Filter.createEqualityFilter("uid", username);
106
                Filter mailFilter = Filter.createEqualityFilter("mail", email);
107
                SearchRequest mailRequest = new SearchRequest("dc=openaire,dc=eu", SearchScope.SUB, Filter.createANDFilter(mailFilter, Filter.createNOTFilter(uidFilter)), "mail", "givenName", "sn", "displayName");
108
                SearchResult mailResult = ldapConnector.getConnection().search(mailRequest);
109
                if(!mailResult.getSearchEntries().isEmpty()){
110
                    throw new CustomLDAPException("Email " + email + " already in use!");
111
                }
112
                mods.add(new Modification(ModificationType.REPLACE, "mail", email));
113
            }
114
            if(entry.getAttributeValue("givenName") == null){
115
                mods.add(new Modification(ModificationType.ADD, "givenName", firstName));
116
            } else if(!entry.getAttributeValue("givenName").equals(firstName)){
117
                mods.add(new Modification(ModificationType.REPLACE, "givenName", firstName));
118
            }
119
            if(entry.getAttributeValue("sn") == null){
120
                mods.add(new Modification(ModificationType.ADD, "sn", lastName));
121
            } else if(!entry.getAttributeValue("sn").equals(lastName)){
122
                mods.add(new Modification(ModificationType.REPLACE, "sn", lastName));
123
            }
124
            if(entry.getAttributeValue("displayName") == null) {
125
                mods.add(new Modification(ModificationType.ADD, "displayName", firstName + " " + lastName));
126
            } else if (!entry.getAttributeValue("displayName").equals(firstName + " " + lastName)) {
127
                mods.add(new Modification(ModificationType.REPLACE, "displayName", firstName + " " + lastName));
128
            }
129

  
130
            //mods.add(new Modification(ModificationType.REPLACE, "userPassword",password));
131
            if(!mods.isEmpty()) {
132
                ldapConnector.getConnection().modify(entry.getDN(), mods);
133
            }
134
            PasswordModifyExtendedRequest passwordModifyExtendedRequest = new PasswordModifyExtendedRequest(entry.getDN(), (String) null, password);
135
            PasswordModifyExtendedResult passwordModifyResult = (PasswordModifyExtendedResult) ldapConnector.getConnection().processExtendedOperation(passwordModifyExtendedRequest);
136
        } else {
137
            throw new CustomLDAPException("Username " + username + " not found!");
138
        }
139
    }
140

  
141
//    public void resetPassword(String username, String email, String password) throws Exception {
142
//        SearchRequest searchRequest = new SearchRequest("dc=openaire,dc=eu", SearchScope.SUB, Filter.createEqualityFilter("uid", username), "mail");
143
//        SearchResult searchResult = ldapConnector.getConnection().search(searchRequest);
144
//        List<Modification> mods = new ArrayList<>();
145
//
146
//        if (!searchResult.getSearchEntries().isEmpty()) {
147
//            Entry entry = searchResult.getSearchEntries().get(0);
148
//            if(!entry.getAttributeValue("mail").equals(email)){
149
//                if(!EmailValidator.getInstance().isValid(email)){
150
//                    throw new CustomLDAPException("Invalid email!");
151
//                }
152
//                Filter uidFilter = Filter.createEqualityFilter("uid", username);
153
//                Filter mailFilter = Filter.createEqualityFilter("mail", email);
154
//                SearchRequest mailRequest = new SearchRequest("dc=openaire,dc=eu", SearchScope.SUB, Filter.createANDFilter(mailFilter, Filter.createNOTFilter(uidFilter)), "mail", "givenName", "sn", "displayName");
155
//                SearchResult mailResult = ldapConnector.getConnection().search(mailRequest);
156
//                if(!mailResult.getSearchEntries().isEmpty()){
157
//                    throw new CustomLDAPException("Email " + email + " already in use!");
158
//                }
159
//                mods.add(new Modification(ModificationType.REPLACE, "mail", email));
160
//            }
161
//            //mods.add(new Modification(ModificationType.REPLACE, "userPassword",password));
162
//            if(!mods.isEmpty()) {
163
//                ldapConnector.getConnection().modify(entry.getDN(), mods);
164
//            }
165
//              if(!password.matches("(?=.*\\d)(?=.*[a-z])(?=.*[A-Z]).{6,}")){
166
//                   throw new CustomLDAPException("Invalid password!");
167
//              }
168
//            PasswordModifyExtendedRequest passwordModifyExtendedRequest = new PasswordModifyExtendedRequest(entry.getDN(), (String) null, password);
169
//            PasswordModifyExtendedResult passwordModifyResult = (PasswordModifyExtendedResult) ldapConnector.getConnection().processExtendedOperation(passwordModifyExtendedRequest);
170
//        } else {
171
//            throw new CustomLDAPException("Username " + username + " not found!");
172
//        }
173
//    }
174

  
175
//    public void deleteUser(String username/*, String email */) throws Exception {
176
//        LDAPConnection connection = ldapConnector.getConnection();
177
//        List<Modification> mods = new ArrayList<>();
178
//
179
//        try {
180
//
181
//            //mods.add(new Modification(ModificationType.DELETE, "mail", email));
182
//            mods.add(new Modification(ModificationType.DELETE, "uid", username));
183
//            logger.info("User: " + username + "was deleted!");
184
//            if(!mods.isEmpty()) {
185
//                ldapConnector.getConnection().modify(ldapConnector.getUsersDN(), mods);
186
//            }
187
//
188
//        } catch (Exception e) {
189
//            logger.error("Fail to delete user.", e);
190
//            throw e;
191
//        } finally {
192
//            if (connection != null)
193
//                connection.close();
194
//        }
195
//    }
196

  
197
    public Entry createZombieUser(String username, String email, String firstName, String lastName, String institution, String password) throws Exception {
198

  
199
        if(!username.matches("^[a-zA-Z0-9][a-zA-Z0-9_-]{4,150}")){
200
            throw new CustomLDAPException("Invalid username!");
201
        }
202

  
203
        if(!EmailValidator.getInstance().isValid(email)){
204
            throw new CustomLDAPException("Invalid email!");
205
        }
206

  
207
        Filter uidFilter = Filter.createEqualityFilter("uid", username);
208
        SearchRequest uidRequest = new SearchRequest("dc=openaire,dc=eu", SearchScope.SUB, uidFilter, "cn", "mail", "uid", "objectClass");
209

  
210
        Filter mailFilter = Filter.createEqualityFilter("mail", email);
211
        SearchRequest mailRequest = new SearchRequest("dc=openaire,dc=eu", SearchScope.SUB, mailFilter, "cn", "mail", "uid", "objectClass");
212

  
213
        SearchResult searchResult = ldapConnector.getConnection().search(uidRequest);
214
        if(!searchResult.getSearchEntries().isEmpty()){
215
            logger.info("S" + searchResult.getSearchEntries());
216
            throw new CustomLDAPException("Username " + username + " already exists!");
217
        }
218
        searchResult = ldapConnector.getConnection().search(mailRequest);
219
        if(!searchResult.getSearchEntries().isEmpty()){
220
            throw new CustomLDAPException("Email " + email + " already exists!");
221
        }
222

  
223
        Entry entry = new Entry("dn: uid=" + username + ",ou=zombies,dc=openaire,dc=eu",
224
                "objectClass: inetOrgPerson",
225
                "objectClass: eduPerson",
226
                "cn: "  + username,
227
                "uid: " + username,
228
                "displayName: " + firstName + " " + lastName,
229
                "mail: " + email,
230
                "givenName: " + firstName,
231
                "sn: " + lastName,
232
                "eduPersonPrincipalName: " + username + "@openaire.eu");
233
        if(institution != null && !institution.isEmpty()) {
234
            entry.addAttribute("o", institution);
235
        }
236
        ldapConnector.getConnection().add(entry);
237
        PasswordModifyExtendedRequest passwordModifyExtendedRequest = new PasswordModifyExtendedRequest(entry.getDN(), (String) null, password);
238
        PasswordModifyExtendedResult passwordModifyResult = (PasswordModifyExtendedResult) ldapConnector.getConnection().processExtendedOperation(passwordModifyExtendedRequest);
239
        logger.info("User: " + username + " was created successfully!");
240

  
241
        return entry;
242
    }
243

  
244
    public void moveUser(String username) throws Exception {
245
        LDAPConnection connection = ldapConnector.getConnection();
246

  
247
        try {
248
            logger.info("Moving user:" +username);
249
            ModifyDNRequest modifyDNRequest =
250
                    new ModifyDNRequest("uid=" + username + ",ou=zombies,dc=openaire,dc=eu", "uid=" + username, true, "ou=users,dc=openaire,dc=eu");
251

  
252
//            ModifyDNRequest modifyDNRequest =
253
//                    new ModifyDNRequest("uid=" + username + ",ou=zombies,dc=openaire,dc=eu","uid=" + username + ",ou=users,dc=openaire,dc=eu", true);
254
//
255
            LDAPResult result = connection.modifyDN(modifyDNRequest);
256
        }
257
        catch (Exception e){
258
            logger.error("Fail to move user.", e);
259
            throw e;
260
        } finally {
261
            if (connection != null)
262
                connection.close();
263
        }
264

  
265
    }
266

  
267
    public boolean isZombieUsersEmail(String email) throws Exception{
268
        LDAPConnection connection = ldapConnector.getConnection();
269

  
270
        try {
271
            logger.debug("checking if zombie user " + email + " exists in ldap");
272
            Filter filter = Filter.createEqualityFilter("mail", email);
273
            SearchRequest searchRequest = new SearchRequest(ldapConnector.getZombiesDN(), SearchScope.SUB, filter, "mail");
274
            SearchResult searchResult = connection.search(searchRequest);
275

  
276
            if (!searchResult.getSearchEntries().isEmpty()) {
277
                logger.info("Zombie user with email: " + email + " exists!");
278
                return true;
279
            } else {
280
                return false;
281
            }
282
        } catch (Exception e) {
283
            logger.error("Fail to check if zombie user email exists.", e);
284
            throw e;
285
        } finally {
286
            if (connection != null)
287
                connection.close();
288
        }
289
    }
290

  
291
    public boolean isZombieUsersUsername(String username) throws Exception {
292
        LDAPConnection connection = ldapConnector.getConnection();
293

  
294
        try {
295
            logger.debug("checking if zombie user " + username + " exists in ldap");
296
            Filter filter = Filter.createEqualityFilter("uid", username);
297
            SearchRequest searchRequest = new SearchRequest(ldapConnector.getZombiesDN(), SearchScope.SUB, filter, "uid");
298
            SearchResult searchResult = connection.search(searchRequest);
299

  
300
            if (!searchResult.getSearchEntries().isEmpty()) {
301
                logger.info("Zombie user with username: " + username + " exists!");
302
                return true;
303
            } else {
304
                return false;
305
            }
306

  
307
        } catch (Exception e) {
308
            logger.error("Fail to check if zombie username exists.", e);
309
            throw e;
310
        } finally {
311
            if (connection != null)
312
                connection.close();
313
        }
314
    }
315

  
316

  
317
    public boolean emailExists(String email) throws Exception {
318
        LDAPConnection connection = ldapConnector.getConnection();
319

  
320
        try {
321
            logger.debug("checking if user " + email + " exists in ldap");
322
            Filter filter = Filter.createEqualityFilter("mail", email);
323
            SearchRequest searchRequest = new SearchRequest(ldapConnector.getUsersDN(), SearchScope.SUB, filter, "mail");
324
            SearchResult searchResult = connection.search(searchRequest);
325

  
326
            if (!searchResult.getSearchEntries().isEmpty()) {
327
                logger.info("User with email: " + email + " exists!");
328
                return true;
329
            } else {
330
                return false;
331
            }
332
        } catch (Exception e) {
333
            logger.error("Fail to check if user email exists.", e);
334
            throw e;
335
        } finally {
336
            if (connection != null)
337
                connection.close();
338
        }
339
    }
340

  
341
    public boolean usernameExists(String username) throws Exception {
342
        LDAPConnection connection = ldapConnector.getConnection();
343

  
344
        try {
345
            logger.debug("checking if user " + username + " exists in ldap");
346
            Filter filter = Filter.createEqualityFilter("uid", username);
347
            SearchRequest searchRequest = new SearchRequest(ldapConnector.getUsersDN(), SearchScope.SUB, filter, "uid");
348
            SearchResult searchResult = connection.search(searchRequest);
349

  
350
            if (!searchResult.getSearchEntries().isEmpty()) {
351
                logger.info("User with username: " + username + " exists!");
352
                return true;
353
            } else {
354
                return false;
355
            }
356

  
357
        } catch (Exception e) {
358
            logger.error("Fail to check if username exists.", e);
359
            throw e;
360
        } finally {
361
            if (connection != null)
362
                connection.close();
363
        }
364
    }
365

  
366
    public void resetPassword(String username, String password) throws Exception {
367
        LDAPConnection connection = ldapConnector.getConnection();
368

  
369
        try {
370

  
371
            Filter filter = Filter.createEqualityFilter("uid", username);
372
            SearchRequest searchRequest = new SearchRequest(ldapConnector.getUsersDN(), SearchScope.SUB, filter, "uid");
373
            SearchResult searchResult = connection.search(searchRequest);
374
            String dn = null;
375
            for (SearchResultEntry entry : searchResult.getSearchEntries()) {
376
                dn = "uid=" + entry.getAttributeValue("uid") + "," + ldapConnector.getUsersDN();
377
                //logger.info("dn " + dn);
378
            }
379

  
380
            if(!password.matches("(?=.*\\d)(?=.*[a-z])(?=.*[A-Z]).{6,}")){
381
                throw new CustomLDAPException("Invalid password!");
382
            }
383

  
384
            //Modification mod1 = new Modification(ModificationType.REPLACE, "userPassword", password);
385
            PasswordModifyExtendedRequest passwordModifyExtendedRequest = new PasswordModifyExtendedRequest(dn, (String) null, password);
386
            PasswordModifyExtendedResult passwordModifyResult = (PasswordModifyExtendedResult) ldapConnector.getConnection().processExtendedOperation(passwordModifyExtendedRequest);
387
            //connection.modify(dn, mod1);
388

  
389
        } catch (Exception e) {
390
            logger.error("Fail to reset password.", e);
391
            throw e;
392

  
393
        } finally {
394
            if (connection != null)
395
                connection.close();
396
        }
397
    }
398

  
399

  
400
    public LDAPConnector getLdapConnector() {
401
        return ldapConnector;
402
    }
403

  
404
    public void setLdapConnector(LDAPConnector ldapConnector) {
405
        this.ldapConnector = ldapConnector;
406
    }
407
}
modules/uoa-user-management/tags/uoa-user-management-2.0.0/src/main/java/eu/dnetlib/openaire/user/utils/VerificationActions.java
1
package eu.dnetlib.openaire.user.utils;
2

  
3
import eu.dnetlib.openaire.user.UserVerification;
4
import eu.dnetlib.openaire.user.dao.UserVerificationDAO;
5
import eu.dnetlib.openaire.user.store.DataSourceConnector;
6
import org.apache.log4j.Logger;
7
import org.springframework.beans.factory.annotation.Autowired;
8
import org.springframework.stereotype.Component;
9

  
10
import java.sql.SQLException;
11
import java.sql.Timestamp;
12
import java.time.LocalDateTime;
13
import java.time.temporal.ChronoUnit;
14

  
15
/**
16
 * Created by kiatrop on 2/10/2017.
17
 */
18
@Component(value = "verificationActions")
19
public class VerificationActions {
20

  
21
    @Autowired
22
    private DataSourceConnector dataSourceConnector;
23

  
24
    private Logger logger = Logger.getLogger(VerificationActions.class);
25

  
26
    @Autowired
27
    private UserVerificationDAO userVerificationDAO;
28

  
29
    /**
30
     * Adds new row in the verification table
31
     */
32
    public void addVerificationEntry(String username, String verificationCode, Timestamp date) {
33

  
34
        try {
35
            UserVerification userVerification  = new UserVerification(username);
36
            logger.info("verificationCode: " + verificationCode);
37
            userVerification.setVerificationCode(verificationCode);
38
            userVerification.setDate(date);
39

  
40
            userVerificationDAO.insert(userVerification);
41

  
42
            logger.info("Insert user: " + username);
43

  
44
        } catch (SQLException e) {;
45
            logger.error("Fail to insert user.", e);
46
        }
47
    }
48

  
49
    /**
50
     * Updates the row of verification table with the new date for the given username
51
     */
52
    public void updateVerificationEntry(String username, String verificationCode, Timestamp date) {
53

  
54
        try {
55

  
56
            // Get userId to update user
57
            UserVerification userVerificationOld = userVerificationDAO.fetchByUsername(username);
58
            UserVerification userVerification  = new UserVerification(username);
59
            userVerification.setVerificationCode(verificationCode);
60
            userVerification.setDate(date);
61
            userVerification.setId(userVerificationOld.getId());
62

  
63
            userVerificationDAO.update(userVerification);
64

  
65
            //logger.info("Update user: " + username + " with verification code " + verificationCode);
66

  
67
        } catch (SQLException e) {
68
            logger.error("Fail to update user.", e);
69
        }
70
    }
71

  
72

  
73
    /**
74
     * Checks if the verification row exists for the given username
75
     */
76
    public boolean verificationEntryExists(String username) {
77

  
78
        try {
79
            UserVerification userVerification = userVerificationDAO.fetchByUsername(username);
80

  
81
            if (userVerification == null) {
82
                logger.info("There is no user with username: " + username);
83
                return false;
84
            }
85
            else {
86
                logger.info("User: " + username + " was found!");
87
                return true;
88
            }
89
        } catch (SQLException e) {
90
            logger.error("Fail to search user.", e);
91
        }
92
        return true;
93
    }
94

  
95
    /**
96
     * Checks if the verification row exists for the given username
97
     */
98
    public boolean verificationCodeIsCorrect(String username, String verificationCode) {
99
        
100
            try {
101
                UserVerification userVerification = userVerificationDAO.fetchByUsername(username);
102

  
103
                if (userVerification == null) {
104
                    logger.info("There is no user with username: " + username);
105
                    return false;
106
                }
107
                else {
108
                    logger.info("User: " + username + " was found!");
109

  
110
                    if (verificationCode.equals(userVerification.getVerificationCode())) {
111
                        logger.info("Verification Code is correct!");
112
                        //logger.info("... and verification code: " + verificationCode + " is correct!");
113
                        return true;
114
                    }
115
                }
116
            } catch (SQLException e) {
117
                logger.error("Fail to search user.", e);
118
            }
119
            return false;
120
    }
121

  
122
    public boolean verificationCodeHasExpired(String username){
123

  
124
        try {
125
            UserVerification userVerification = userVerificationDAO.fetchByUsername(username);
126
            LocalDateTime date = userVerification.getDate().toLocalDateTime();
127

  
128
            long nHours = ChronoUnit.HOURS.between(date, LocalDateTime.now());
129

  
130
            if (nHours > (long)24)
131
                return true;
132
            else
133
                return false;
134

  
135
        } catch (SQLException e) {
136
            logger.error("Fail to search user.", e);
137
        }
... This diff was truncated because it exceeds the maximum size that can be displayed.

Also available in: Unified diff