* 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.
/**
* Use AAF Service as Permission Service.
- *
+ *
* This Lur goes after AAF Permissions, which are elements of Roles, not the Roles themselves.
- *
+ *
* If you want a simple Role Lur, use AAFRoleLur
- *
+ *
* @author Jonathan
*
*/
/**
* Need to be able to transmutate a Principal into either Person or AppID, which are the only ones accepted at this
- * point by AAF. There is no "domain", aka, no "@att.com" in "ab1234@att.com".
- *
+ * point by AAF. There is no "domain", aka, no "@att.com" in "ab1234@att.com".
+ *
* The only thing that matters here for AAF is that we don't waste calls with IDs that obviously aren't valid.
* Thus, we validate that the ID portion follows the rules before we waste time accessing AAF remotely
- * @throws APIException
- * @throws URISyntaxException
- * @throws DME2Exception
+ * @throws APIException
+ * @throws URISyntaxException
+ * @throws DME2Exception
*/
// Package on purpose
AAFLurPerm(AAFCon<?> con) throws CadiException, APIException {
super(con,auc);
attachOAuth2(con);
}
-
+
private void attachOAuth2(AAFCon<?> con) throws APIException {
String oauth2_url;
Class<?> tmcls = Config.loadClass(access,"org.osaaf.cadi.oauth.TokenMgr");
final Holder<Float> remote = new Holder<Float>(0f);
final boolean[] success = new boolean[]{false};
-
+
try {
return aaf.best(new Retryable<User<AAFPermission>>() {
@Override
public User<AAFPermission> code(Rcli<?> client) throws CadiException, ConnectException, APIException {
final long remoteStart = System.nanoTime();
- Future<Perms> fp = client.read("/authz/perms/user/"+name,aaf.permsDF);
-
+ StringBuilder sb = new StringBuilder("/authz/perms/user/");
+ sb.append(name);
+ if(details) {
+ sb.append("?force");
+ }
+ Future<Perms> fp = client.read(sb.toString(),aaf.permsDF);
+
// In the meantime, lookup User, create if necessary
User<AAFPermission> user = getUser(principal);
Principal p;
} else {
p = principal;
}
-
+
if (user==null) {
addUser(user = new User<AAFPermission>(p,aaf.userExpires)); // no password
}
-
+
// OK, done all we can, now get content
boolean ok = fp.get(aaf.timeout);
remote.set(Timing.millis(remoteStart));
@Override
public Resp code(Rcli<?> client) throws CadiException, ConnectException, APIException {
final long remoteStart = System.nanoTime();
- Future<Perms> fp = aaf.client(Config.AAF_DEFAULT_VERSION).read(
+ Future<Perms> fp = aaf.client().read(
"/authz/perms/user/"+name,
aaf.permsDF
);
-
+
// OK, done all we can, now get content
boolean ok = fp.get(aaf.timeout);
remote.set(Timing.millis(remoteStart));
if (ok) {
success.set(true);
- Map<String,Permission> newMap = user.newMap();
+ Map<String,Permission> newMap = user.newMap();
boolean willLog = aaf.access.willLog(Level.DEBUG);
for (Perm perm : fp.value.getPerm()) {
user.add(newMap, new AAFPermission(perm.getNs(),perm.getType(),perm.getInstance(),perm.getAction(),perm.getRoles()));
return new LocalPermission(p);
}
}
-
+
}