{"id":5851,"date":"2012-09-05T16:47:24","date_gmt":"2012-09-05T21:47:24","guid":{"rendered":"http:\/\/jianmingli.com\/wp\/?p=5851"},"modified":"2012-10-11T14:40:17","modified_gmt":"2012-10-11T19:40:17","slug":"openidm2-examples","status":"publish","type":"post","link":"https:\/\/jianmingli.com\/wp\/?p=5851","title":{"rendered":"OpenIDM2: Examples"},"content":{"rendered":"<div class='toc wptoc'>\n<h2>Contents<\/h2>\n<ol class='toc-odd level-1'>\n\t<li>\n\t\t<a href=\"#Setup_OpenDJ_LDAP_Server\">Setup OpenDJ LDAP Server<\/a>\n\t\t<ol class='toc-even level-2'>\n\t\t\t<li>\n\t\t\t\t<a href=\"#Start_OpenDJ\">Start OpenDJ<\/a>\n\t\t\t<\/li>\n\t\t<\/ol>\n\t<li>\n\t\t<a href=\"#LDAP_to_OpenIDM\">LDAP to OpenIDM<\/a>\n\t<\/li>\n\t<li>\n\t\t<a href=\"#OpenIDM__LDAP\">OpenIDM <- to\/from -> LDAP<\/a>\n\t\t<ol class='toc-even level-2'>\n\t\t\t<li>\n\t\t\t\t<a href=\"#Copy_Scripts\">Copy Scripts<\/a>\n\t\t\t<\/li>\n\t\t\t<li>\n\t\t\t\t<a href=\"#Synchronize\">Synchronize<\/a>\n\t\t\t<\/li>\n\t\t<\/ol>\n\t<li>\n\t\t<a href=\"#LDAP__LDAP\">LDAP <- to\/from -> LDAP<\/a>\n\t<\/li>\n\t<li>\n\t\t<a href=\"#CSV_to_OpenIDM\">CSV to OpenIDM<\/a>\n\t<\/li>\n\t<li>\n\t\t<a href=\"#References\">References<\/a>\n\t<\/li>\n<\/ol>\n<\/ol>\n<\/div>\n<div class='wptoc-end'>&nbsp;<\/div>\n<span id=\"Setup_OpenDJ_LDAP_Server\"><h2>Setup OpenDJ LDAP Server<\/h2><\/span>\n<p>* See <a href=\"?p=5842\">this post<\/a><\/p>\n<span id=\"Start_OpenDJ\"><h3>Start OpenDJ<\/h3><\/span>\n<p>* Start OpenDJ: OpenDJ_Home\/bin\/start-ds<\/p>\n<span id=\"LDAP_to_OpenIDM\"><h2>LDAP to OpenIDM<\/h2><\/span>\n<p>* Go to OpenIDM home directory:<\/p>\n<pre lang=\"bash\">\r\n$ ls\r\naudit   cli.sh      curl         logs     security     startup.sh\r\nbin     conf        db           samples  shutdown.sh  workflow\r\nbundle  connectors  felix-cache  script   startup.bat\r\n<\/pre>\n<p>* Shutdown OpenIDM if running.<br \/>\n* Copy configuration files from <em>sampes\/sample2<\/em> directory:<\/p>\n<pre lang=\"bash\">\r\ncp -r samples\/sample2\/conf .\r\n<\/pre>\n<p>* Startup OpenIDM<\/p>\n<pre lang=\"bash\">\r\n.\/startup.sh\r\n<\/pre>\n<p>* Retrieve all users <em>before<\/em> reconciliation:<\/p>\n<pre lang=\"bash\">\r\ncurl \\\r\n  --header \"X-OpenIDM-Username: openidm-admin\" \\\r\n  --header \"X-OpenIDM-Password: openidm-admin\" http:\/\/localhost:8080\/openidm\/managed\/user\/?_query-id=query-all-ids\r\n\r\n{\"query-time-ms\":0,\"result\":[],\"conversion-time-ms\":0}\r\n<\/pre>\n<p>* Initiate reconciliation:<\/p>\n<pre lang=\"bash\">\r\ncurl \\\r\n  --header \"X-OpenIDM-Username: openidm-admin\" \\\r\n  --header \"X-OpenIDM-Password: openidm-admin\" \\\r\n  --request POST \"http:\/\/localhost:8080\/openidm\/sync?_action=recon&mapping=systemLdapAccounts_managedUser\"\r\n\r\n{\"reconId\":\"edcec6d0-bf75-42fe-9aef-9f40d6d1e7fc\"}\r\n<\/pre>\n<p>* Retrieve all users after reconciliation:<\/p>\n<pre lang=\"bash\">\r\ncurl \\\r\n  --header \"X-OpenIDM-Username: openidm-admin\" \\\r\n  --header \"X-OpenIDM-Password: openidm-admin\" http:\/\/localhost:8080\/openidm\/managed\/user\/?_query-id=query-all-ids\r\n\r\n{\"query-time-ms\":1,\"result\":[{\"_id\":\"9fcd9018-37d1-4a48-9ee5-b9c14fd4cc2d\",\"_rev\":\"0\"}],\"conversion-time-ms\":0}\r\n<\/pre>\n<span id=\"OpenIDM__LDAP\"><h2>OpenIDM <- to\/from -> LDAP<\/h2><\/span>\n<span id=\"Copy_Scripts\"><h3>Copy Scripts<\/h3><\/span>\n<p>* Go to OpenIDM home directory.<br \/>\n* Shutdown OpenIDM if running.<br \/>\n* Copy sample scripts:<\/p>\n<pre lang=\"bash\">\r\ncp -r samples\/sample2b\/conf .\r\ncp -r samples\/sample2b\/script .\r\n\r\n# Alernatively:\r\ncp samples\/sample2b\/script\/ldapBackCorrelationQuery.js script\/\r\nmanually append \"managedUser_systemLdapAccounts\" section from samples\/sample2b\/conf\/sync.json to conf\/sync.json\r\n<\/pre>\n<p>* <em>conf\/sync.json<\/em> specifies mappings:<br \/>\n&#8211; ldap &#8211; to -> OpenIDM:<\/p>\n<pre lang=\"bash\">\r\n{\r\n    \"mappings\" : [\r\n        {\r\n            \"name\" : \"systemLdapAccounts_managedUser\",\r\n            \"source\" : \"system\/ldap\/account\",\r\n            \"target\" : \"managed\/user\",\r\n            \"properties\" : [\r\n                {\r\n            \"source\" : \"cn\",\r\n            \"target\" : \"displayName\"\r\n                },\r\n...\r\n}\r\n<\/pre>\n<p>&#8211; OpendIDM &#8211; to -> ldap:<\/p>\n<pre lang=\"bash\">\r\n        {\r\n        \"name\" : \"managedUser_systemLdapAccounts\",\r\n        \"source\" : \"managed\/user\",\r\n        \"target\" : \"system\/ldap\/account\",\r\n        \"links\" : \"systemLdapAccounts_managedUser\",\r\n        \"correlationQuery\" : {\r\n            \"type\" : \"text\/javascript\",\r\n            \"file\" : \"script\/ldapBackCorrelationQuery.js\"\r\n        },\r\n            \"properties\" : [\r\n                {\r\n            \"source\" : \"givenName\",\r\n            \"target\" : \"givenName\"\r\n                },\r\n...\r\n<\/pre>\n<span id=\"Synchronize\"><h3>Synchronize<\/h3><\/span>\n<p>* Start OpenIDM.<br \/>\n* Retrieve all users before synchronization:<\/p>\n<pre lang=\"bash\">\r\ncurl \\\r\n  --header \"X-OpenIDM-Username: openidm-admin\" \\\r\n  --header \"X-OpenIDM-Password: openidm-admin\" http:\/\/localhost:8080\/openidm\/managed\/user\/?_query-id=query-all-ids\r\n<\/pre>\n<p>* Synchronize:<\/p>\n<pre lang=\"bash\">\r\ncurl \\\r\n  --header \"X-OpenIDM-Username: openidm-admin\" \\\r\n  --header \"X-OpenIDM-Password: openidm-admin\" \\\r\n  --request POST \\\r\n  \"http:\/\/localhost:8080\/openidm\/sync?_action=recon&mapping=systemLdapAccounts_managedUser\"\r\n\r\n{\"reconId\":\"e0e7fcd0-c8f1-4960-8fb2-d34b9ba2c8bd\"}\r\n<\/pre>\n<p>* Retrieve all users after synchronization:<\/p>\n<pre lang=\"bash\">\r\ncurl \\\r\n --header \"X-OpenIDM-Username: openidm-admin\" \\\r\n --header \"X-OpenIDM-Password: openidm-admin\" http:\/\/localhost:8080\/openidm\/managed\/user\/?_query-id=query-all-ids\r\n\r\n{\"query-time-ms\":1,\"result\":[{\"_id\":\"9fcd9018-37d1-4a48-9ee5-b9c14fd4cc2d\",\"_rev\":\"0\"}],\"conversion-time-ms\":0}\r\n<\/pre>\n<p>* Manually add a user to OpenIDM:<\/p>\n<pre lang=\"bash\">\r\ncurl \\\r\n  --header \"X-OpenIDM-Username: openidm-admin\" \\\r\n  --header \"X-OpenIDM-Password: openidm-admin\" \\\r\n  --request PUT \\\r\n  --data \"{\\\"email\\\":\\\"fdoe@example.com\\\",\\\"familyName\\\":\\\"Doe\\\",\\\"userName\\\":\\\"fdoe\\\", \\\r\n  \\\"givenName\\\":\\\"Felicitas\\\",\\\"displayName\\\":\\\"Felicitas Doe\\\"}\" \"http:\/\/localhost:8080\/openidm\/managed\/user\/repoUser1\"\r\n\r\n{\"_id\":\"repoUser1\",\"_rev\":\"0\"}\r\n<\/pre>\n<p>* Synchronize again:<\/p>\n<pre lang=\"bash\">\r\ncurl \\\r\n  --header \"X-OpenIDM-Username: openidm-admin\" \\\r\n  --header \"X-OpenIDM-Password: openidm-admin\" \\\r\n  --request POST \"http:\/\/localhost:8080\/openidm\/sync?_action=recon&mapping=systemLdapAccounts_managedUser\"\r\n\r\n{\"reconId\":\"6b5d31ff-199f-48c6-b00a-d705ab943759\"}\r\n<\/pre>\n<p>* Check LDAP for new user synched from OpenIDM<\/p>\n<span id=\"\"><h6><a href=\"https:\/\/jianmingli.com\/wp\/wp-content\/uploads\/2012\/09\/OpenIDM_sample_2way_sync_ldap_newuser.jpg\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/jianmingli.com\/wp\/wp-content\/uploads\/2012\/09\/OpenIDM_sample_2way_sync_ldap_newuser.jpg\" alt=\"\" title=\"OpenIDM_sample_2way_sync_ldap_newuser\" width=\"293\" height=\"179\" class=\"aligncenter size-full wp-image-5852\" \/><\/a><\/h6><\/span>\n<span id=\"LDAP__LDAP\"><h2>LDAP <- to\/from -> LDAP<\/h2><\/span>\n<pre lang=\"bash\">\r\n[jli@openidmbox Desktop]$ cd \/opt\/openidm\/openidm\/\r\n[jli@openidmbox openidm]$ ls\r\naudit   cli.sh      curl         --header   samples   shutdown.sh  workflow\r\nbin     conf        db           logs       script    startup.bat\r\nbundle  connectors  felix-cache  --request  security  startup.sh\r\n[jli@openidmbox openidm]$ cp -r samples\/sample6\/conf .\r\n<\/pre>\n<span id=\"CSV_to_OpenIDM\"><h2>CSV to OpenIDM<\/h2><\/span>\n<p>* Copy $OPENIDM_HOME\/samples\/sample4\/conf\/provisioner.openicf-csv.json to $OPENIDM_HOME\/conf<\/p>\n<pre lang=\"bash\">\r\ncd $OPENIDM_HOME\/\r\ncp samples\/sample4\/conf\/provisioner.openicf-csv.json conf\r\n<\/pre>\n<pre lang=\"bash\">\r\n$ pwd\r\n\/opt\/openidm\/builtFromSrc\/openidm\r\n$ cp samples\/sample4\/conf\/provisioner.openicf-csv.json conf\r\n$ cat conf\/provisioner.openicf-csv.json \r\n{\r\n    \"name\" : \"HR\",\r\n    \"connectorRef\" : {\r\n        \"connectorHostRef\" : \"#LOCAL\",\r\n        \"connectorName\" : \"org.forgerock.openicf.csvfile.CSVFileConnector\",\r\n        \"bundleName\" : \"org.forgerock.openicf.connectors.file.openicf-csvfile-connector\",\r\n        \"bundleVersion\" : \"1.1.0.0\"\r\n    },\r\n    \"poolConfigOption\" : {\r\n        \"maxObjects\" : 10,\r\n        \"maxIdle\" : 10,\r\n        \"maxWait\" : 150000,\r\n        \"minEvictableIdleTimeMillis\" : 120000,\r\n        \"minIdle\" : 1\r\n    },\r\n    \"operationTimeout\" : {\r\n        \"CREATE\" : -1,\r\n        \"VALIDATE\" : -1,\r\n        \"TEST\" : -1,\r\n        \"SCRIPT_ON_CONNECTOR\" : -1,\r\n        \"SCHEMA\" : -1,\r\n        \"DELETE\" : -1,\r\n        \"UPDATE\" : -1,\r\n        \"SYNC\" : -1,\r\n        \"AUTHENTICATE\" : -1,\r\n        \"GET\" : -1,\r\n        \"SCRIPT_ON_RESOURCE\" : -1,\r\n        \"SEARCH\" : -1\r\n    },\r\n    \"configurationProperties\" : {\r\n        \"filePath\" : \"data\/hr.csv\",\r\n        \"uniqueAttribute\" : \"uid\",\r\n        \"nameAttribute\" : \"uid\",\r\n        \"passwordAttribute\" : \"password\"\r\n    },\r\n    \"objectTypes\" : {\r\n        \"account\" : {\r\n            \"$schema\" : \"http:\/\/json-schema.org\/draft-03\/schema\",\r\n            \"id\" : \"__ACCOUNT__\",\r\n            \"type\" : \"object\",\r\n            \"nativeType\" : \"__ACCOUNT__\",\r\n            \"properties\" : {\r\n                \"employeeNumber\" : {\r\n                    \"type\" : \"string\",\r\n                    \"nativeName\" : \"employeeNumber\",\r\n                    \"nativeType\" : \"string\"\r\n                },\r\n                \"mail\" : {\r\n                    \"type\" : \"string\",\r\n                    \"nativeName\" : \"email\",\r\n                    \"nativeType\" : \"string\"\r\n                },\r\n                \"uid\" : {\r\n                    \"type\" : \"string\",\r\n                    \"required\" : true,\r\n                    \"nativeName\" : \"__NAME__\",\r\n                    \"nativeType\" : \"string\"\r\n                },\r\n                \"password\" : {\r\n                    \"type\" : \"string\",\r\n                    \"nativeName\" : \"__PASSWORD__\",\r\n                    \"nativeType\" : \"JAVA_TYPE_GUARDEDSTRING\",\r\n                    \"flags\" : [ ]\r\n                },\r\n                \"lastName\" : {\r\n                    \"type\" : \"string\",\r\n                    \"required\" : true,\r\n                    \"nativeName\" : \"lastName\",\r\n                    \"nativeType\" : \"string\"\r\n                },\r\n                \"givenName\" : {\r\n                    \"type\" : \"string\",\r\n                    \"nativeName\" : \"firstName\",\r\n                    \"nativeType\" : \"string\"\r\n                }\r\n            }\r\n        }\r\n    },\r\n    \"operationOptions\" : { }\r\n}\r\n<\/pre>\n<p>* Add <strong>systemHrAccounts_managedUser<\/strong> mapping to <em>conf\/sync.json<\/em><\/p>\n<pre lang=\"bash\">\r\n        {\r\n        \"name\" : \"systemHrAccounts_managedUser\",\r\n        \"source\" : \"system\/HR\/account\",\r\n        \"target\" : \"managed\/user\",\r\n            \"properties\" : [\r\n                {\r\n                    \"source\" : \"employeeNumber\",\r\n                    \"target\" : \"employeeNumber\"\r\n                },\r\n                {\r\n                    \"source\" : \"mail\",\r\n                    \"target\" : \"email\"\r\n                },\r\n                {\r\n                    \"source\" : \"uid\",\r\n                    \"target\" : \"userName\"\r\n                },\r\n                {\r\n                    \"source\" : \"uid\",\r\n                    \"target\" : \"_id\"\r\n                },\r\n                {\r\n                    \"source\" : \"lastName\",\r\n                    \"target\" : \"familyName\"\r\n                },\r\n                {\r\n                    \"source\" : \"givenName\",\r\n                    \"target\" : \"givenName\"\r\n                },\r\n                {\r\n                    \"source\" : \"password\",\r\n                    \"target\" : \"password\"\r\n                }\r\n            ],\r\n            \"policies\" : [\r\n                {\r\n                    \"situation\" : \"CONFIRMED\",\r\n                    \"action\" : \"UPDATE\"\r\n                },\r\n                {\r\n                    \"situation\" : \"FOUND\",\r\n                    \"action\" : \"UPDATE\"\r\n                },\r\n                {\r\n                    \"situation\" : \"ABSENT\",\r\n                    \"action\" : \"CREATE\"\r\n                },\r\n                {\r\n                    \"situation\" : \"AMBIGUOUS\",\r\n                    \"action\" : \"EXCEPTION\"\r\n                },\r\n                {\r\n                    \"situation\" : \"MISSING\",\r\n                    \"action\" : \"UNLINK\"\r\n                },\r\n                {\r\n                    \"situation\" : \"SOURCE_MISSING\",\r\n                    \"action\" : \"IGNORE\"\r\n                },\r\n                {\r\n                    \"situation\" : \"UNQUALIFIED\",\r\n                    \"action\" : \"IGNORE\"\r\n                },\r\n                {\r\n                    \"situation\" : \"UNASSIGNED\",\r\n                    \"action\" : \"IGNORE\"\r\n                }\r\n            ]\r\n        }\r\n<\/pre>\n<p>* Copy <em>$OPENIDM_HOME\/samples\/sample4\/data\/hr.csv<\/em> to <em>$OPENIDM_HOME\/data<\/em> directory<\/p>\n<pre lang=\"bash\">\r\ncd $OPENIDM_HOME\r\nmkdir data\r\ncp samples\/sample4\/data\/hr.csv data\r\n<\/pre>\n<p>* Restart OpenIDM<br \/>\n* Query all ids:<\/p>\n<pre lang=\"bash\">\r\ncurl \\\r\n  --header \"X-OpenIDM-Username: openidm-admin\" \\\r\n  --header \"X-OpenIDM-Password: openidm-admin\" http:\/\/localhost:8080\/openidm\/managed\/user\/?_query-id=query-all-ids\r\n\r\n{\"query-time-ms\":1,\"result\":[{\"_id\":\"3A066F86-D822-488F-9A21-FEA8E1A03C43\",\"_rev\":\"0\"}],\"conversion-time-ms\":0}\r\n<\/pre>\n<p>* Run reconciliation<\/p>\n<pre lang=\"bash\">\r\ncurl \\\r\n --header \"X-OpenIDM-Username: openidm-admin\" \\\r\n --header \"X-OpenIDM-Password: openidm-admin\" \\\r\n --request POST \"http:\/\/localhost:8080\/openidm\/sync?_action=recon&mapping=systemHrAccounts_managedUser\"\r\n\r\n{\"reconId\":\"926af8c3-3751-492e-b2d6-406a9fe735db\"}\r\n<\/pre>\n<p>* Query all ids again and should get a new id: &#8220;_id&#8221;:&#8221;DDOE&#8221;<\/p>\n<pre lang=\"bash\">\r\ncurl \\\r\n  --header \"X-OpenIDM-Username: openidm-admin\" \\\r\n  --header \"X-OpenIDM-Password: openidm-admin\" http:\/\/localhost:8080\/openidm\/managed\/user\/?_query-id=query-all-ids\r\n\r\n{\"query-time-ms\":7,\"result\":[{\"_id\":\"3A066F86-D822-488F-9A21-FEA8E1A03C43\",\"_rev\":\"0\"},{\"_id\":\"DDOE\",\"_rev\":\"0\"},{\"_id\":\"VDART\",\"_rev\":\"0\"}],\"conversion-time-ms\":0}\r\n<\/pre>\n<span id=\"References\"><h2>References<\/h2><\/span>\n<p>* OpenIDM 2.1.0 Installation Guide: <a href=\"http:\/\/openidm.forgerock.org\/doc\/install-guide\/index.html#chap-samples\">Chapter 3. More OpenIDM Samples<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Setup OpenDJ LDAP Server * See this post Start OpenDJ * Start OpenDJ: OpenDJ_Home\/bin\/start-ds LDAP to OpenIDM * Go to OpenIDM home directory: $ ls audit cli.sh curl logs security startup.sh bin conf db samples shutdown.sh workflow bundle connectors felix-cache &hellip; <a href=\"https:\/\/jianmingli.com\/wp\/?p=5851\">Continue reading <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_exactmetrics_skip_tracking":false,"_exactmetrics_sitenote_active":false,"_exactmetrics_sitenote_note":"","_exactmetrics_sitenote_category":0,"jetpack_post_was_ever_published":false,"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_memberships_contains_paid_content":false,"footnotes":"","jetpack_publicize_message":"","jetpack_publicize_feature_enabled":true,"jetpack_social_post_already_shared":false,"jetpack_social_options":{"image_generator_settings":{"template":"highway","default_image_id":0,"font":"","enabled":false},"version":2}},"categories":[203],"tags":[226,204],"class_list":["post-5851","post","type-post","status-publish","format-standard","hentry","category-openidm","tag-example","tag-openidm-2"],"jetpack_publicize_connections":[],"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"jetpack_shortlink":"https:\/\/wp.me\/p8cRUO-1wn","_links":{"self":[{"href":"https:\/\/jianmingli.com\/wp\/index.php?rest_route=\/wp\/v2\/posts\/5851","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/jianmingli.com\/wp\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/jianmingli.com\/wp\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/jianmingli.com\/wp\/index.php?rest_route=\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/jianmingli.com\/wp\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=5851"}],"version-history":[{"count":13,"href":"https:\/\/jianmingli.com\/wp\/index.php?rest_route=\/wp\/v2\/posts\/5851\/revisions"}],"predecessor-version":[{"id":6242,"href":"https:\/\/jianmingli.com\/wp\/index.php?rest_route=\/wp\/v2\/posts\/5851\/revisions\/6242"}],"wp:attachment":[{"href":"https:\/\/jianmingli.com\/wp\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=5851"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/jianmingli.com\/wp\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=5851"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/jianmingli.com\/wp\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=5851"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}