blob: bc070dcc551d8721c2bf46e591794ec9472282be [file] [log] [blame]
/**
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*
*/
package org.apache.kerby.kerberos.kdc.identitybackend;
import org.apache.directory.api.ldap.model.entry.Entry;
import org.apache.directory.api.ldap.model.entry.Value;
import org.apache.directory.api.ldap.model.exception.LdapInvalidAttributeValueException;
import org.apache.directory.api.util.GeneralizedTime;
import org.apache.directory.shared.kerberos.KerberosAttribute;
import org.apache.kerby.kerberos.kerb.type.KerberosTime;
import org.apache.kerby.kerberos.kerb.type.base.EncryptionKey;
import org.apache.kerby.kerberos.kerb.type.base.PrincipalName;
import java.io.IOException;
import java.text.ParseException;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
public class LdapIdentityGetHelper {
private Entry entry;
public LdapIdentityGetHelper(Entry entry) {
this.entry = entry;
}
/**
* Get principal name.
* @throws LdapInvalidAttributeValueException e
* @return principal name
*/
public PrincipalName getPrincipalName() throws LdapInvalidAttributeValueException {
String principalNameStr = entry.get(KerberosAttribute.KRB5_PRINCIPAL_NAME_AT).getString();
PrincipalName principalName = new PrincipalName(principalNameStr);
return principalName;
}
/**
* Get key version.
* @throws LdapInvalidAttributeValueException e
* @return key version
*/
public int getKeyVersion() throws LdapInvalidAttributeValueException {
String keyVersionStr = entry.get(KerberosAttribute.KRB5_KEY_VERSION_NUMBER_AT).getString();
int keyVersion = Integer.parseInt(keyVersionStr);
return keyVersion;
}
/**
* Get keys.
* @throws IOException e
* @return keys
*/
public List<EncryptionKey> getKeys() throws IOException {
Iterator<Value<?>> iterator1 = entry.get(KerberosAttribute.KRB5_KEY_AT).iterator();
List<EncryptionKey> keys = new ArrayList<>();
while (iterator1.hasNext()) {
byte[] encryKey = iterator1.next().getBytes();
EncryptionKey key = new EncryptionKey();
key.decode(encryKey);
key.setKvno(1); // TODO: kvno should be correctly stored and retrieved
keys.add(key);
}
return keys;
}
/**
* Get created time.
* @throws LdapInvalidAttributeValueException e
* @throws ParseException e
* @return created time
*/
public KerberosTime getCreatedTime() throws LdapInvalidAttributeValueException,
ParseException {
String createTime = entry.get("createTimestamp").getString();
return createKerberosTime(createTime);
}
/**
* Get expire time.
* @throws LdapInvalidAttributeValueException e
* @throws ParseException e
* @return the expire time
*/
public KerberosTime getExpireTime() throws LdapInvalidAttributeValueException,
ParseException {
String expirationTime = entry.get(KerberosAttribute.KRB5_ACCOUNT_EXPIRATION_TIME_AT).getString();
return createKerberosTime(expirationTime);
}
/**
* Get whether disabled.
* @throws LdapInvalidAttributeValueException e
* @return whether this krb5 account is disabled
*/
public boolean getDisabled() throws LdapInvalidAttributeValueException {
String disabled = entry.get(KerberosAttribute.KRB5_ACCOUNT_DISABLED_AT).getString();
return Boolean.parseBoolean(disabled);
}
/**
* Get kdc flags.
* @throws LdapInvalidAttributeValueException e
* @return kdc flags
*/
public int getKdcFlags() throws LdapInvalidAttributeValueException {
String krb5KDCFlags = entry.get("krb5KDCFlags").getString();
return Integer.parseInt(krb5KDCFlags);
}
/**
* Get whether locked.
* @throws LdapInvalidAttributeValueException e
* @return whether the krb5 account is locked
*/
public boolean getLocked() throws LdapInvalidAttributeValueException {
String lockedOut = entry.get(KerberosAttribute.KRB5_ACCOUNT_LOCKEDOUT_AT).getString();
return Boolean.parseBoolean(lockedOut);
}
/**
* Create kerberos time.
*/
private KerberosTime createKerberosTime(String generalizedTime)
throws ParseException {
long time = new GeneralizedTime(generalizedTime).getTime();
return new KerberosTime(time);
}
}