]>
git.argeo.org Git - lgpl/argeo-commons.git/blob - org.argeo.cms/src/org/argeo/cms/auth/AuthenticatingUser.java
1 package org
.argeo
.cms
.auth
;
3 import java
.nio
.ByteBuffer
;
4 import java
.nio
.CharBuffer
;
5 import java
.nio
.charset
.Charset
;
6 import java
.util
.Arrays
;
7 import java
.util
.Dictionary
;
8 import java
.util
.Hashtable
;
10 import javax
.naming
.ldap
.LdapName
;
12 import org
.osgi
.service
.useradmin
.User
;
15 * A special user type used during authentication in order to provide the
16 * credentials required for scoping the user admin.
18 class AuthenticatingUser
implements User
{
19 private final String name
;
20 private final Dictionary
<String
, Object
> credentials
;
22 public AuthenticatingUser(LdapName name
) {
23 this.name
= name
.toString();
24 this.credentials
= new Hashtable
<>();
27 public AuthenticatingUser(String name
, Dictionary
<String
, Object
> credentials
) {
29 this.credentials
= credentials
;
32 public AuthenticatingUser(String name
, char[] password
) {
34 credentials
= new Hashtable
<>();
35 credentials
.put(CmsAuthUtils
.SHARED_STATE_NAME
, name
);
36 byte[] pwd
= charsToBytes(password
);
37 credentials
.put(CmsAuthUtils
.SHARED_STATE_PWD
, pwd
);
41 public String
getName() {
46 public int getType() {
50 @SuppressWarnings("rawtypes")
52 public Dictionary
getProperties() {
53 throw new UnsupportedOperationException();
56 @SuppressWarnings("rawtypes")
58 public Dictionary
getCredentials() {
63 public boolean hasCredential(String key
, Object value
) {
64 throw new UnsupportedOperationException();
68 static byte[] charsToBytes(char[] chars
) {
69 CharBuffer charBuffer
= CharBuffer
.wrap(chars
);
70 ByteBuffer byteBuffer
= Charset
.forName("UTF-8").encode(charBuffer
);
71 byte[] bytes
= Arrays
.copyOfRange(byteBuffer
.array(), byteBuffer
.position(), byteBuffer
.limit());
72 Arrays
.fill(charBuffer
.array(), '\u0000'); // clear sensitive data
73 Arrays
.fill(byteBuffer
.array(), (byte) 0); // clear sensitive data
77 static char[] bytesToChars(byte[] bytes
) {
78 ByteBuffer byteBuffer
= ByteBuffer
.wrap(bytes
);
79 CharBuffer charBuffer
= Charset
.forName("UTF-8").decode(byteBuffer
);
80 char[] chars
= Arrays
.copyOfRange(charBuffer
.array(), charBuffer
.position(), charBuffer
.limit());
81 Arrays
.fill(charBuffer
.array(), '\u0000'); // clear sensitive data
82 Arrays
.fill(byteBuffer
.array(), (byte) 0); // clear sensitive data