Friday, 8 April 2016

Rest-SCIM service for CreateUser/modify/view/delete in OIM

SCIM service has been added as a new functionality in OIM PS3.
The below java has the create/modify/view and delete Functionality.

The following jars are required to compile the java

Inline image 1


package oracle.iam.webservice;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.ProtocolException;
import java.net.URL;
import org.apache.commons.httpclient.HttpClient;
import org.apache.commons.httpclient.methods.PostMethod;
import org.apache.commons.httpclient.methods.StringRequestEntity;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;

public class SCIMUserOperations {

private String userName = "xelsysadm";
private String password = "testertt";

public void createUser() {

String authString = userName + ":" + password;
String authStringEnc = "Basic " + new String(new Decoder.BASE64Encoder().encode(authString.getBytes()));
System.out.println("Base64 encoded auth string: " + authStringEnc);
URL url = null;
try {
JSONObject obj = new JSONObject();
JSONObject obj2 = new JSONObject();
JSONObject homeValue = new JSONObject();
JSONObject homeOrg = new JSONObject();
JSONArray schemas = new JSONArray();
JSONArray email = new JSONArray();
JSONObject objEmail = new JSONObject();

schemas.put("urn:ietf:params:scim:schemas:core:2.0:User");
schemas.put("urn:ietf:params:scim:schemas:extension:enterprise:2.0:User");
schemas.put("urn:ietf:params:scim:schemas:extension:oracle:2.0:OIG:User");
schemas.put("urn:ietf:params:scim:schemas:extension:oracle:2.0:IDM:User");

obj.put("schemas", schemas);
obj.put("userName", "NAPI3"); // UserLogin

obj2.put("familyName", "UserS02"); // LastName
obj2.put("givenName", "TestS02"); // FirstName
obj2.put("middleName", "ts02");
obj2.put("honorificSuffix", "III");
obj.put("name", obj2);

obj.put("displayName", "NAPI4 UserS02");
obj.put("profileUrl", "http://192.1.56.101:14000/N1API");

objEmail.put("value", "TestS0222@gmail.com");
objEmail.put("type", "work");
email.put(objEmail);
obj.put("emails", email);

obj.put("userType", "EMP");
obj.put("title", "Tour Guide");
obj.put("preferredLanguage", "en-US");
obj.put("locale", "en-US");
obj.put("timezone", "America/Los_Angeles");

homeValue.put("value", "21");
homeOrg.put("homeOrganization", homeValue);
obj.put("organization", "Active");
obj.put("urn:ietf:params:scim:schemas:extension:oracle:2.0:OIG:User", homeOrg);

System.out.println("Jason object is --->" + obj);

HttpURLConnection connection = null;
connection = (HttpURLConnection) url.openConnection();
connection.setRequestMethod("POST");
connection.setRequestProperty("Content-Type", "application/scim+json");
connection.setRequestProperty("Authorization", authStringEnc);
connection.setConnectTimeout(5000);
connection.setDoOutput(true);
connection.setReadTimeout(5000);
OutputStreamWriter out = new OutputStreamWriter(connection.getOutputStream());
out.write(obj.toString());
out.close();

BufferedReader in = new BufferedReader(new InputStreamReader(connection.getInputStream()));
System.out.println("Buffered input is" + in);
System.out.println("Response code from server is ::" + connection.getResponseCode());
System.out.println("User created successfully");
} catch (ProtocolException e) {
e.printStackTrace();
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} catch (JSONException e) {
e.printStackTrace();
}

}

public void fetchUserDetails(String userLogin) {

String authString = userName + ":" + password;
String authStringEnc = "Basic " + new String(new Decoder.BASE64Encoder().encode(authString.getBytes()));
System.out.println("Base64 encoded auth string: " + authStringEnc);
URL url = null;
try {
url = new URL(" http://192.1.56.101:14000/idaas/im/scim/v1/Users?filter=(userName co " + userLogin + ")");
HttpURLConnection connection = null;
connection = (HttpURLConnection) url.openConnection();
connection.setRequestMethod("GET");
connection.setRequestProperty("Accept", "application/scim+json");
connection.setRequestProperty("Authorization", authStringEnc);
connection.setConnectTimeout(5000);
connection.setReadTimeout(5000);

BufferedReader in = null;
in = new BufferedReader(new InputStreamReader(connection.getInputStream()));
System.out.println(in.readLine());
System.out.println("\n REST Service Invoked Successfully..");
in.close();

} catch (ProtocolException e) {
e.printStackTrace();
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}

public void modifyUserDetails(String userKey) {

PostMethod m = new PostMethod("http://192.1.56.101:14000/idaas/im/scim/v1/Users/" + userKey) {
@Override
public String getName() {
return "PATCH";
}
};

String authString = userName + ":" + password;
String authStringEnc = "Basic " + new String(new Decoder.BASE64Encoder().encode(authString.getBytes()));
System.out.println("Base64 encoded auth string: " + authStringEnc);
m.setRequestHeader("Authorization", authStringEnc);
try {
JSONObject obj = new JSONObject();
JSONObject obj2 = new JSONObject();
JSONArray schemas = new JSONArray();
JSONArray operation = new JSONArray();
schemas.put("urn:ietf:params:scim:api:messages:2.0:PatchOp");
obj.put("schemas", schemas);
obj2.put("op", "replace");
obj2.put("value", "displayName nvAPI");
obj2.put("path", "displayName");

operation.put(obj2);
obj.put("Operations", operation);

m.setRequestEntity(new StringRequestEntity(obj.toString(), "application/scim+json", "UTF-8"));
HttpClient c = new HttpClient();
int sc = c.executeMethod(m);
System.out.println("status code returned is :: " + sc);
System.out.println("Jason object is --->" + obj);

} catch (JSONException e) {
e.printStackTrace();
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}

}

public void deleteUser(String userKey) {

String authString = userName + ":" + password;
String authStringEnc = "Basic " + new String(new Decoder.BASE64Encoder().encode(authString.getBytes()));
System.out.println("Base64 encoded auth string: " + authStringEnc);
URL url = null;
try {
HttpURLConnection connection = null;
connection = (HttpURLConnection) url.openConnection();
connection.setRequestMethod("DELETE");
connection.setRequestProperty("Accept", "application/scim+json");
connection.setRequestProperty("Authorization", authStringEnc);
connection.setConnectTimeout(5000);
connection.setReadTimeout(5000);
System.out.println("\n REST Service Invoked Successfully..");
} catch (ProtocolException e) {
e.printStackTrace();
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}

public static void main(String[] args) {
SCIMUserOperations scimOperations = new SCIMUserOperations();
scimOperations.createUser();
// scimOperations.fetchUserDetails("NAPI");
// scimOperations.modifyUserDetails("142");
// scimOperations.deleteUser("143");

}

}



Thursday, 18 February 2016

Get List of Accounts Provisioned to User

public List<String> getAccountsProviisonedToUser(String userLogin,String appInstName){



String userKey=getUserKey(userLogin);

try {

if(userKey.length()>0){


List<Account> accounts=provisionService.getAccountsProvisionedToUser(userKey);


FormService formService=new FormService();


for (Account account : accounts)


{

String accountId = account.getAccountID();

String accntName = account.getAppInstance().getApplicationInstanceName();

String accountStatus = account.getAccountStatus();

Date date=account.getProvisionedOnDate();

String pid=account.getProcessInstanceKey();


FormInfo formInfo = account.getAppInstance().getAccountForm();



if(appInstName.equalsIgnoreCase(accntName) ){



System.out.println("App Inst Name::"+accntName);

System.out.println("App Inst Status::"+accountStatus);



System.out.println("**********************************************************************************");

System.out.println("*************************FORM DETAILS*********************************************");

System.out.println("*******FOR USER::"+userLogin+"****App Inst Status::"+accountStatus+"**************");


@SuppressWarnings("unchecked")

Map<Object,Object> formValues= formService.getProcessFormValues(Long.parseLong(pid),formInstOp);


if(formValues.containsKey(formInfo.getName()+"_NOTE")){

formValues.remove(formInfo.getName()+"_NOTE");


}
//System.out.println("FormValues::"+formValues);


for (String singleField : formValues.toString().split(",")) {

System.out.println(singleField);


}
System.out.println("**********************************************************************************");





}

}
}else{

System.out.println("USER NOT FOUND");


}
} catch (UserNotFoundException e) {


e.printStackTrace();
} catch (GenericProvisioningException e) {



e.printStackTrace();
} catch (NumberFormatException e) {

// TODO Auto-generated catch block


e.printStackTrace();
} catch (Exception e) {

// TODO Auto-generated catch block


e.printStackTrace();

}
return null;



}