* 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.
ss = null;
authn_method = am;
synchronized(tcf) {
- if(introspectDF==null) {
+ if (introspectDF==null) {
tokenDF = tkCon.env().newDataFactory(Token.class);
introspectDF = tkCon.env().newDataFactory(Introspect.class);
}
}
-
+
}
public void client_id(String client_id) {
this.client_id = client_id;
default_scope = FQI.reverseDomain(client_id);
}
-
+
public String client_id() {
return client_id;
}
-
+
/**
* This scope based on client_id... the App configured for call
* @return
}
public void client_creds(Access access) throws CadiException {
- if(okind=='A') {
+ if (okind=='A') {
String alias = access.getProperty(Config.CADI_ALIAS, null);
- if(alias == null) {
+ if (alias == null) {
client_creds(access.getProperty(Config.AAF_APPID, null),access.getProperty(Config.AAF_APPPASS, null));
} else {
client_creds(alias,null);
/**
* Note: OAuth2 provides for normal Authentication parameters when getting tokens. Basic Auth is one such valid
* way to get Credentials. However, support is up to the OAuth2 Implementation
- *
+ *
* This method is for setting an App's creds (client) to another App.
- *
+ *
* @param client_id
* @param client_secret
* @throws IOException
*/
public void client_creds(final String client_id, final String client_secret) throws CadiException {
- if(client_id==null) {
+ if (client_id==null) {
throw new CadiException("client_creds:client_id is null");
}
this.client_id = client_id;
default_scope = FQI.reverseDomain(client_id);
- if(client_secret!=null) {
+ if (client_secret!=null) {
try {
- if(client_secret.startsWith("enc:")) {
+ if (client_secret.startsWith("enc:")) {
final String temp = factory.access.decrypt(client_secret, false); // this is a more powerful, but non-thread-safe encryption
hash = Hash.hashSHA256(temp.getBytes());
this.enc_client_secret = factory.symm.encode(temp.getBytes());
};
}
authn_method = AUTHN_METHOD.client_credentials;
- } catch(IOException | NoSuchAlgorithmException e) {
+ } catch (IOException | NoSuchAlgorithmException e) {
throw new CadiException(e);
}
} else {
return con.x509Alias(client_id);// no password, assume Cert
} catch (APIException e) {
throw new CadiException(e);
- }
- }
+ }
+ }
};
authn_method = AUTHN_METHOD.client_credentials;
}
}
-
+
public void username(String username) {
this.username = username;
}
/**
* Note: OAuth2 provides for normal Authentication parameters when getting tokens. Basic Auth is one such valid
* way to get Credentials. However, support is up to the OAuth2 Implementation
- *
+ *
* This method is for setting the End-User's Creds
- *
+ *
* @param client_id
* @param client_secret
* @throws IOException
*/
public void password(final String user, final String password) throws CadiException {
this.username = user;
- if(password!=null) {
+ if (password!=null) {
try {
- if(password.startsWith("enc:")) {
+ if (password.startsWith("enc:")) {
final String temp = factory.access.decrypt(password, false); // this is a more powerful, but non-thread-safe encryption
hash = Hash.hashSHA256(temp.getBytes());
this.enc_password = factory.symm.encode(temp.getBytes());
}
}
}
-
+
public void clearEndUser() {
username = null;
enc_password = null;
- if(client_id!=null && enc_client_secret!=null) {
+ if (client_id!=null && enc_client_secret!=null) {
authn_method = AUTHN_METHOD.client_credentials;
} else {
authn_method = AUTHN_METHOD.password;
public void clearToken(final char kind, final String ... scopes) throws CadiException {
final String scope = addScope(scopes);
char c;
- if(kind==Kind.OAUTH) {
+ if (kind==Kind.OAUTH) {
c = okind;
} else {
c = kind;
}
/**
* Get AuthToken
- * @throws APIException
- * @throws CadiException
- * @throws LocatorException
+ * @throws APIException
+ * @throws CadiException
+ * @throws LocatorException
*/
public Result<TimedToken> getToken(final char kind, final String ... scopes) throws LocatorException, CadiException, APIException {
final String scope = addScope(scopes);
char c;
- if(kind==Kind.OAUTH) {
+ if (kind==Kind.OAUTH) {
c = okind;
} else {
c = kind;
}
final String key = TokenClientFactory.getKey(c,client_id,username,hash,scope);
- if(ss==null) {
+ if (ss==null) {
throw new APIException("client_creds(...) must be set before obtaining Access Tokens");
}
-
+
Result<TimedToken> rtt = factory.get(key,hash,new Loader<TimedToken>() {
@Override
public Result<TimedToken> load(final String key) throws APIException, CadiException, LocatorException {
final List<String> params = new ArrayList<>();
params.add(scope);
addSecurity(params,authn_method);
-
+
final String paramsa[] = new String[params.size()];
params.toArray(paramsa);
Result<Token> rt = tkCon.best(new Retryable<Result<Token>>() {
public Result<Token> code(Rcli<?> client) throws CadiException, ConnectException, APIException {
// /token?grant_type=client_credential&scope=com.att.aaf+com.att.test
Future<Token> f = client.postForm(null,tokenDF,paramsa);
- if(f.get(timeout)) {
+ if (f.get(timeout)) {
return Result.ok(f.code(),f.value);
} else {
return Result.err(f.code(), f.body());
}
}
});
-
- if(rt.isOK()) {
+
+ if (rt.isOK()) {
try {
return Result.ok(rt.code,factory.putTimedToken(key,rt.value, hash));
} catch (IOException e) {
}
}
});
- if(rtt.isOK()) { // not validated for Expired
+ if (rtt.isOK()) { // not validated for Expired
TimedToken tt = rtt.value;
- if(tt.expired()) {
+ if (tt.expired()) {
rtt = refreshToken(tt);
- if(rtt.isOK()) {
+ if (rtt.isOK()) {
tkCon.access.printf(Level.INFO, "Refreshed token %s to %s",tt.getAccessToken(),rtt.value.getAccessToken());
return Result.ok(200,rtt.value);
} else {
}
return Result.err(404,"Not Found");
}
-
+
public Result<TimedToken> refreshToken(Token token) throws APIException, LocatorException, CadiException {
- if(ss==null) {
+ if (ss==null) {
throw new APIException("client_creds(...) must be set before obtaining Access Tokens");
}
final List<String> params = new ArrayList<>();
addSecurity(params,AUTHN_METHOD.refresh_token);
final String scope="scope="+token.getScope().replace(' ', '+');
params.add(scope);
-
+
final String paramsa[] = new String[params.size()];
params.toArray(paramsa);
Result<Token> rt = tkCon.best(new Retryable<Result<Token>>() {
public Result<Token> code(Rcli<?> client) throws CadiException, ConnectException, APIException {
// /token?grant_type=client_credential&scope=com.att.aaf+com.att.test
Future<Token> f = client.postForm(null,tokenDF,paramsa);
- if(f.get(timeout)) {
+ if (f.get(timeout)) {
return Result.ok(f.code(),f.value);
} else {
return Result.err(f.code(), f.body());
}
});
String key = TokenClientFactory.getKey(okind,client_id, username, hash, scope);
- if(rt.isOK()) {
+ if (rt.isOK()) {
try {
return Result.ok(200,factory.putTimedToken(key, rt.value, hash));
} catch (IOException e) {
//TODO what to do here?
return Result.err(999, e.getMessage());
}
- } else if(rt.code==404) {
+ } else if (rt.code==404) {
factory.deleteFromDisk(key);
}
return Result.err(rt);
}
public Result<Introspect> introspect(final String token) throws APIException, LocatorException, CadiException {
- if(ss==null) {
+ if (ss==null) {
throw new APIException("client_creds(...) must be set before introspecting Access Tokens");
}
params.toArray(paramsa);
// /token?grant_type=client_credential&scope=com.att.aaf+com.att.test
Future<Introspect> f = client.postForm(null,introspectDF,paramsa);
- if(f.get(timeout)) {
+ if (f.get(timeout)) {
return Result.ok(f.code(),f.value);
} else {
return Result.err(f.code(), f.body());
}
);
}
-
+
private String addScope(String[] scopes) {
String rv = null;
StringBuilder scope=null;
boolean first = true;
- for(String s : scopes) {
- if(first) {
+ for (String s : scopes) {
+ if (first) {
scope = new StringBuilder();
scope.append("scope=");
first=false;
}
scope.append(s);
}
- if(scope!=null) {
+ if (scope!=null) {
rv=scope.toString();
}
return rv;
// Nothing to do
break;
}
-
- // Set Credentials appropriate
+
+ // Set Credentials appropriate
switch(authn_method) {
case client_credentials:
- if(client_id!=null) {
+ if (client_id!=null) {
params.add("client_id="+client_id);
}
-
- if(enc_client_secret!=null) {
+
+ if (enc_client_secret!=null) {
try {
params.add("client_secret="+URLEncoder.encode(new String(factory.symm.decode(enc_client_secret)),UTF_8));
} catch (IOException e) {
throw new APIException("Error Decrypting Password",e);
}
}
-
- if(username!=null) {
+
+ if (username!=null) {
params.add("username="+username);
}
break;
case refresh_token:
- if(client_id!=null) {
+ if (client_id!=null) {
params.add("client_id="+client_id);
}
-
- if(enc_client_secret!=null) {
+
+ if (enc_client_secret!=null) {
try {
params.add("client_secret="+URLEncoder.encode(new String(factory.symm.decode(enc_client_secret)),UTF_8));
} catch (IOException e) {
break;
case password:
- if(client_id!=null) {
+ if (client_id!=null) {
params.add("client_id="+client_id);
}
-
- if(enc_client_secret!=null) {
+
+ if (enc_client_secret!=null) {
try {
params.add("client_secret="+ URLEncoder.encode(new String(factory.symm.decode(enc_client_secret)),UTF_8));
} catch (IOException e) {
throw new APIException("Error Decrypting Password",e);
}
}
- if(username!=null) {
+ if (username!=null) {
params.add("username="+username);
}
-
- if(enc_password!=null) {
+
+ if (enc_password!=null) {
try {
params.add("password="+ URLEncoder.encode(new String(factory.symm.decode(enc_password)),UTF_8));
} catch (IOException e) {
throw new APIException("Error Decrypting Password",e);
}
}
-
+
break;
default:
// Nothing to do