README revision ab23f99057cc8e742bb3c2bf724a68442bedaa5d
bd3ace813dea26b3064f232eab359d3a517e9c87vboxsync/**
bd3ace813dea26b3064f232eab359d3a517e9c87vboxsync * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
ed298623061b963361a1345a0982861ec1300d9cvboxsync *
bd3ace813dea26b3064f232eab359d3a517e9c87vboxsync * Copyright (c) 2014 ForgeRock AS. All rights reserved.
bd3ace813dea26b3064f232eab359d3a517e9c87vboxsync *
bd3ace813dea26b3064f232eab359d3a517e9c87vboxsync * The contents of this file are subject to the terms
bd3ace813dea26b3064f232eab359d3a517e9c87vboxsync * of the Common Development and Distribution License
bd3ace813dea26b3064f232eab359d3a517e9c87vboxsync * (the License). You may not use this file except in
bd3ace813dea26b3064f232eab359d3a517e9c87vboxsync * compliance with the License.
bd3ace813dea26b3064f232eab359d3a517e9c87vboxsync *
bd3ace813dea26b3064f232eab359d3a517e9c87vboxsync * You can obtain a copy of the License at
bd3ace813dea26b3064f232eab359d3a517e9c87vboxsync * http://forgerock.org/license/CDDLv1.0.html
bd3ace813dea26b3064f232eab359d3a517e9c87vboxsync * See the License for the specific language governing
bd3ace813dea26b3064f232eab359d3a517e9c87vboxsync * permission and limitations under the License.
bd3ace813dea26b3064f232eab359d3a517e9c87vboxsync *
bd3ace813dea26b3064f232eab359d3a517e9c87vboxsync * When distributing Covered Code, include this CDDL
bd3ace813dea26b3064f232eab359d3a517e9c87vboxsync * Header Notice in each file and include the License file
bd3ace813dea26b3064f232eab359d3a517e9c87vboxsync * at http://forgerock.org/license/CDDLv1.0.html
bd3ace813dea26b3064f232eab359d3a517e9c87vboxsync * If applicable, add the following below the CDDL Header,
bd3ace813dea26b3064f232eab359d3a517e9c87vboxsync * with the fields enclosed by brackets [] replaced by
bd3ace813dea26b3064f232eab359d3a517e9c87vboxsync * your own identifying information:
bd3ace813dea26b3064f232eab359d3a517e9c87vboxsync * "Portions Copyrighted [year] [name of copyright owner]"
bd3ace813dea26b3064f232eab359d3a517e9c87vboxsync */
bd3ace813dea26b3064f232eab359d3a517e9c87vboxsync
bd3ace813dea26b3064f232eab359d3a517e9c87vboxsync -------------------------------------------------------------------------------------------------
bd3ace813dea26b3064f232eab359d3a517e9c87vboxsync GoogleApps Connector Sample
6095269a3237b1ef8bf4edefc11f2d888d8a41ebvboxsync -------------------------------------------------------------------------------------------------
bd3ace813dea26b3064f232eab359d3a517e9c87vboxsync
ed298623061b963361a1345a0982861ec1300d9cvboxsync This sample will provide an example of creating a user and group. It will show how to add a user
bd3ace813dea26b3064f232eab359d3a517e9c87vboxsync to the group that you have created. The design of this sample is to demonstrate that the googleapps
bd3ace813dea26b3064f232eab359d3a517e9c87vboxsync connector can be used within OpenIDM. In addition, it will explain getting a refresh token from
bd3ace813dea26b3064f232eab359d3a517e9c87vboxsync google. You can use the sample configuration to get you started on your own set of implementation
bd3ace813dea26b3064f232eab359d3a517e9c87vboxsync requirements.
bd3ace813dea26b3064f232eab359d3a517e9c87vboxsync
bd3ace813dea26b3064f232eab359d3a517e9c87vboxsync -------------------------------------------------------------------------------------------------
bd3ace813dea26b3064f232eab359d3a517e9c87vboxsync Getting a Refresh Token From Google
bd3ace813dea26b3064f232eab359d3a517e9c87vboxsync -------------------------------------------------------------------------------------------------
bd3ace813dea26b3064f232eab359d3a517e9c87vboxsync
bd3ace813dea26b3064f232eab359d3a517e9c87vboxsync Before we begin to use the googleapps-connector, we will need to obtain a refresh token from google.
bd3ace813dea26b3064f232eab359d3a517e9c87vboxsync You will need a google apps account so that you can obtain a client_secret.json file which will have
bd3ace813dea26b3064f232eab359d3a517e9c87vboxsync the refresh token the googleapps-connector will use. For this sample we will demonstrate one way to
bd3ace813dea26b3064f232eab359d3a517e9c87vboxsync get a refresh token.
bd3ace813dea26b3064f232eab359d3a517e9c87vboxsync
bd3ace813dea26b3064f232eab359d3a517e9c87vboxsync 1) Verify in your google admin console that both of the following APIs are enabled
bd3ace813dea26b3064f232eab359d3a517e9c87vboxsync a. Admin SDK API
bd3ace813dea26b3064f232eab359d3a517e9c87vboxsync b. Enterprise License Manager API
bd3ace813dea26b3064f232eab359d3a517e9c87vboxsync
bd3ace813dea26b3064f232eab359d3a517e9c87vboxsync 2) Acquire a client_secrets.json file. For this sample, we are going to use the OAuth 2.0
bd3ace813dea26b3064f232eab359d3a517e9c87vboxsync Installed Application flow. You can reference the link below for more information.
bd3ace813dea26b3064f232eab359d3a517e9c87vboxsync
bd3ace813dea26b3064f232eab359d3a517e9c87vboxsync https://developers.google.com/maps-engine/documentation/oauth/installedapplication
bd3ace813dea26b3064f232eab359d3a517e9c87vboxsync
bd3ace813dea26b3064f232eab359d3a517e9c87vboxsync 3) Download the google-api-services-admin-directory-rev41-java-1.19.0.zip
bd3ace813dea26b3064f232eab359d3a517e9c87vboxsync
bd3ace813dea26b3064f232eab359d3a517e9c87vboxsync a) Unzip google-api-services-admin-directory-rev41-java-1.19.0.zip
bd3ace813dea26b3064f232eab359d3a517e9c87vboxsync $ unzip google-api-services-admin-directory-rev41-java-1.19.0.zip
bd3ace813dea26b3064f232eab359d3a517e9c87vboxsync b) Copy the googleapps-connector-1.4.0.0.jar to the admin dir
bd3ace813dea26b3064f232eab359d3a517e9c87vboxsync $ cp googleapps-connector-1.4.0.0.jar admin/
bd3ace813dea26b3064f232eab359d3a517e9c87vboxsync c) cd into admin and execute the following command
bd3ace813dea26b3064f232eab359d3a517e9c87vboxsync $ cd admin/
bd3ace813dea26b3064f232eab359d3a517e9c87vboxsync $ java -jar googleapps-connector-1.4.0.0-SNAPSHOT.jar /path/to/client_secrets.json
bd3ace813dea26b3064f232eab359d3a517e9c87vboxsync
bd3ace813dea26b3064f232eab359d3a517e9c87vboxsync It will generate this:
bd3ace813dea26b3064f232eab359d3a517e9c87vboxsync $ java -jar googleapps-connector-1.4.0.0-SNAPSHOT.jar client_secrets.json
bd3ace813dea26b3064f232eab359d3a517e9c87vboxsync Please open the following address in your browser:
bd3ace813dea26b3064f232eab359d3a517e9c87vboxsync https://accounts.google.com/o/oauth2/auth?
bd3ace813dea26b3064f232eab359d3a517e9c87vboxsync access_type=offline
bd3ace813dea26b3064f232eab359d3a517e9c87vboxsync &approval_prompt=force
bd3ace813dea26b3064f232eab359d3a517e9c87vboxsync &client_id=YOUR_CLIENT_ID
bd3ace813dea26b3064f232eab359d3a517e9c87vboxsync &redirect_uri=urn:ietf:wg:oauth:2.0:oob
bd3ace813dea26b3064f232eab359d3a517e9c87vboxsync &response_type=code
bd3ace813dea26b3064f232eab359d3a517e9c87vboxsync &scope=https://www.googleapis.com/auth/admin.directory.group%20
bd3ace813dea26b3064f232eab359d3a517e9c87vboxsync https://www.googleapis.com/auth/admin.directory.orgunit%20
bd3ace813dea26b3064f232eab359d3a517e9c87vboxsync https://www.googleapis.com/auth/admin.directory.user%20
bd3ace813dea26b3064f232eab359d3a517e9c87vboxsync https://www.googleapis.com/auth/apps.licensing
bd3ace813dea26b3064f232eab359d3a517e9c87vboxsync
bd3ace813dea26b3064f232eab359d3a517e9c87vboxsync Attempting to open that address in the default browser now...
bd3ace813dea26b3064f232eab359d3a517e9c87vboxsync Please enter code:
bd3ace813dea26b3064f232eab359d3a517e9c87vboxsync
bd3ace813dea26b3064f232eab359d3a517e9c87vboxsync d) This will open up a browser, where you will have to accept consent. Once you accept consent you
bd3ace813dea26b3064f232eab359d3a517e9c87vboxsync will be given a code that you need to paste back in the terminal where you ran that command
bd3ace813dea26b3064f232eab359d3a517e9c87vboxsync from. This will result in a response that has the following:
bd3ace813dea26b3064f232eab359d3a517e9c87vboxsync
bd3ace813dea26b3064f232eab359d3a517e9c87vboxsync {
bd3ace813dea26b3064f232eab359d3a517e9c87vboxsync "clientId" : "example-client-Id.apps.googleusercontent.com",
bd3ace813dea26b3064f232eab359d3a517e9c87vboxsync "clientSecret" : "generated-sample-token",
bd3ace813dea26b3064f232eab359d3a517e9c87vboxsync "refreshToken" : "generated-refresh-token"
bd3ace813dea26b3064f232eab359d3a517e9c87vboxsync }
bd3ace813dea26b3064f232eab359d3a517e9c87vboxsync
bd3ace813dea26b3064f232eab359d3a517e9c87vboxsync ------------------------------------------------------------------------------------------------------
bd3ace813dea26b3064f232eab359d3a517e9c87vboxsync Running the GoogleApps Connector Sample
bd3ace813dea26b3064f232eab359d3a517e9c87vboxsync ------------------------------------------------------------------------------------------------------
bd3ace813dea26b3064f232eab359d3a517e9c87vboxsync
bd3ace813dea26b3064f232eab359d3a517e9c87vboxsync Before we start the sample, we have to set the domain, clientId, clientSecret, and refreshToken in our
bd3ace813dea26b3064f232eab359d3a517e9c87vboxsync provisioner.openicf-google.json.
bd3ace813dea26b3064f232eab359d3a517e9c87vboxsync
bd3ace813dea26b3064f232eab359d3a517e9c87vboxsync 1) Edit openidm/samples/google-connector/conf/provisioner.openicf-google.json
bd3ace813dea26b3064f232eab359d3a517e9c87vboxsync ...
bd3ace813dea26b3064f232eab359d3a517e9c87vboxsync "configurationProperties": {
bd3ace813dea26b3064f232eab359d3a517e9c87vboxsync "domain": "YOUR_DOMAIN",
bd3ace813dea26b3064f232eab359d3a517e9c87vboxsync "clientId": "YOUR_CLIENT_ID",
bd3ace813dea26b3064f232eab359d3a517e9c87vboxsync "clientSecret": "YOUR_CLIENT_SECRET",
bd3ace813dea26b3064f232eab359d3a517e9c87vboxsync "refreshToken": "YOUR_CLIENT_REFRESH_TOKEN"
bd3ace813dea26b3064f232eab359d3a517e9c87vboxsync },
bd3ace813dea26b3064f232eab359d3a517e9c87vboxsync ...
bd3ace813dea26b3064f232eab359d3a517e9c87vboxsync
bd3ace813dea26b3064f232eab359d3a517e9c87vboxsync Once those properties are set, the connector needs to be enabled by switching the following property
bd3ace813dea26b3064f232eab359d3a517e9c87vboxsync from "false" to "true" :
bd3ace813dea26b3064f232eab359d3a517e9c87vboxsync
bd3ace813dea26b3064f232eab359d3a517e9c87vboxsync ...
bd3ace813dea26b3064f232eab359d3a517e9c87vboxsync "name": "google",
bd3ace813dea26b3064f232eab359d3a517e9c87vboxsync "enabled": true,
bd3ace813dea26b3064f232eab359d3a517e9c87vboxsync ...
bd3ace813dea26b3064f232eab359d3a517e9c87vboxsync
bd3ace813dea26b3064f232eab359d3a517e9c87vboxsync
bd3ace813dea26b3064f232eab359d3a517e9c87vboxsync 2) To run the sample, start OpenIDM with the configuration for google-connector:
bd3ace813dea26b3064f232eab359d3a517e9c87vboxsync $ cd /path/to/openidm
bd3ace813dea26b3064f232eab359d3a517e9c87vboxsync $ ./startup.sh -p samples/google-connector
bd3ace813dea26b3064f232eab359d3a517e9c87vboxsync
bd3ace813dea26b3064f232eab359d3a517e9c87vboxsync 3) For reassurance, lets go ahead and get the status of the google connector.
bd3ace813dea26b3064f232eab359d3a517e9c87vboxsync
bd3ace813dea26b3064f232eab359d3a517e9c87vboxsync $ curl --header "X-OpenIDM-Username: openidm-admin"
bd3ace813dea26b3064f232eab359d3a517e9c87vboxsync --header "X-OpenIDM-Password: openidm-admin"
bd3ace813dea26b3064f232eab359d3a517e9c87vboxsync --header "Content-Type: application/json"
bd3ace813dea26b3064f232eab359d3a517e9c87vboxsync --request POST
bd3ace813dea26b3064f232eab359d3a517e9c87vboxsync "http://localhost:8080/openidm/system/google?_action=test"
bd3ace813dea26b3064f232eab359d3a517e9c87vboxsync
bd3ace813dea26b3064f232eab359d3a517e9c87vboxsync Response should be:
bd3ace813dea26b3064f232eab359d3a517e9c87vboxsync {
bd3ace813dea26b3064f232eab359d3a517e9c87vboxsync "name":"google",
bd3ace813dea26b3064f232eab359d3a517e9c87vboxsync "enabled":true,
bd3ace813dea26b3064f232eab359d3a517e9c87vboxsync "config":"config/provisioner.openicf/google",
bd3ace813dea26b3064f232eab359d3a517e9c87vboxsync "connectorRef":
bd3ace813dea26b3064f232eab359d3a517e9c87vboxsync {
bd3ace813dea26b3064f232eab359d3a517e9c87vboxsync "connectorName":"org.forgerock.openicf.connectors.googleapps.GoogleAppsConnector",
bd3ace813dea26b3064f232eab359d3a517e9c87vboxsync "bundleName":"org.forgerock.openicf.connectors.googleapps-connector",
bd3ace813dea26b3064f232eab359d3a517e9c87vboxsync "bundleVersion":"1.4.0.0-SNAPSHOT"
bd3ace813dea26b3064f232eab359d3a517e9c87vboxsync },
bd3ace813dea26b3064f232eab359d3a517e9c87vboxsync "ok":true
bd3ace813dea26b3064f232eab359d3a517e9c87vboxsync }
bd3ace813dea26b3064f232eab359d3a517e9c87vboxsync
bd3ace813dea26b3064f232eab359d3a517e9c87vboxsync At this point, we should have a googleApps connector ready to do some REST requests!
bd3ace813dea26b3064f232eab359d3a517e9c87vboxsync
bd3ace813dea26b3064f232eab359d3a517e9c87vboxsync ------------------------------------------------------------------------------------------------------
bd3ace813dea26b3064f232eab359d3a517e9c87vboxsync CREATE,READ, UPDATE, DELETE, and QUERY Requests
bd3ace813dea26b3064f232eab359d3a517e9c87vboxsync ------------------------------------------------------------------------------------------------------
bd3ace813dea26b3064f232eab359d3a517e9c87vboxsync
bd3ace813dea26b3064f232eab359d3a517e9c87vboxsync 1) Create a user:
bd3ace813dea26b3064f232eab359d3a517e9c87vboxsync Request:
bd3ace813dea26b3064f232eab359d3a517e9c87vboxsync $ curl --header "X-OpenIDM-Username: openidm-admin"
bd3ace813dea26b3064f232eab359d3a517e9c87vboxsync --header "X-OpenIDM-Password: openidm-admin"
bd3ace813dea26b3064f232eab359d3a517e9c87vboxsync --header "Content-Type: application/json"
bd3ace813dea26b3064f232eab359d3a517e9c87vboxsync --request POST "http://localhost:8080/openidm/system/google/__ACCOUNT__?_action=create"
bd3ace813dea26b3064f232eab359d3a517e9c87vboxsync --data
bd3ace813dea26b3064f232eab359d3a517e9c87vboxsync "{
bd3ace813dea26b3064f232eab359d3a517e9c87vboxsync "__NAME__": "samcarter@yourdomain.com",
bd3ace813dea26b3064f232eab359d3a517e9c87vboxsync "__PASSWORD__" : "password",
bd3ace813dea26b3064f232eab359d3a517e9c87vboxsync "givenName" : "Sam",
bd3ace813dea26b3064f232eab359d3a517e9c87vboxsync "familyName": "Carter",
bd3ace813dea26b3064f232eab359d3a517e9c87vboxsync "agreedToTerms": true,
bd3ace813dea26b3064f232eab359d3a517e9c87vboxsync "changePasswordAtNextLogin" : false
bd3ace813dea26b3064f232eab359d3a517e9c87vboxsync }"
bd3ace813dea26b3064f232eab359d3a517e9c87vboxsync Response:
bd3ace813dea26b3064f232eab359d3a517e9c87vboxsync {
bd3ace813dea26b3064f232eab359d3a517e9c87vboxsync "phones":null,
bd3ace813dea26b3064f232eab359d3a517e9c87vboxsync "givenName":"Sam",
bd3ace813dea26b3064f232eab359d3a517e9c87vboxsync "familyName":"Carter",
bd3ace813dea26b3064f232eab359d3a517e9c87vboxsync "thumbnailPhotoUrl":null,
bd3ace813dea26b3064f232eab359d3a517e9c87vboxsync "addresses":null,
bd3ace813dea26b3064f232eab359d3a517e9c87vboxsync "__NAME__":"samcarter@yourdomain.com",
bd3ace813dea26b3064f232eab359d3a517e9c87vboxsync "changePasswordAtNextLogin":false,
bd3ace813dea26b3064f232eab359d3a517e9c87vboxsync "suspensionReason":null,
bd3ace813dea26b3064f232eab359d3a517e9c87vboxsync "aliases":null,
bd3ace813dea26b3064f232eab359d3a517e9c87vboxsync "customerId":"Cwev45or",
bd3ace813dea26b3064f232eab359d3a517e9c87vboxsync "isDelegatedAdmin":false,
bd3ace813dea26b3064f232eab359d3a517e9c87vboxsync "lastLoginTime":["1970-01-01T00:00:00.000Z"],
bd3ace813dea26b3064f232eab359d3a517e9c87vboxsync "agreedToTerms":true,
bd3ace813dea26b3064f232eab359d3a517e9c87vboxsync "deletionTime":null,
bd3ace813dea26b3064f232eab359d3a517e9c87vboxsync "isAdmin":false,
bd3ace813dea26b3064f232eab359d3a517e9c87vboxsync "creationTime":["2014-09-23T18:54:19.000Z"],
bd3ace813dea26b3064f232eab359d3a517e9c87vboxsync "ims":null,
bd3ace813dea26b3064f232eab359d3a517e9c87vboxsync "organizations":null,
bd3ace813dea26b3064f232eab359d3a517e9c87vboxsync "ipWhitelisted":false,
bd3ace813dea26b3064f232eab359d3a517e9c87vboxsync "fullName":"Sam Carter",
bd3ace813dea26b3064f232eab359d3a517e9c87vboxsync "includeInGlobalAddressList":true,
bd3ace813dea26b3064f232eab359d3a517e9c87vboxsync "isMailboxSetup":false,
bd3ace813dea26b3064f232eab359d3a517e9c87vboxsync "externalIds":null,
bd3ace813dea26b3064f232eab359d3a517e9c87vboxsync "suspended":false,
bd3ace813dea26b3064f232eab359d3a517e9c87vboxsync "nonEditableAliases":null,
bd3ace813dea26b3064f232eab359d3a517e9c87vboxsync "orgUnitPath":"/",
bd3ace813dea26b3064f232eab359d3a517e9c87vboxsync "relations":null,
bd3ace813dea26b3064f232eab359d3a517e9c87vboxsync "emails":
bd3ace813dea26b3064f232eab359d3a517e9c87vboxsync [
bd3ace813dea26b3064f232eab359d3a517e9c87vboxsync {
bd3ace813dea26b3064f232eab359d3a517e9c87vboxsync "address":"samcarter@yourdomain.com",
bd3ace813dea26b3064f232eab359d3a517e9c87vboxsync "primary":true
bd3ace813dea26b3064f232eab359d3a517e9c87vboxsync }
bd3ace813dea26b3064f232eab359d3a517e9c87vboxsync ],
bd3ace813dea26b3064f232eab359d3a517e9c87vboxsync "_id":"101643010677712061243",
bd3ace813dea26b3064f232eab359d3a517e9c87vboxsync "_rev":"\"SHoRIPAZisvsSqsLJr3m3XS9Uw4/RfZOwrjqrpRsO6PCGNfEp2H00Ds\""
bd3ace813dea26b3064f232eab359d3a517e9c87vboxsync }
bd3ace813dea26b3064f232eab359d3a517e9c87vboxsync
bd3ace813dea26b3064f232eab359d3a517e9c87vboxsync Note the complex data structure for the "emails" attribute. Google uses complex data structure for some attributes
bd3ace813dea26b3064f232eab359d3a517e9c87vboxsync like email, addresses, phone numbers, etc., which will also appear in some of the queries and result sets below.
bd3ace813dea26b3064f232eab359d3a517e9c87vboxsync
bd3ace813dea26b3064f232eab359d3a517e9c87vboxsync
bd3ace813dea26b3064f232eab359d3a517e9c87vboxsync 2) Lets go ahead and UPDATE the User before we READ, using the _id from step 1.
bd3ace813dea26b3064f232eab359d3a517e9c87vboxsync Request:
bd3ace813dea26b3064f232eab359d3a517e9c87vboxsync $ curl --header "X-OpenIDM-Username: openidm-admin"
bd3ace813dea26b3064f232eab359d3a517e9c87vboxsync --header "X-OpenIDM-Password: openidm-admin"
bd3ace813dea26b3064f232eab359d3a517e9c87vboxsync --header "Content-Type: application/json"
bd3ace813dea26b3064f232eab359d3a517e9c87vboxsync --request PUT "http://localhost:8080/openidm/system/google/__ACCOUNT__/101643010677712061243"
bd3ace813dea26b3064f232eab359d3a517e9c87vboxsync --data
bd3ace813dea26b3064f232eab359d3a517e9c87vboxsync '{
bd3ace813dea26b3064f232eab359d3a517e9c87vboxsync "__NAME__": "samcarter@yourdomain.com",
bd3ace813dea26b3064f232eab359d3a517e9c87vboxsync "__PASSWORD__" : "password",
bd3ace813dea26b3064f232eab359d3a517e9c87vboxsync "givenName" : "Sam",
bd3ace813dea26b3064f232eab359d3a517e9c87vboxsync "familyName": "Carter",
bd3ace813dea26b3064f232eab359d3a517e9c87vboxsync "agreedToTerms": true,
bd3ace813dea26b3064f232eab359d3a517e9c87vboxsync "changePasswordAtNextLogin" : false
bd3ace813dea26b3064f232eab359d3a517e9c87vboxsync "phones" :
bd3ace813dea26b3064f232eab359d3a517e9c87vboxsync [
bd3ace813dea26b3064f232eab359d3a517e9c87vboxsync {
bd3ace813dea26b3064f232eab359d3a517e9c87vboxsync "value": "1234567890",
bd3ace813dea26b3064f232eab359d3a517e9c87vboxsync "type": "home"
bd3ace813dea26b3064f232eab359d3a517e9c87vboxsync },
bd3ace813dea26b3064f232eab359d3a517e9c87vboxsync {
bd3ace813dea26b3064f232eab359d3a517e9c87vboxsync "value": "0987654321",
bd3ace813dea26b3064f232eab359d3a517e9c87vboxsync "type":"work"
bd3ace813dea26b3064f232eab359d3a517e9c87vboxsync }
bd3ace813dea26b3064f232eab359d3a517e9c87vboxsync ]
bd3ace813dea26b3064f232eab359d3a517e9c87vboxsync }'
bd3ace813dea26b3064f232eab359d3a517e9c87vboxsync Response:
bd3ace813dea26b3064f232eab359d3a517e9c87vboxsync You should have received the object that was updated with the new phone numbers. We will
68fb5645b4a81ece6ab55633a38be8b04d3a88d8vboxsync verify this in Step 3, where we will make a read on that particular ID.
68fb5645b4a81ece6ab55633a38be8b04d3a88d8vboxsync
f019cf48439421432be96667759de8db043dc588vboxsync 3) READ the user created in Step 2.
68fb5645b4a81ece6ab55633a38be8b04d3a88d8vboxsync Request:
68fb5645b4a81ece6ab55633a38be8b04d3a88d8vboxsync $ curl --header "X-OpenIDM-Username: openidm-admin"
68fb5645b4a81ece6ab55633a38be8b04d3a88d8vboxsync --header "X-OpenIDM-Password: openidm-admin"
f019cf48439421432be96667759de8db043dc588vboxsync --header "Content-Type: application/json"
68fb5645b4a81ece6ab55633a38be8b04d3a88d8vboxsync --header "If-None-Match" : "*"
bd3ace813dea26b3064f232eab359d3a517e9c87vboxsync --request GET "http://localhost:8080/openidm/system/google/__ACCOUNT__/101643010677712061243"
bd3ace813dea26b3064f232eab359d3a517e9c87vboxsync
bd3ace813dea26b3064f232eab359d3a517e9c87vboxsync Response:
bd3ace813dea26b3064f232eab359d3a517e9c87vboxsync {
bd3ace813dea26b3064f232eab359d3a517e9c87vboxsync "phones":
bd3ace813dea26b3064f232eab359d3a517e9c87vboxsync [
bd3ace813dea26b3064f232eab359d3a517e9c87vboxsync {"value":"1234567890","type":"home"},
bd3ace813dea26b3064f232eab359d3a517e9c87vboxsync {"value":"0987654321","type":"work"}
bd3ace813dea26b3064f232eab359d3a517e9c87vboxsync ],
bd3ace813dea26b3064f232eab359d3a517e9c87vboxsync "givenName":"Sam",
bd3ace813dea26b3064f232eab359d3a517e9c87vboxsync "familyName":"Carter",
bd3ace813dea26b3064f232eab359d3a517e9c87vboxsync "thumbnailPhotoUrl":null,
bd3ace813dea26b3064f232eab359d3a517e9c87vboxsync "addresses":null,
bd3ace813dea26b3064f232eab359d3a517e9c87vboxsync "__NAME__":"samcarter@yourdomain.com",
bd3ace813dea26b3064f232eab359d3a517e9c87vboxsync "changePasswordAtNextLogin":false,
bd3ace813dea26b3064f232eab359d3a517e9c87vboxsync "suspensionReason":null,
bd3ace813dea26b3064f232eab359d3a517e9c87vboxsync "aliases":null,
bd3ace813dea26b3064f232eab359d3a517e9c87vboxsync "customerId":"Cwev45or",
2d2ea89dd09c94cf72d46f355c88b7916c864959vboxsync "isDelegatedAdmin":false,
bd3ace813dea26b3064f232eab359d3a517e9c87vboxsync "lastLoginTime":["1970-01-01T00:00:00.000Z"],
bd3ace813dea26b3064f232eab359d3a517e9c87vboxsync "agreedToTerms":true,
bd3ace813dea26b3064f232eab359d3a517e9c87vboxsync "deletionTime":null,
bd3ace813dea26b3064f232eab359d3a517e9c87vboxsync "isAdmin":false,
bd3ace813dea26b3064f232eab359d3a517e9c87vboxsync "creationTime":["2014-09-23T18:54:19.000Z"],
bd3ace813dea26b3064f232eab359d3a517e9c87vboxsync "ims":null,
bd3ace813dea26b3064f232eab359d3a517e9c87vboxsync "organizations":null,
bd3ace813dea26b3064f232eab359d3a517e9c87vboxsync "ipWhitelisted":false,
bd3ace813dea26b3064f232eab359d3a517e9c87vboxsync "fullName":"Sam Carter",
bd3ace813dea26b3064f232eab359d3a517e9c87vboxsync "includeInGlobalAddressList":true,
bd3ace813dea26b3064f232eab359d3a517e9c87vboxsync "isMailboxSetup":false,
c07a12f4bcb3336334f7b439375deae8dbd2bf83vboxsync "externalIds":null,
bd3ace813dea26b3064f232eab359d3a517e9c87vboxsync "suspended":false,
c07a12f4bcb3336334f7b439375deae8dbd2bf83vboxsync "nonEditableAliases":null,
2d2ea89dd09c94cf72d46f355c88b7916c864959vboxsync "orgUnitPath":"/",
bd3ace813dea26b3064f232eab359d3a517e9c87vboxsync "relations":null,
c07a12f4bcb3336334f7b439375deae8dbd2bf83vboxsync "emails":
f36e34993b3bddde17e7a88121dc26d3ec197ee0vboxsync [
3aa59619d4b10a8ba3e2f3d3001309b20fa567bavboxsync {
f36e34993b3bddde17e7a88121dc26d3ec197ee0vboxsync "address":"samcarter@yourdomain.com",
f36e34993b3bddde17e7a88121dc26d3ec197ee0vboxsync "primary":true
f36e34993b3bddde17e7a88121dc26d3ec197ee0vboxsync }
f36e34993b3bddde17e7a88121dc26d3ec197ee0vboxsync ],
f36e34993b3bddde17e7a88121dc26d3ec197ee0vboxsync "_id":"101643010677712061243",
f36e34993b3bddde17e7a88121dc26d3ec197ee0vboxsync "_rev":"\"SHoRIPAZisvsSqsLJr3m3XS9Uw4/RfZOwrjqrpRsO6PCGNfEp2H00Ds\""
3c616a9e81ee0ab32e2a3a65379eb9dd386e61d2vboxsync }
f36e34993b3bddde17e7a88121dc26d3ec197ee0vboxsync
f36e34993b3bddde17e7a88121dc26d3ec197ee0vboxsync Note again the complex data structure for "emails" and "phones".
f36e34993b3bddde17e7a88121dc26d3ec197ee0vboxsync
e8f997cba588730c203f0bdb07bcb9cbb5814c99vboxsync 4) Lets CREATE a group that we can stick the user we created above in.
f36e34993b3bddde17e7a88121dc26d3ec197ee0vboxsync Request:
f36e34993b3bddde17e7a88121dc26d3ec197ee0vboxsync $ curl --header "X-OpenIDM-Username: openidm-admin"
f36e34993b3bddde17e7a88121dc26d3ec197ee0vboxsync --header "X-OpenIDM-Password: openidm-admin"
3c616a9e81ee0ab32e2a3a65379eb9dd386e61d2vboxsync --header "Content-Type: application/json"
f36e34993b3bddde17e7a88121dc26d3ec197ee0vboxsync --request POST "http://localhost:8080/openidm/system/google/__GROUP__?_action=create"
f36e34993b3bddde17e7a88121dc26d3ec197ee0vboxsync --data
f36e34993b3bddde17e7a88121dc26d3ec197ee0vboxsync '{
e8f997cba588730c203f0bdb07bcb9cbb5814c99vboxsync "__NAME__": "googleAppsTestGroup@yourdomain.com",
f36e34993b3bddde17e7a88121dc26d3ec197ee0vboxsync "__DESCRIPTION__": "Group used for google-connector sample.",
f36e34993b3bddde17e7a88121dc26d3ec197ee0vboxsync "name": "TestGroup"
f36e34993b3bddde17e7a88121dc26d3ec197ee0vboxsync }'
ed298623061b963361a1345a0982861ec1300d9cvboxsync Response:
f36e34993b3bddde17e7a88121dc26d3ec197ee0vboxsync {
f36e34993b3bddde17e7a88121dc26d3ec197ee0vboxsync "__DESCRIPTION__": "Group used for google-connector sample.",
f36e34993b3bddde17e7a88121dc26d3ec197ee0vboxsync "directMembersCount": 0,
f36e34993b3bddde17e7a88121dc26d3ec197ee0vboxsync "nonEditableAliases": null,
f36e34993b3bddde17e7a88121dc26d3ec197ee0vboxsync "aliases": null,
f36e34993b3bddde17e7a88121dc26d3ec197ee0vboxsync "adminCreated": true,
f36e34993b3bddde17e7a88121dc26d3ec197ee0vboxsync "name": "TestGroup",
f36e34993b3bddde17e7a88121dc26d3ec197ee0vboxsync "__NAME__": "googleappstestgroup@yourdomain.com",
f36e34993b3bddde17e7a88121dc26d3ec197ee0vboxsync "_id": "03oy7u291s3qw1i",
f36e34993b3bddde17e7a88121dc26d3ec197ee0vboxsync "_rev": "\"SHoRIPAZisvsSqsLJr3m3XS9Uw4/8JZsrHGxtdaH4sF8vgzLiPmPqFs\""
f36e34993b3bddde17e7a88121dc26d3ec197ee0vboxsync }
f36e34993b3bddde17e7a88121dc26d3ec197ee0vboxsync
f36e34993b3bddde17e7a88121dc26d3ec197ee0vboxsync 5) Adding the user samcarter@yourdomain.com to the TestGroup we created above.
f36e34993b3bddde17e7a88121dc26d3ec197ee0vboxsync You will need the _id created in step 1 to pass in as part of the request URL, 101643010677712061243.
f36e34993b3bddde17e7a88121dc26d3ec197ee0vboxsync Request:
f36e34993b3bddde17e7a88121dc26d3ec197ee0vboxsync $ curl --header "X-OpenIDM-Username: openidm-admin"
f36e34993b3bddde17e7a88121dc26d3ec197ee0vboxsync --header "X-OpenIDM-Password: openidm-admin"
f36e34993b3bddde17e7a88121dc26d3ec197ee0vboxsync --header "Content-Type: application/json"
f36e34993b3bddde17e7a88121dc26d3ec197ee0vboxsync --request PUT "http://localhost:8080/openidm/system/google/Member/101643010677712061243"
f36e34993b3bddde17e7a88121dc26d3ec197ee0vboxsync --data
f36e34993b3bddde17e7a88121dc26d3ec197ee0vboxsync '{
f36e34993b3bddde17e7a88121dc26d3ec197ee0vboxsync "groupKey" : "03oy7u291s3qw1i",
f36e34993b3bddde17e7a88121dc26d3ec197ee0vboxsync "role": "MEMBER",
e8f997cba588730c203f0bdb07bcb9cbb5814c99vboxsync "__NAME__": "samcarter@yourdomain.com",
f36e34993b3bddde17e7a88121dc26d3ec197ee0vboxsync "email": "samcarter@yourdomain.com",
f36e34993b3bddde17e7a88121dc26d3ec197ee0vboxsync "type": "MEMBER"
f36e34993b3bddde17e7a88121dc26d3ec197ee0vboxsync }'
e8f997cba588730c203f0bdb07bcb9cbb5814c99vboxsync Response:
f36e34993b3bddde17e7a88121dc26d3ec197ee0vboxsync {
f36e34993b3bddde17e7a88121dc26d3ec197ee0vboxsync "role": "MEMBER",
f36e34993b3bddde17e7a88121dc26d3ec197ee0vboxsync "type": "USER",
f36e34993b3bddde17e7a88121dc26d3ec197ee0vboxsync "email": "samcarter@yourdomain.com",
f36e34993b3bddde17e7a88121dc26d3ec197ee0vboxsync "__NAME__": "03oy7u291s3qw1i/samcarter@yourdomain.com",
f36e34993b3bddde17e7a88121dc26d3ec197ee0vboxsync "groupKey": "109384837631312225274",
f36e34993b3bddde17e7a88121dc26d3ec197ee0vboxsync "_id": "014ykbeg40r6x06/samcarter@yourdomain.com",
f36e34993b3bddde17e7a88121dc26d3ec197ee0vboxsync "_rev": "\"SHoRIPAZisvsSqsLJr3m3XS9Uw4/GiZLiMKb3U62M58IabSzPKAVIOE\""
f36e34993b3bddde17e7a88121dc26d3ec197ee0vboxsync }
f36e34993b3bddde17e7a88121dc26d3ec197ee0vboxsync
f36e34993b3bddde17e7a88121dc26d3ec197ee0vboxsync 6) READ the group information now that we have added the user to the group.
f36e34993b3bddde17e7a88121dc26d3ec197ee0vboxsync Request:
f36e34993b3bddde17e7a88121dc26d3ec197ee0vboxsync $ curl --header "X-OpenIDM-Username: openidm-admin"
f36e34993b3bddde17e7a88121dc26d3ec197ee0vboxsync --header "X-OpenIDM-Password: openidm-admin"
f36e34993b3bddde17e7a88121dc26d3ec197ee0vboxsync --header "Content-Type: application/json"
f36e34993b3bddde17e7a88121dc26d3ec197ee0vboxsync --request GET "http://localhost:8080/openidm/system/google/__GROUP__/03oy7u291s3qw1i"
f36e34993b3bddde17e7a88121dc26d3ec197ee0vboxsync Response:
f36e34993b3bddde17e7a88121dc26d3ec197ee0vboxsync {
f36e34993b3bddde17e7a88121dc26d3ec197ee0vboxsync "__DESCRIPTION__": "Group used for google-connector sample.",
f36e34993b3bddde17e7a88121dc26d3ec197ee0vboxsync "directMembersCount": 1,
f36e34993b3bddde17e7a88121dc26d3ec197ee0vboxsync "nonEditableAliases": [
f36e34993b3bddde17e7a88121dc26d3ec197ee0vboxsync "googleAppsTestGroup@yourdomain.com.test-google-a.com"
f36e34993b3bddde17e7a88121dc26d3ec197ee0vboxsync ],
f36e34993b3bddde17e7a88121dc26d3ec197ee0vboxsync "aliases": null,
f36e34993b3bddde17e7a88121dc26d3ec197ee0vboxsync "adminCreated": true,
f36e34993b3bddde17e7a88121dc26d3ec197ee0vboxsync "name": "TestGroup",
f36e34993b3bddde17e7a88121dc26d3ec197ee0vboxsync "__NAME__": "googleappstestgroup@yourdomain.com",
e8f997cba588730c203f0bdb07bcb9cbb5814c99vboxsync "_id": "03oy7u291s3qw1i",
f36e34993b3bddde17e7a88121dc26d3ec197ee0vboxsync "_rev": "\"SHoRIPAZisvsSqsLJr3m3XS9Uw4/WcZC54etzuPtruE7uByf9NQ82Ow\""
f36e34993b3bddde17e7a88121dc26d3ec197ee0vboxsync }
f36e34993b3bddde17e7a88121dc26d3ec197ee0vboxsync
f36e34993b3bddde17e7a88121dc26d3ec197ee0vboxsync 7) DELETE the group we created earlier.
f36e34993b3bddde17e7a88121dc26d3ec197ee0vboxsync Request:
f36e34993b3bddde17e7a88121dc26d3ec197ee0vboxsync $ curl --header "X-OpenIDM-Username: openidm-admin"
f36e34993b3bddde17e7a88121dc26d3ec197ee0vboxsync --header "X-OpenIDM-Password: openidm-admin"
f36e34993b3bddde17e7a88121dc26d3ec197ee0vboxsync --header "Content-Type: application/json"
f36e34993b3bddde17e7a88121dc26d3ec197ee0vboxsync --request DELETE "http://localhost:8080/openidm/system/google/__GROUP__/03oy7u291s3qw1i"
f36e34993b3bddde17e7a88121dc26d3ec197ee0vboxsync Response:
f36e34993b3bddde17e7a88121dc26d3ec197ee0vboxsync {
f36e34993b3bddde17e7a88121dc26d3ec197ee0vboxsync "_id": "03oy7u291s3qw1i"
f36e34993b3bddde17e7a88121dc26d3ec197ee0vboxsync }
f36e34993b3bddde17e7a88121dc26d3ec197ee0vboxsync
f36e34993b3bddde17e7a88121dc26d3ec197ee0vboxsync 8) Delete the user created in this sample
e8f997cba588730c203f0bdb07bcb9cbb5814c99vboxsync Request:
f36e34993b3bddde17e7a88121dc26d3ec197ee0vboxsync $ curl --header "X-OpenIDM-Username: openidm-admin"
f36e34993b3bddde17e7a88121dc26d3ec197ee0vboxsync --header "X-OpenIDM-Password: openidm-admin"
f36e34993b3bddde17e7a88121dc26d3ec197ee0vboxsync --header "Content-Type: application/json"
e8f997cba588730c203f0bdb07bcb9cbb5814c99vboxsync --request DELETE "http://localhost:8080/openidm/system/google/__ACCOUNT__/101643010677712061243"
f36e34993b3bddde17e7a88121dc26d3ec197ee0vboxsync Response:
f36e34993b3bddde17e7a88121dc26d3ec197ee0vboxsync {
f36e34993b3bddde17e7a88121dc26d3ec197ee0vboxsync "_id":"101643010677712061243"
f36e34993b3bddde17e7a88121dc26d3ec197ee0vboxsync }
f36e34993b3bddde17e7a88121dc26d3ec197ee0vboxsync
f36e34993b3bddde17e7a88121dc26d3ec197ee0vboxsync ------------------------------------------------------------------------------------------------------
f36e34993b3bddde17e7a88121dc26d3ec197ee0vboxsync Reconciling Google Users to Managed Users
f36e34993b3bddde17e7a88121dc26d3ec197ee0vboxsync ------------------------------------------------------------------------------------------------------
f36e34993b3bddde17e7a88121dc26d3ec197ee0vboxsync
f36e34993b3bddde17e7a88121dc26d3ec197ee0vboxsync A sync.json is included with this sample which maps some user attributes from Google to Managed User entries.
f36e34993b3bddde17e7a88121dc26d3ec197ee0vboxsync To trigger a reconciliation with this mapping, simply issue the following command
f36e34993b3bddde17e7a88121dc26d3ec197ee0vboxsync
f36e34993b3bddde17e7a88121dc26d3ec197ee0vboxsync Request :
f36e34993b3bddde17e7a88121dc26d3ec197ee0vboxsync $ curl --header "X-OpenIDM-Username: openidm-admin"
f36e34993b3bddde17e7a88121dc26d3ec197ee0vboxsync --header "X-OpenIDM-Password: openidm-admin"
3f49af6c5cdf3b99ed24d7803fc4e616ce79a907vboxsync --header "Content-Type: application/json"
f36e34993b3bddde17e7a88121dc26d3ec197ee0vboxsync --request POST "http://localhost:8080/openidm/recon?_action=recon&mapping=sourceGoogle__ACCOUNT___managedUser"
f36e34993b3bddde17e7a88121dc26d3ec197ee0vboxsync
f36e34993b3bddde17e7a88121dc26d3ec197ee0vboxsync Response :
f36e34993b3bddde17e7a88121dc26d3ec197ee0vboxsync {"_id":"efefd951-9153-46f6-9446-894805d85173","state":"ACTIVE"}
f36e34993b3bddde17e7a88121dc26d3ec197ee0vboxsync
f36e34993b3bddde17e7a88121dc26d3ec197ee0vboxsync A quick look at the reconciliation entry will tell us what happened during the reconciliation process :
f36e34993b3bddde17e7a88121dc26d3ec197ee0vboxsync
f36e34993b3bddde17e7a88121dc26d3ec197ee0vboxsync Request :
f36e34993b3bddde17e7a88121dc26d3ec197ee0vboxsync $ curl --header "X-OpenIDM-Username: openidm-admin"
f36e34993b3bddde17e7a88121dc26d3ec197ee0vboxsync --header "X-OpenIDM-Password: openidm-admin"
f36e34993b3bddde17e7a88121dc26d3ec197ee0vboxsync --header "Content-Type: application/json"
f36e34993b3bddde17e7a88121dc26d3ec197ee0vboxsync --request GET "http://localhost:8080/openidm/recon/efefd951-9153-46f6-9446-894805d85173"
f36e34993b3bddde17e7a88121dc26d3ec197ee0vboxsync
f36e34993b3bddde17e7a88121dc26d3ec197ee0vboxsync
f36e34993b3bddde17e7a88121dc26d3ec197ee0vboxsync
f36e34993b3bddde17e7a88121dc26d3ec197ee0vboxsync Response :
f36e34993b3bddde17e7a88121dc26d3ec197ee0vboxsync
f36e34993b3bddde17e7a88121dc26d3ec197ee0vboxsync {
f36e34993b3bddde17e7a88121dc26d3ec197ee0vboxsync "_id" : "efefd951-9153-46f6-9446-894805d85173",
f36e34993b3bddde17e7a88121dc26d3ec197ee0vboxsync "mapping" : "sourceGoogle__ACCOUNT___managedUser",
f36e34993b3bddde17e7a88121dc26d3ec197ee0vboxsync "state" : "SUCCESS",
f36e34993b3bddde17e7a88121dc26d3ec197ee0vboxsync "stage" : "COMPLETED_SUCCESS",
f36e34993b3bddde17e7a88121dc26d3ec197ee0vboxsync "stageDescription" : "reconciliation completed.",
f36e34993b3bddde17e7a88121dc26d3ec197ee0vboxsync "progress" : {
f36e34993b3bddde17e7a88121dc26d3ec197ee0vboxsync "source" : {
f36e34993b3bddde17e7a88121dc26d3ec197ee0vboxsync "existing" : {
f36e34993b3bddde17e7a88121dc26d3ec197ee0vboxsync "processed" : 9,
f36e34993b3bddde17e7a88121dc26d3ec197ee0vboxsync "total" : "9"
f36e34993b3bddde17e7a88121dc26d3ec197ee0vboxsync }
f36e34993b3bddde17e7a88121dc26d3ec197ee0vboxsync },
f36e34993b3bddde17e7a88121dc26d3ec197ee0vboxsync "target" : {
f36e34993b3bddde17e7a88121dc26d3ec197ee0vboxsync "existing" : {
f36e34993b3bddde17e7a88121dc26d3ec197ee0vboxsync "processed" : 8,
f36e34993b3bddde17e7a88121dc26d3ec197ee0vboxsync "total" : "8"
f36e34993b3bddde17e7a88121dc26d3ec197ee0vboxsync },
f36e34993b3bddde17e7a88121dc26d3ec197ee0vboxsync "created" : 0
f36e34993b3bddde17e7a88121dc26d3ec197ee0vboxsync },
f36e34993b3bddde17e7a88121dc26d3ec197ee0vboxsync "links" : {
f36e34993b3bddde17e7a88121dc26d3ec197ee0vboxsync "existing" : {
f36e34993b3bddde17e7a88121dc26d3ec197ee0vboxsync "processed" : 8,
f36e34993b3bddde17e7a88121dc26d3ec197ee0vboxsync "total" : "8"
f36e34993b3bddde17e7a88121dc26d3ec197ee0vboxsync },
f36e34993b3bddde17e7a88121dc26d3ec197ee0vboxsync "created" : 0
f36e34993b3bddde17e7a88121dc26d3ec197ee0vboxsync }
f36e34993b3bddde17e7a88121dc26d3ec197ee0vboxsync },
f36e34993b3bddde17e7a88121dc26d3ec197ee0vboxsync "situationSummary" : {
f36e34993b3bddde17e7a88121dc26d3ec197ee0vboxsync "SOURCE_IGNORED" : 1,
f36e34993b3bddde17e7a88121dc26d3ec197ee0vboxsync "MISSING" : 0,
f36e34993b3bddde17e7a88121dc26d3ec197ee0vboxsync "FOUND" : 0,
f36e34993b3bddde17e7a88121dc26d3ec197ee0vboxsync "AMBIGUOUS" : 0,
f36e34993b3bddde17e7a88121dc26d3ec197ee0vboxsync "UNQUALIFIED" : 0,
3c616a9e81ee0ab32e2a3a65379eb9dd386e61d2vboxsync "CONFIRMED" : 8,
f36e34993b3bddde17e7a88121dc26d3ec197ee0vboxsync "SOURCE_MISSING" : 0,
f36e34993b3bddde17e7a88121dc26d3ec197ee0vboxsync "ABSENT" : 0,
f36e34993b3bddde17e7a88121dc26d3ec197ee0vboxsync "TARGET_IGNORED" : 0,
3c616a9e81ee0ab32e2a3a65379eb9dd386e61d2vboxsync "UNASSIGNED" : 0,
f36e34993b3bddde17e7a88121dc26d3ec197ee0vboxsync "FOUND_ALREADY_LINKED" : 0
f36e34993b3bddde17e7a88121dc26d3ec197ee0vboxsync },
f36e34993b3bddde17e7a88121dc26d3ec197ee0vboxsync "statusSummary" : {
f36e34993b3bddde17e7a88121dc26d3ec197ee0vboxsync "FAILURE" : 0,
f36e34993b3bddde17e7a88121dc26d3ec197ee0vboxsync "SUCCESS" : 9
f36e34993b3bddde17e7a88121dc26d3ec197ee0vboxsync },
f36e34993b3bddde17e7a88121dc26d3ec197ee0vboxsync "parameters" : {
f36e34993b3bddde17e7a88121dc26d3ec197ee0vboxsync "object" : {
f36e34993b3bddde17e7a88121dc26d3ec197ee0vboxsync "sourceQuery" : {
f36e34993b3bddde17e7a88121dc26d3ec197ee0vboxsync "resourceName" : "system/google/__ACCOUNT__",
f36e34993b3bddde17e7a88121dc26d3ec197ee0vboxsync "_queryId" : "query-all-ids"
f36e34993b3bddde17e7a88121dc26d3ec197ee0vboxsync },
f36e34993b3bddde17e7a88121dc26d3ec197ee0vboxsync "targetQuery" : {
f36e34993b3bddde17e7a88121dc26d3ec197ee0vboxsync "resourceName" : "managed/user",
f36e34993b3bddde17e7a88121dc26d3ec197ee0vboxsync "_queryId" : "query-all-ids"
f36e34993b3bddde17e7a88121dc26d3ec197ee0vboxsync }
f36e34993b3bddde17e7a88121dc26d3ec197ee0vboxsync },
f36e34993b3bddde17e7a88121dc26d3ec197ee0vboxsync "pointer" : {
f36e34993b3bddde17e7a88121dc26d3ec197ee0vboxsync "empty" : true
f36e34993b3bddde17e7a88121dc26d3ec197ee0vboxsync },
f36e34993b3bddde17e7a88121dc26d3ec197ee0vboxsync "transformers" : [ ],
f36e34993b3bddde17e7a88121dc26d3ec197ee0vboxsync "set" : false,
f36e34993b3bddde17e7a88121dc26d3ec197ee0vboxsync "collection" : false,
f36e34993b3bddde17e7a88121dc26d3ec197ee0vboxsync "map" : true,
f36e34993b3bddde17e7a88121dc26d3ec197ee0vboxsync "string" : false,
f36e34993b3bddde17e7a88121dc26d3ec197ee0vboxsync "wrappedObject" : {
3c616a9e81ee0ab32e2a3a65379eb9dd386e61d2vboxsync "sourceQuery" : {
f36e34993b3bddde17e7a88121dc26d3ec197ee0vboxsync "resourceName" : "system/google/__ACCOUNT__",
f36e34993b3bddde17e7a88121dc26d3ec197ee0vboxsync "_queryId" : "query-all-ids"
f36e34993b3bddde17e7a88121dc26d3ec197ee0vboxsync },
f36e34993b3bddde17e7a88121dc26d3ec197ee0vboxsync "targetQuery" : {
f36e34993b3bddde17e7a88121dc26d3ec197ee0vboxsync "_queryId" : "query-all-ids",
f36e34993b3bddde17e7a88121dc26d3ec197ee0vboxsync "resourceName" : "managed/user"
f36e34993b3bddde17e7a88121dc26d3ec197ee0vboxsync }
f36e34993b3bddde17e7a88121dc26d3ec197ee0vboxsync },
f36e34993b3bddde17e7a88121dc26d3ec197ee0vboxsync "list" : false,
f36e34993b3bddde17e7a88121dc26d3ec197ee0vboxsync "number" : false,
f36e34993b3bddde17e7a88121dc26d3ec197ee0vboxsync "boolean" : false,
f36e34993b3bddde17e7a88121dc26d3ec197ee0vboxsync "null" : false
f36e34993b3bddde17e7a88121dc26d3ec197ee0vboxsync },
f36e34993b3bddde17e7a88121dc26d3ec197ee0vboxsync "started" : "2014-10-31T14:16:34.721Z",
f36e34993b3bddde17e7a88121dc26d3ec197ee0vboxsync "ended" : "2014-10-31T14:16:35.509Z",
f36e34993b3bddde17e7a88121dc26d3ec197ee0vboxsync "duration" : 788
f36e34993b3bddde17e7a88121dc26d3ec197ee0vboxsync }
ed298623061b963361a1345a0982861ec1300d9cvboxsync
ed298623061b963361a1345a0982861ec1300d9cvboxsync