diff options
author | Sai Gandham <sg481n@att.com> | 2018-07-02 16:53:27 -0500 |
---|---|---|
committer | Sai Gandham <sg481n@att.com> | 2018-07-02 16:53:36 -0500 |
commit | 9b8bad6df2746688133bc57306c98e201f8fa6a8 (patch) | |
tree | 350045f9a3f41f5f0fb8221b40f45364c7d79572 /cadi/shiro/src/main | |
parent | c060284812fbbc18fcf22eb628c47c251505fe50 (diff) |
move shiro modules to cadi repo
Issue-ID: AAF-380
Change-Id: I3383995551a7ea3a98d9e1cbebd324d49bbba134
Signed-off-by: Sai Gandham <sg481n@att.com>
Diffstat (limited to 'cadi/shiro/src/main')
5 files changed, 0 insertions, 496 deletions
diff --git a/cadi/shiro/src/main/java/org/onap/aaf/cadi/shiro/AAFAuthenticationInfo.java b/cadi/shiro/src/main/java/org/onap/aaf/cadi/shiro/AAFAuthenticationInfo.java deleted file mode 100644 index a1d304bd..00000000 --- a/cadi/shiro/src/main/java/org/onap/aaf/cadi/shiro/AAFAuthenticationInfo.java +++ /dev/null @@ -1,90 +0,0 @@ -/** - * ============LICENSE_START==================================================== - * org.onap.aaf - * =========================================================================== - * Copyright (c) 2018 AT&T Intellectual Property. All rights reserved. - * =========================================================================== - * Licensed 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. - * ============LICENSE_END==================================================== - * - */ -package org.onap.aaf.cadi.shiro; - -import java.nio.ByteBuffer; -import java.security.NoSuchAlgorithmException; -import java.security.SecureRandom; - -import org.apache.shiro.authc.AuthenticationInfo; -import org.apache.shiro.authc.AuthenticationToken; -import org.apache.shiro.authc.UsernamePasswordToken; -import org.apache.shiro.subject.PrincipalCollection; -import org.onap.aaf.cadi.Access; -import org.onap.aaf.cadi.Hash; -import org.onap.aaf.cadi.Access.Level; - -public class AAFAuthenticationInfo implements AuthenticationInfo { - private static final long serialVersionUID = -1502704556864321020L; - // We assume that Shiro is doing Memory Only, and this salt is not needed cross process - private final static int salt = new SecureRandom().nextInt(); - - private final AAFPrincipalCollection apc; - private final byte[] hash; - private Access access; - - public AAFAuthenticationInfo(Access access, String username, String password) { - this.access = access; - apc = new AAFPrincipalCollection(username); - hash = getSaltedCred(password); - } - @Override - public byte[] getCredentials() { - access.log(Level.DEBUG, "AAFAuthenticationInfo.getCredentials"); - return hash; - } - - @Override - public PrincipalCollection getPrincipals() { - access.log(Level.DEBUG, "AAFAuthenticationInfo.getPrincipals"); - return apc; - } - - public boolean matches(AuthenticationToken atoken) { - if(atoken instanceof UsernamePasswordToken) { - UsernamePasswordToken upt = (UsernamePasswordToken)atoken; - if(apc.getPrimaryPrincipal().getName().equals(upt.getPrincipal())) { - byte[] newhash = getSaltedCred(new String(upt.getPassword())); - if(newhash.length==hash.length) { - for(int i=0;i<hash.length;++i) { - if(hash[i]!=newhash[i]) { - return false; - } - } - return true; - } - } - } - return false; - } - - private byte[] getSaltedCred(String password) { - byte[] pbytes = password.getBytes(); - ByteBuffer bb = ByteBuffer.allocate(pbytes.length+Integer.SIZE/8); - bb.asIntBuffer().put(salt); - bb.put(password.getBytes()); - try { - return Hash.hashSHA256(bb.array()); - } catch (NoSuchAlgorithmException e) { - return new byte[0]; // should never get here - } - } -} diff --git a/cadi/shiro/src/main/java/org/onap/aaf/cadi/shiro/AAFAuthorizationInfo.java b/cadi/shiro/src/main/java/org/onap/aaf/cadi/shiro/AAFAuthorizationInfo.java deleted file mode 100644 index bfdc6bf1..00000000 --- a/cadi/shiro/src/main/java/org/onap/aaf/cadi/shiro/AAFAuthorizationInfo.java +++ /dev/null @@ -1,94 +0,0 @@ -/** - * ============LICENSE_START==================================================== - * org.onap.aaf - * =========================================================================== - * Copyright (c) 2018 AT&T Intellectual Property. All rights reserved. - * =========================================================================== - * Licensed 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. - * ============LICENSE_END==================================================== - * - */ -package org.onap.aaf.cadi.shiro; - -import java.security.Principal; -import java.util.ArrayList; -import java.util.Collection; -import java.util.List; - -import org.apache.shiro.authz.AuthorizationInfo; -import org.apache.shiro.authz.Permission; -import org.onap.aaf.cadi.Access; -import org.onap.aaf.cadi.Access.Level; - -/** - * We treat "roles" and "permissions" in a similar way for first pass. - * - * @author JonathanGathman - * - */ -public class AAFAuthorizationInfo implements AuthorizationInfo { - private static final long serialVersionUID = -4805388954462426018L; - private Access access; - private Principal bait; - private List<org.onap.aaf.cadi.Permission> pond; - private ArrayList<String> sPerms; - private ArrayList<Permission> oPerms; - - public AAFAuthorizationInfo(Access access, Principal bait, List<org.onap.aaf.cadi.Permission> pond) { - this.access = access; - this.bait = bait; - this.pond = pond; - sPerms=null; - oPerms=null; - } - - public Principal principal() { - return bait; - } - - @Override - public Collection<Permission> getObjectPermissions() { - access.log(Level.DEBUG, "AAFAuthorizationInfo.getObjectPermissions"); - synchronized(bait) { - if(oPerms == null) { - oPerms = new ArrayList<Permission>(); - for(final org.onap.aaf.cadi.Permission p : pond) { - oPerms.add(new AAFShiroPermission(p)); - } - } - } - return oPerms; - } - - @Override - public Collection<String> getRoles() { - access.log(Level.DEBUG, "AAFAuthorizationInfo.getRoles"); - // Until we decide to make Roles available, tie into String based permissions. - return getStringPermissions(); - } - - @Override - public Collection<String> getStringPermissions() { - access.log(Level.DEBUG, "AAFAuthorizationInfo.getStringPermissions"); - synchronized(bait) { - if(sPerms == null) { - sPerms = new ArrayList<String>(); - for(org.onap.aaf.cadi.Permission p : pond) { - sPerms.add(p.getKey()); - } - } - } - return sPerms; - } - -} diff --git a/cadi/shiro/src/main/java/org/onap/aaf/cadi/shiro/AAFPrincipalCollection.java b/cadi/shiro/src/main/java/org/onap/aaf/cadi/shiro/AAFPrincipalCollection.java deleted file mode 100644 index 145968de..00000000 --- a/cadi/shiro/src/main/java/org/onap/aaf/cadi/shiro/AAFPrincipalCollection.java +++ /dev/null @@ -1,125 +0,0 @@ -/** - * ============LICENSE_START==================================================== - * org.onap.aaf - * =========================================================================== - * Copyright (c) 2018 AT&T Intellectual Property. All rights reserved. - * =========================================================================== - * Licensed 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. - * ============LICENSE_END==================================================== - * - */ -package org.onap.aaf.cadi.shiro; - -import java.security.Principal; -import java.util.ArrayList; -import java.util.Collection; -import java.util.HashSet; -import java.util.Iterator; -import java.util.List; -import java.util.Set; - -import org.apache.shiro.subject.PrincipalCollection; - -public class AAFPrincipalCollection implements PrincipalCollection { - private static final long serialVersionUID = 558246013419818831L; - private static final Set<String> realmSet; - private final Principal principal; - private List<Principal> list=null; - private Set<Principal> set=null; - - static { - realmSet = new HashSet<String>(); - realmSet.add(AAFRealm.AAF_REALM); - } - - public AAFPrincipalCollection(Principal p) { - principal = p; - } - - public AAFPrincipalCollection(final String principalName) { - principal = new Principal() { - private final String name = principalName; - @Override - public String getName() { - return name; - } - }; - } - - @Override - public Iterator<Principal> iterator() { - return null; - } - - @Override - public List<Principal> asList() { - if(list==null) { - list = new ArrayList<Principal>(); - } - list.add(principal); - return list; - } - - @Override - public Set<Principal> asSet() { - if(set==null) { - set = new HashSet<Principal>(); - } - set.add(principal); - return set; - } - - @SuppressWarnings("unchecked") - @Override - public <T> Collection<T> byType(Class<T> cls) { - Collection<T> coll = new ArrayList<T>(); - if(cls.isAssignableFrom(Principal.class)) { - coll.add((T)principal); - } - return coll; - } - - @Override - public Collection<Principal> fromRealm(String realm) { - if(AAFRealm.AAF_REALM.equals(realm)) { - return asList(); - } else { - return new ArrayList<Principal>(); - } - } - - @Override - public Principal getPrimaryPrincipal() { - return principal; - } - - @Override - public Set<String> getRealmNames() { - return realmSet; - } - - @Override - public boolean isEmpty() { - return principal==null; - } - - @SuppressWarnings("unchecked") - @Override - public <T> T oneByType(Class<T> cls) { - if(cls.isAssignableFrom(Principal.class)) { - return (T)principal; - } - return null; - } - -} diff --git a/cadi/shiro/src/main/java/org/onap/aaf/cadi/shiro/AAFRealm.java b/cadi/shiro/src/main/java/org/onap/aaf/cadi/shiro/AAFRealm.java deleted file mode 100644 index 006547a9..00000000 --- a/cadi/shiro/src/main/java/org/onap/aaf/cadi/shiro/AAFRealm.java +++ /dev/null @@ -1,142 +0,0 @@ -/** - * ============LICENSE_START==================================================== - * org.onap.aaf - * =========================================================================== - * Copyright (c) 2018 AT&T Intellectual Property. All rights reserved. - * =========================================================================== - * Licensed 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. - * ============LICENSE_END==================================================== - * - */ -package org.onap.aaf.cadi.shiro; - -import java.io.IOException; -import java.security.Principal; -import java.util.ArrayList; -import java.util.HashSet; -import java.util.List; - -import org.apache.shiro.authc.AuthenticationException; -import org.apache.shiro.authc.AuthenticationInfo; -import org.apache.shiro.authc.AuthenticationToken; -import org.apache.shiro.authc.UsernamePasswordToken; -import org.apache.shiro.realm.AuthorizingRealm; -import org.apache.shiro.subject.PrincipalCollection; -import org.onap.aaf.cadi.Access.Level; -import org.onap.aaf.cadi.CadiException; -import org.onap.aaf.cadi.LocatorException; -import org.onap.aaf.cadi.Permission; -import org.onap.aaf.cadi.PropAccess; -import org.onap.aaf.cadi.aaf.v2_0.AAFAuthn; -import org.onap.aaf.cadi.aaf.v2_0.AAFCon; -import org.onap.aaf.cadi.aaf.v2_0.AAFLurPerm; -import org.onap.aaf.cadi.config.Config; -import org.onap.aaf.misc.env.APIException; - -public class AAFRealm extends AuthorizingRealm { - public static final String AAF_REALM = "AAFRealm"; - - private PropAccess access; - private AAFCon<?> acon; - private AAFAuthn<?> authn; - private HashSet<Class<? extends AuthenticationToken>> supports; - private AAFLurPerm authz; - - - /** - * - * There appears to be no configuration objects or references available for CADI to start with. - * - */ - public AAFRealm () { - access = new PropAccess(); // pick up cadi_prop_files from VM_Args - String cadi_prop_files = access.getProperty(Config.CADI_PROP_FILES); - if(cadi_prop_files==null) { - String msg = Config.CADI_PROP_FILES + " in VM Args is required to initialize AAFRealm."; - access.log(Level.INIT,msg); - throw new RuntimeException(msg); - } else { - try { - acon = AAFCon.newInstance(access); - authn = acon.newAuthn(); - authz = acon.newLur(authn); - } catch (APIException | CadiException | LocatorException e) { - String msg = "Cannot initiate AAFRealm"; - access.log(Level.INIT,msg,e.getMessage()); - throw new RuntimeException(msg,e); - } - } - supports = new HashSet<Class<? extends AuthenticationToken>>(); - supports.add(UsernamePasswordToken.class); - } - - @Override - protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken token) throws AuthenticationException { - access.log(Level.DEBUG, "AAFRealm.doGetAuthenticationInfo",token); - - final UsernamePasswordToken upt = (UsernamePasswordToken)token; - String password=new String(upt.getPassword()); - String err; - try { - err = authn.validate(upt.getUsername(),password); - } catch (IOException|CadiException e) { - err = "Credential cannot be validated"; - access.log(e, err); - } - - if(err != null) { - access.log(Level.DEBUG, err); - throw new AuthenticationException(err); - } - - return new AAFAuthenticationInfo( - access, - upt.getUsername(), - password - ); - } - - @Override - protected void assertCredentialsMatch(AuthenticationToken atoken, AuthenticationInfo ai)throws AuthenticationException { - if(ai instanceof AAFAuthenticationInfo) { - if(!((AAFAuthenticationInfo)ai).matches(atoken)) { - throw new AuthenticationException("Credentials do not match"); - } - } else { - throw new AuthenticationException("AuthenticationInfo is not an AAFAuthenticationInfo"); - } - } - - - @Override - protected AAFAuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principals) { - access.log(Level.DEBUG, "AAFRealm.doGetAuthenthorizationInfo"); - Principal bait = (Principal)principals.getPrimaryPrincipal(); - List<Permission> pond = new ArrayList<Permission>(); - authz.fishAll(bait,pond); - - return new AAFAuthorizationInfo(access,bait,pond); - - } - - @Override - public boolean supports(AuthenticationToken token) { - return supports.contains(token.getClass()); - } - - @Override - public String getName() { - return AAF_REALM; - } - -} diff --git a/cadi/shiro/src/main/java/org/onap/aaf/cadi/shiro/AAFShiroPermission.java b/cadi/shiro/src/main/java/org/onap/aaf/cadi/shiro/AAFShiroPermission.java deleted file mode 100644 index a348a045..00000000 --- a/cadi/shiro/src/main/java/org/onap/aaf/cadi/shiro/AAFShiroPermission.java +++ /dev/null @@ -1,45 +0,0 @@ -/** - * ============LICENSE_START==================================================== - * org.onap.aaf - * =========================================================================== - * Copyright (c) 2018 AT&T Intellectual Property. All rights reserved. - * =========================================================================== - * Licensed 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. - * ============LICENSE_END==================================================== - * - */ -package org.onap.aaf.cadi.shiro; - -import org.apache.shiro.authz.Permission; - -public class AAFShiroPermission implements Permission { - private org.onap.aaf.cadi.Permission perm; - public AAFShiroPermission(org.onap.aaf.cadi.Permission perm) { - this.perm = perm; - } - @Override - public boolean implies(Permission sp) { - if(sp instanceof AAFShiroPermission) { - if(perm.match(((AAFShiroPermission)sp).perm)){ - return true; - } - } - return false; - } - - @Override - public String toString() { - return perm.toString(); - } - -} |