You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@usergrid.apache.org by sn...@apache.org on 2015/08/12 19:14:28 UTC

[33/60] [abbrv] incubator-usergrid git commit: cherry picking docs from master

http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/4a92ab09/content/docs/_sources/user-management/messagee-example.txt
----------------------------------------------------------------------
diff --git a/content/docs/_sources/user-management/messagee-example.txt b/content/docs/_sources/user-management/messagee-example.txt
new file mode 100644
index 0000000..eb3e560
--- /dev/null
+++ b/content/docs/_sources/user-management/messagee-example.txt
@@ -0,0 +1,137 @@
+# App Example - Messagee
+
+Messagee is a simple Twitter-style messaging application that leverages the extensive functionality of Usergrid. This section describes some of the features of Messagee.
+
+There are three client versions of Messagee:
+
+* [An iOS client version](https://github.com/apigee/usergrid-sample-ios-messagee)
+* [An Android client version](https://github.com/apigee/usergrid-sample-android-messagee)
+* [An HTML5 client](https://github.com/apigee/usergrid-sample-html5-messagee)
+
+The sections below describe how to create a new app, enter some test users, and run the app. You also learn how to use the Usergrid admin portal, a user interface that streamlines data and application management in the Usergrid system. The portal is also a reference application that shows how to incorporate Usergrid APIs with JavaScript. For a more detailed discussion of the portal's functionality, see Admin portal.
+
+## Creating a user account in Usergrid
+
+Go to the Usergrid portal and login. If you are new to Usergrid, sign up for an account, specifying an organization (e.g., the name of your company or project team) and a username and password that you can use to authenticate. Because Usergrid are designed for use by development teams, the same username can be associated with one or more organizations.
+
+If you create a new account, you receive a confirmation email that contains a URL that you must click to activate the account. After this, simply log in to the portal with your username and password.
+
+.. image:: login.png
+
+## Creating an app and users
+
+When you have logged in, you need to create a new application.
+
+.. image:: portal1.png
+
+### STEP 1
+
+Enter a unique application name. The name must be unique to avoid a conflict with another user running the same application.
+
+.. image:: portal2.png
+
+### STEP 2 
+
+Make sure that the portal shows the application name you entered as the active application beneath the Applications menu (1).
+
+If the correct name is not displayed, click the menu and select your application. Next, you need to populate a test user user-test-1 that is going to log in to your copy of the server-side Messagee app.
+
+### STEP 3
+
+Click the Users box on the left side of the console (2).
+
+.. image:: portal3.png
+
+### STEP 4
+
+Click the Add button and enter the user information for your application in the pop-up window (be sure to create a password you can remember), and then click the Create button. Repeat these steps to create a second username test-user-2.
+
+.. image:: portal4.png
+
+### STEP 5
+
+When you have finished all these steps, you have a new application and two new users.
+
+.. image:: portal5.png
+
+Now that you have created a uniquely named copy of the Messagee application as well as two user accounts (test-user-1 and test-user-2), you are ready to test out the Messagee app. Use test-user-1 to log in to the app, and test-user-2 as the user to follow.
+
+To continue with the example, follow the instructions for a client app (iOS client, Android client, or HTML5 client).
+
+## iOS client
+
+Messagee is available as an iPhone app that uses Usergrid and RestKit. The source for the iOS version of Messagee is available in the /samples/messagee directory of the Usergrid iOS SDK
+
+Here are the steps to run the Messagee app on iOS:
+
+### STEP 6
+
+Run Steps 1-5 under Creating an app and users. These steps create a unique instance of the Messagee app on the server and two test users, test-user-1 and test-user-2.
+
+### STEP 7
+
+Access the Messagee server app by typing a URL similar to the following into your iOS mobile client (replace <Messagee> with the unique name of your application):
+https://api.usergrid.com/<Messagee>/index.html
+
+.. image:: iOS1chooseapp.jpg
+
+### STEP 8
+
+On the mobile client, complete the registration information and click Register.
+
+.. image:: iOS2register.jpg
+
+### STEP 9
+
+Log in to the Messagee app by entering the test-user-1 account information created previously, and click the Sign in button.
+
+.. image:: iOS3signin.jpg
+
+### STEP 10 
+
+At this point, the message board is empty:
+
+.. image:: iOS5emptyfeed.jpg
+
+### STEP 11 
+
+To post a message using the app, click the top-right icon in the message board to create a message, write the message text, and send it by clicking Post.
+
+.. image:: iOS6newmsg.jpg
+
+Note: The posted message should appear in the message board within few seconds.
+
+.. image:: iOS7feed1msg.jpg
+
+### STEP 12 
+
+For your instance of the Messagee application to act like Twitter, you need to "follow" another user.
+
+In the message board, click Add People and add test-user-2 as a person that test-user-1 follows.
+
+.. image:: iOS9followme.jpg
+
+### STEP 6
+
+Log in as test-user-2 and post a message as this user to the message board.
+
+Go back and log in as user test-user-1.
+Because test-user-1 follows test-user-2, you should see the message sent by test-user-2 in the message board.
+
+.. image:: iOS10seeusermsg.jpg
+
+## iOS SDK
+
+If you want to write iOS applications that connect to Usergrid, [download the Usergrid iOS SDK](https://github.com/apache/incubator-usergrid/tree/master/sdks/ios).
+
+__Note__: The Messagee iOS application uses RestKit, a popular REST framework for iOS, to communicate with Usergrid. Because Usergrid use a REST API, you can use any REST framework to talk with the service. However, the official Usergrid iOS SDK provides a more convenient communication mechanism that you should use unless you're already using RestKit or some other framework in your project.
+
+## Android client and SDK
+Messagee is available as a sample Android app that acts as a Usergrid client. The source for the Android version is packaged with the Usergrid Android SDK in the /samples/messagee directory.
+
+[Download the Usergrid Android SDK](https://github.com/apache/incubator-usergrid/tree/master/sdks/android)
+
+## Javascript/HTML5 client and SDK
+Messagee is also available as a sample HTML5 app that behaves in much the same way as the two previous examples. The source for the HTML5 version is packaged with the Usergrid Javascript/HTML5 SDK in the /samples/messagee directory.
+
+[Download the Usergrid Javascript/HTML5 SDK](https://github.com/apache/incubator-usergrid/tree/master/sdks/html5-javascript)

http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/4a92ab09/content/docs/_sources/user-management/user-connections.txt
----------------------------------------------------------------------
diff --git a/content/docs/_sources/user-management/user-connections.txt b/content/docs/_sources/user-management/user-connections.txt
new file mode 100644
index 0000000..a386d2a
--- /dev/null
+++ b/content/docs/_sources/user-management/user-connections.txt
@@ -0,0 +1,40 @@
+# Social Graph Connections
+
+One of the most useful features of Usergrid is the ability to create connections between entities, which allow you to model arbitrary relationships between entities. This feature is particularly powerful when applied to user entities by allowing you to model complex social graphs between users as well as groups of users.
+
+## Following/followers
+To make the social graph possibilities of entity connections even easier to achieve, Usergrid also has special support for a default following/followers relationship, which offers these additional features:
+
+Reciprocal connection: If a following connection is made between a user and another user, a reciprocal followers relationship will be created automatically. In contrast, all of other entity connections are one-way, meaning any reciprocal relationship must be created manually.
+
+Activity feed subscription: The followed user's activities will automatically be posted to the following user's activity feed. For example, if Arthur is following Ford, then any activities published by Ford that Arthur is allowed to see will appear in Arthur's activity feed.
+
+## Creating a following/followers connection
+To create a following/followers connection between two entities, create the connection as you would any generic entity connection. For full details on creating connections, see [Connecting entities](../entity-connections/connecting-entities.html). 
+
+For example, the following request would create a following/followers relationship between two user entities with the usernames 'Fred' and 'Barney':
+
+    POST https://api.usergrid.com/your-org/your-app/users/barney/following/users/fred
+
+<div class="admonition note"> <p class="first admonition-title">Note</p> <p class="last">
+Please note that this only works when you ``POST`` a ``following`` connection. Creating a follower connection would not create a reciprocal following connection.
+</p></div>
+
+This would retrieve a list of the users that Barney is following:
+
+    GET https://api.usergrid.com/your-org/your-app/users/barney/following
+    
+And this would retrieve a list of users that are following Fred:
+
+    GET https://api.usergrid.com/your-org/your-app/users/fred/followers
+    
+# Creating other connections
+You can extend this connection structure to create connections using any relationship. For example, you could use likes to denote a connection between a user and his dog with this POST:
+
+    POST https://api.usergrid.com/your-org/your-app/users/Fred/likes/dogs/Dino
+    
+Note that in this case a reciprocal connection is not automatically created. To do so you would need to manually create the reciprocal connection with another POST such as:
+
+    POST https://api.usergrid.com/your-org/your-app/dogs/Dino/liked_by/users/Fred
+    
+For more information on using entity connections, see [Connecting entities](../entity-connections/connecting-entities.html).

http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/4a92ab09/content/docs/_sources/user-management/user-management.txt
----------------------------------------------------------------------
diff --git a/content/docs/_sources/user-management/user-management.txt b/content/docs/_sources/user-management/user-management.txt
new file mode 100644
index 0000000..7f9e1d6
--- /dev/null
+++ b/content/docs/_sources/user-management/user-management.txt
@@ -0,0 +1,42 @@
+# User management & social graph
+Whether you're developing apps for mobile or the Web, it's almost certain that you will need to be able to handle user management, as well as offer the types of social features users have come to expect from a rich app experience. Usergrid makes all of this easy with default entity types and functionality available right out of the box. From user registration and profiles to login and authentication to activity feeds and social graph, you can create a social experience quickly and easily with just a few types of API calls.
+
+## User management
+The default user entity in Usergrid is designed to model app users, meaning registering users and managing their profiles is as simple as sending and updating JSON via the API. Used in conjunction with our available social graph, as well as our OAuth 2.0 authentication and token authorization features, you have all the tools you need to manage your user base.
+
+Learn more about:
+
+* [User management](user-management.html)
+* [Authentication & tokens](../security-and-auth/app-security.html)
+* [Permissions and roles](../security-and-auth/using-permissions.html)
+
+## Group management
+One of the most basic social features of any app is the ability to create groups of users to limit shared access to user or other app data. The default group entity in Usergrid was designed for this exact purpose. Associate a user with as many groups or sub-groups as you need, then apply permissions or roles to define shared access to Usergrid data.
+
+Learn more about:
+
+* [Group management](group.md)
+* [Permissions and roles](../security-and-auth/using-permissions.html)
+
+## Social connections
+To create a rich social graph, your app needs to be able to create connections between users. Usergrid makes this process lightweight by allowing you to create social connections and generic entity connections between users to model relationships by working with simple URI paths.
+
+For example, you could create a 'likes' relationship between two users with a POST:
+
+    https://api.usergrid.com/your-org/your-app/users/Arthur/likes/users/Ford
+    
+You could then retrieve all the users Arthur 'likes' with a GET to populate a list in your UI:
+
+    https://api.usergrid.com/your-org/your-app/users/Arthur/likes
+    
+Learn more about:
+
+* [Social connections](user-connections.html)
+* [Generic entity connections](../data-storage/relationship.html)
+
+## Activity feeds
+Activity feeds can be an essential way of establishing a social dimension of your user experience. Allow users to actively publish activities, such as status messages, or have your application code passively publish activities based on user actions, such as posting a photo. Activity feeds can be created and shared at both the user and group level, giving you the flexibility to present activity feeds that are most relevant to your users.
+
+Learn more about:
+
+* [Activity feeds]

http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/4a92ab09/content/docs/_sources/user-management/working-user-data.txt
----------------------------------------------------------------------
diff --git a/content/docs/_sources/user-management/working-user-data.txt b/content/docs/_sources/user-management/working-user-data.txt
new file mode 100644
index 0000000..a7603fd
--- /dev/null
+++ b/content/docs/_sources/user-management/working-user-data.txt
@@ -0,0 +1,278 @@
+# Working with User Data
+You can store and manage user data as User entities. With user data in your application, you can add support for a wide variety of features common to mobile apps. For example, you can:
+
+* Control access to data by defining permission rules. (See Security & token authentication for more.)
+* Present content specific to each user, such as their list of favorites.
+* Support social features, such as letting users "follow" one another, for example.
+
+In mobile applications, data about users is typically added by users themselves when they register through your app. The topics in this section provide specific cURL and SDK-specific examples for getting things done with user data.
+
+## Creating users
+
+A user entity represents an application user. Using API Services you can create, retrieve, update, delete, and query user entities. See User entity properties for a list of the system-defined  properties for user entities. In addition, you can create user properties specific to your application.
+
+### Request Syntax
+
+    curl -X POST "https://api.usergrid.com/your-org/your-app/users" -d '{ "username": "john.doe", "email": "john.doe@gmail.com", "name": "John Doe", "password": "test1234" }'
+  
+Use the POST method to create a new user in the users collection.
+
+### Request URI
+
+    POST /<org_id>/<app_id>/users
+
+Parameters
+
+Parameter	    Description
+---------       -----------
+uuid | org_id	Organization UUID or organization name.
+uuid | app_id	Application UUID or application name.
+request body	One or more sets of user properties.
+
+The username is mandatory and must be unique. Here's an example:
+
+    {
+        "username" : "john.doe",
+        "email" : "john.doe@gmail.com",
+        "name" : "John Doe",
+        "password" : "test1234"
+    }
+
+Although the password parameter is not mandatory, if you don't specify it, the user will not be able to log in using username and password credentials. If a password is not specified for the user, and you're an Admin, you can set a password for the user (see Setting a password).
+
+__ Note__: The username can contain any combination of characters, including those that represent letters, numbers, and symbols.
+
+### Example
+
+__Note__: Although not shown in the API examples below, you need to provide a valid access token with each API call. See Authenticating users and application clients for details.
+
+### Request
+
+    curl -X POST "https://api.usergrid.com/my-org/my-app/users" -d '{"username":"john.doe","email":"john.doe@gmail.com","name":"John Doe"}'
+    
+### Response
+
+    {
+      "action" : "post",
+      "application" : "db1e60a0-417f-11e3-9586-0f1ff3650d20",
+      "params" : { },
+      "path" : "/users",
+      "uri" : "https://api.usergrid.com/steventraut/mynewapp/users",
+      "entities" : [ {
+        "uuid" : "8ae8a6ea-84a5-11e3-884d-f18e8f6fb3bc",
+        "type" : "user",
+        "name" : "John Doe",
+        "created" : 1390533228622,
+        "modified" : 1390533228622,
+        "username" : "john.doe",
+        "email" : "john.doe@gmail.com",
+        "activated" : true,
+        "picture" : "http://www.gravatar.com/avatar/e13743a7f1db7f4246badd6fd6ff54ff",
+        "metadata" : {
+          "path" : "/users/8ae8a6ea-84a5-11e3-884d-f18e8f6fb3bc",
+          "sets" : {
+            "rolenames" : "/users/8ae8a6ea-84a5-11e3-884d-f18e8f6fb3bc/roles",
+            "permissions" : "/users/8ae8a6ea-84a5-11e3-884d-f18e8f6fb3bc/permissions"
+          },
+          "collections" : {
+            "activities" : "/users/8ae8a6ea-84a5-11e3-884d-f18e8f6fb3bc/activities",
+            "devices" : "/users/8ae8a6ea-84a5-11e3-884d-f18e8f6fb3bc/devices",
+            "feed" : "/users/8ae8a6ea-84a5-11e3-884d-f18e8f6fb3bc/feed",
+            "groups" : "/users/8ae8a6ea-84a5-11e3-884d-f18e8f6fb3bc/groups",
+            "roles" : "/users/8ae8a6ea-84a5-11e3-884d-f18e8f6fb3bc/roles",
+            "following" : "/users/8ae8a6ea-84a5-11e3-884d-f18e8f6fb3bc/following",
+            "followers" : "/users/8ae8a6ea-84a5-11e3-884d-f18e8f6fb3bc/followers"
+          }
+        }
+      }],
+      "timestamp" : 1390533228619,
+      "duration" : 142,
+      "organization" : "my-org",
+      "applicationName" : "my-app"
+    }
+
+
+## Retrieving user data
+
+You can retrieve data about users through cURL or one of the SDKs. Each provides a way to filter the list of users by data associated with the user, such as username or UUID, or other properties in the user entity.
+
+See User entity properties for a list of the system-defined  properties for user entities. In addition, you can create user properties specific to your application.
+
+### Request Syntax
+
+    curl -X GET "https://api.usergrid.com/your-org/your-app/users"
+    
+Use the GET method to retrieve user data.
+
+### Request URI
+
+    GET /<org_id>/<app_id>/users/<uuid | username | email_address | ?ql=query_string>
+    
+Parameters
+
+Parameter	    Description
+---------       -----------
+uuid | org_id	Organization UUID or organization name
+uuid | app_id	Application UUID or application name
+user identifier User UUID, username, or email address. 
+
+The alias ``/users/me`` can be used in place of the current user’s uuid, username, or email address. Note: The ``/users/me`` endpoint is accessible only if you provide an access token with the request (see Authenticating users and application clients). If you make an anonymous ("guest") call, the system will not be able to determine which user to return as /users/me.
+
+__Note__: The username can contain any combination of characters, including those that represent letters, numbers, and symbols.
+
+### Example
+
+__Note__: Although not shown in the API examples below, you need to provide a valid access token with each API call. See [Authenticating users and application clients](../security-and-auth/authenticating-users-and-application-clients.html) for details.
+
+Requests
+
+    # Get a user by username.
+    curl -X GET "https://api.usergrid.com/my-org/my-app/users/jane.doe"
+
+    # Get a user by UUID.
+    curl -X GET "https://api.usergrid.com/my-org/my-app/users/a407b1e7-58e8-11e1-ac46-22000a1c5a67e"
+
+    # Get a user by email.
+    curl -X GET "https://api.usergrid.com/my-org/my-app/users/jane.doe@gmail.com"
+
+    # Get user data filtering by their city property value.
+    curl -X GET "https://api.usergrid.com/my-org/my-app/users?ql=select%20*%20where%20adr.city%3D'Chicago'"
+
+Response
+
+    {
+        "action" : "get",
+        "application" : "1c8f60e4-da67-11e0-b93d-12313f0204bb8",
+        "params" : {
+            "_": [
+                "1315524419746"
+            ]
+        },
+        "path" : "https://api.usergrid.com/12313f0204bb-1c8f60e4-da67-11e0-b93d/1c8f60e4-da67-11e0-b93d-12313f0204bb/users",
+        "uri" : "https://api.usergrid.com/005056c00008-4353136f-e978-11e0-8264/4353136f-e978-11e0-8264-005056c00008/users",
+        "entities" : [ {
+            "uuid" : "78c54a82-da71-11e0-b93d-12313f0204b",
+            "type" : "user",
+            "created" : 1315524171347008,
+            "modified" : 1315524171347008,
+            "activated" : true,
+            "email" : "jane.doe@gmail.com",
+            "metadata" : {
+                "path" : "/users/78c54a82-da71-11e0-b93d-12313f0204bb",
+                "sets" : {
+                    "rolenames" : "/users/78c54a82-da71-11e0-b93d-12313f0204bb/rolenames",
+                    "permissions" : "/users/78c54a82-da71-11e0-b93d-12313f0204bb/permissions"
+                },
+                "collections" : {
+                    "activities" : "/users/78c54a82-da71-11e0-b93d-12313f0204bb/activities",
+                    "devices" : "/users/78c54a82-da71-11e0-b93d-12313f0204bb/devices",
+                    "feed" : "/users/78c54a82-da71-11e0-b93d-12313f0204bb/feed",
+                    "groups" : "/users/78c54a82-da71-11e0-b93d-12313f0204bb/groups",
+                    "roles" : "/users/78c54a82-da71-11e0-b93d-12313f0204bb/roles",
+                    "following" : "/users/78c54a82-da71-11e0-b93d-12313f0204bb/following",
+                    "followers" : "/users/78c54a82-da71-11e0-b93d-12313f0204bb/followers"
+                }
+            },
+            "username" : "jane.doe"
+        }
+        ... Additional entities here if data for multiple users was returned...
+        ],
+        "timestamp" : 1315524421071,
+        "duration" : 107,
+        "organization" : "my-org",
+        "applicationName": "my-app"
+    }
+
+## Updating & deleting user data
+
+To update or delete a user, perform an update or delete on the associated user entity as you would any other entity. For more information and code samples, see [Updating Data Entities](../data-storage/entities.html#updating-data-entities) and [Deleting Data Entities](../data-storage/entities.html#deleting-data-entities).
+
+## Changing a user password
+
+Changing a user's password
+
+### Request syntax
+
+    curl -X PUT https://api.usergrid.com/<org>/<app>/users/<username_or_email>/password -d '{oldpassword:<old_password>,newpassword:<new_password>}'
+    
+Parameters
+
+Parameter	        Description
+---------           -----------
+org	                Organization UUID or organization name
+app	                Application UUID or application name
+username_or_email	Username or email of the user entity whose password you want to reset.
+old_password	    User entity's old password.
+new_password	    User entity's new password.
+
+__Note__: If your request is authenticated with an application-level token, then ``old_password`` is not required. For more, see [Application client authentication](../security-and-auth/authenticating-users-and-application-clients.html#application-client-authentication).
+
+Example request
+
+    curl -X PUT https://api.usergrid.com/my-org/my-app/users/john.doe/password -d '{"newpassword":"foo9876a","oldpassword":"bar1234b"}'
+    
+Example response
+
+    {
+      "action": "set user password",
+      "timestamp": 1355185897894,
+      "duration": 47
+    }
+    
+## Resetting a user password
+
+Resetting a user's password
+
+Usergrid provides a standard password reset flow that can be implemented to allow a user to reset their password without having to provide their old password. The most common use of this would be a 'Forgot password?' feature in your app.
+
+Note that you can also implement your own password reset flow using application-level authentication and the /password endpoint. For more, see [Changing a user password](#changing-a-user-password).
+
+To use the Usergrid password reset flow, do the following:
+
+### STEP 1: Get the password reset request form.
+
+Make a GET request to the following:
+
+    /users/<username>/resetpw
+    
+For example, using cURL, a request to reset the password for a user with username 'someUser' would look like this:
+
+    curl -x GET https://api.usergrid.com/your-org/your-app/users/someUser/resetpw
+    
+### STEP 2: Display the returned password reset request form to the user.
+
+The request to ``/resetpw`` will return the HTML for the standard Usergrid password reset request form that you will display to your user. The request form requires the users to provide their username as well as answer a standard CAPTCHA challenge:
+
+    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+    <html>
+    <head>
+    <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+    <title>Reset Password</title>
+    <link rel="stylesheet" type="text/css" href="/css/styles.css" />
+    </head>
+    <body>
+        <div class="dialog-area">
+            
+            <form class="dialog-form" action="" method="post">
+                <fieldset>
+                    <p>
+                        Enter the captcha to have your password reset instructions sent to
+                        someUser@adomain.com
+                    </p>
+                    <p id="human-proof"></p>
+                    <script type="text/javascript" src="https://www.google.com/recaptcha/api/challenge?k=6LdSTNESAAAAAKHdVglHmMu86_EoYxsJjqQD1IpZ"></script>
+
+                    <p class="buttons">
+                        <input type="submit" value="submit" />
+                    </p>
+                </fieldset>
+            </form>
+        </div>
+    </body>
+    </html>
+		
+You can apply any additional styling you wish to the form to make it match the style of your app before displaying it to the user.
+
+### STEP 3: Let Usergrid handle the rest!
+
+Once the user submits the form with their username, they will receive an email from Usergrid that contains a link to the password reset form, where they can specify a new password. The user entity will be updated immediately.

http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/4a92ab09/content/docs/_static/ajax-loader.gif
----------------------------------------------------------------------
diff --git a/content/docs/_static/ajax-loader.gif b/content/docs/_static/ajax-loader.gif
new file mode 100644
index 0000000..61faf8c
Binary files /dev/null and b/content/docs/_static/ajax-loader.gif differ

http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/4a92ab09/content/docs/_static/basic.css
----------------------------------------------------------------------
diff --git a/content/docs/_static/basic.css b/content/docs/_static/basic.css
new file mode 100644
index 0000000..9fa77d8
--- /dev/null
+++ b/content/docs/_static/basic.css
@@ -0,0 +1,599 @@
+/*
+ * basic.css
+ * ~~~~~~~~~
+ *
+ * Sphinx stylesheet -- basic theme.
+ *
+ * :copyright: Copyright 2007-2015 by the Sphinx team, see AUTHORS.
+ * :license: BSD, see LICENSE for details.
+ *
+ */
+
+/* -- main layout ----------------------------------------------------------- */
+
+div.clearer {
+    clear: both;
+}
+
+/* -- relbar ---------------------------------------------------------------- */
+
+div.related {
+    width: 100%;
+    font-size: 90%;
+}
+
+div.related h3 {
+    display: none;
+}
+
+div.related ul {
+    margin: 0;
+    padding: 0 0 0 10px;
+    list-style: none;
+}
+
+div.related li {
+    display: inline;
+}
+
+div.related li.right {
+    float: right;
+    margin-right: 5px;
+}
+
+/* -- sidebar --------------------------------------------------------------- */
+
+div.sphinxsidebarwrapper {
+    padding: 10px 5px 0 10px;
+}
+
+div.sphinxsidebar {
+    float: left;
+    width: 230px;
+    margin-left: -100%;
+    font-size: 90%;
+}
+
+div.sphinxsidebar ul {
+    list-style: none;
+}
+
+div.sphinxsidebar ul ul,
+div.sphinxsidebar ul.want-points {
+    margin-left: 20px;
+    list-style: square;
+}
+
+div.sphinxsidebar ul ul {
+    margin-top: 0;
+    margin-bottom: 0;
+}
+
+div.sphinxsidebar form {
+    margin-top: 10px;
+}
+
+div.sphinxsidebar input {
+    border: 1px solid #98dbcc;
+    font-family: sans-serif;
+    font-size: 1em;
+}
+
+div.sphinxsidebar #searchbox input[type="text"] {
+    width: 170px;
+}
+
+div.sphinxsidebar #searchbox input[type="submit"] {
+    width: 30px;
+}
+
+img {
+    border: 0;
+    max-width: 100%;
+}
+
+/* -- search page ----------------------------------------------------------- */
+
+ul.search {
+    margin: 10px 0 0 20px;
+    padding: 0;
+}
+
+ul.search li {
+    padding: 5px 0 5px 20px;
+    background-image: url(file.png);
+    background-repeat: no-repeat;
+    background-position: 0 7px;
+}
+
+ul.search li a {
+    font-weight: bold;
+}
+
+ul.search li div.context {
+    color: #888;
+    margin: 2px 0 0 30px;
+    text-align: left;
+}
+
+ul.keywordmatches li.goodmatch a {
+    font-weight: bold;
+}
+
+/* -- index page ------------------------------------------------------------ */
+
+table.contentstable {
+    width: 90%;
+}
+
+table.contentstable p.biglink {
+    line-height: 150%;
+}
+
+a.biglink {
+    font-size: 1.3em;
+}
+
+span.linkdescr {
+    font-style: italic;
+    padding-top: 5px;
+    font-size: 90%;
+}
+
+/* -- general index --------------------------------------------------------- */
+
+table.indextable {
+    width: 100%;
+}
+
+table.indextable td {
+    text-align: left;
+    vertical-align: top;
+}
+
+table.indextable dl, table.indextable dd {
+    margin-top: 0;
+    margin-bottom: 0;
+}
+
+table.indextable tr.pcap {
+    height: 10px;
+}
+
+table.indextable tr.cap {
+    margin-top: 10px;
+    background-color: #f2f2f2;
+}
+
+img.toggler {
+    margin-right: 3px;
+    margin-top: 3px;
+    cursor: pointer;
+}
+
+div.modindex-jumpbox {
+    border-top: 1px solid #ddd;
+    border-bottom: 1px solid #ddd;
+    margin: 1em 0 1em 0;
+    padding: 0.4em;
+}
+
+div.genindex-jumpbox {
+    border-top: 1px solid #ddd;
+    border-bottom: 1px solid #ddd;
+    margin: 1em 0 1em 0;
+    padding: 0.4em;
+}
+
+/* -- general body styles --------------------------------------------------- */
+
+a.headerlink {
+    visibility: hidden;
+}
+
+h1:hover > a.headerlink,
+h2:hover > a.headerlink,
+h3:hover > a.headerlink,
+h4:hover > a.headerlink,
+h5:hover > a.headerlink,
+h6:hover > a.headerlink,
+dt:hover > a.headerlink,
+caption:hover > a.headerlink,
+p.caption:hover > a.headerlink,
+div.code-block-caption:hover > a.headerlink {
+    visibility: visible;
+}
+
+div.body p.caption {
+    text-align: inherit;
+}
+
+div.body td {
+    text-align: left;
+}
+
+.field-list ul {
+    padding-left: 1em;
+}
+
+.first {
+    margin-top: 0 !important;
+}
+
+p.rubric {
+    margin-top: 30px;
+    font-weight: bold;
+}
+
+img.align-left, .figure.align-left, object.align-left {
+    clear: left;
+    float: left;
+    margin-right: 1em;
+}
+
+img.align-right, .figure.align-right, object.align-right {
+    clear: right;
+    float: right;
+    margin-left: 1em;
+}
+
+img.align-center, .figure.align-center, object.align-center {
+  display: block;
+  margin-left: auto;
+  margin-right: auto;
+}
+
+.align-left {
+    text-align: left;
+}
+
+.align-center {
+    text-align: center;
+}
+
+.align-right {
+    text-align: right;
+}
+
+/* -- sidebars -------------------------------------------------------------- */
+
+div.sidebar {
+    margin: 0 0 0.5em 1em;
+    border: 1px solid #ddb;
+    padding: 7px 7px 0 7px;
+    background-color: #ffe;
+    width: 40%;
+    float: right;
+}
+
+p.sidebar-title {
+    font-weight: bold;
+}
+
+/* -- topics ---------------------------------------------------------------- */
+
+div.topic {
+    border: 1px solid #ccc;
+    padding: 7px 7px 0 7px;
+    margin: 10px 0 10px 0;
+}
+
+p.topic-title {
+    font-size: 1.1em;
+    font-weight: bold;
+    margin-top: 10px;
+}
+
+/* -- admonitions ----------------------------------------------------------- */
+
+div.admonition {
+    margin-top: 10px;
+    margin-bottom: 10px;
+    padding: 7px;
+}
+
+div.admonition dt {
+    font-weight: bold;
+}
+
+div.admonition dl {
+    margin-bottom: 0;
+}
+
+p.admonition-title {
+    margin: 0px 10px 5px 0px;
+    font-weight: bold;
+}
+
+div.body p.centered {
+    text-align: center;
+    margin-top: 25px;
+}
+
+/* -- tables ---------------------------------------------------------------- */
+
+table.docutils {
+    border: 0;
+    border-collapse: collapse;
+}
+
+table caption span.caption-number {
+    font-style: italic;
+}
+
+table caption span.caption-text {
+}
+
+table.docutils td, table.docutils th {
+    padding: 1px 8px 1px 5px;
+    border-top: 0;
+    border-left: 0;
+    border-right: 0;
+    border-bottom: 1px solid #aaa;
+}
+
+table.field-list td, table.field-list th {
+    border: 0 !important;
+}
+
+table.footnote td, table.footnote th {
+    border: 0 !important;
+}
+
+th {
+    text-align: left;
+    padding-right: 5px;
+}
+
+table.citation {
+    border-left: solid 1px gray;
+    margin-left: 1px;
+}
+
+table.citation td {
+    border-bottom: none;
+}
+
+/* -- figures --------------------------------------------------------------- */
+
+div.figure {
+    margin: 0.5em;
+    padding: 0.5em;
+}
+
+div.figure p.caption {
+    padding: 0.3em;
+}
+
+div.figure p.caption span.caption-number {
+    font-style: italic;
+}
+
+div.figure p.caption span.caption-text {
+}
+
+
+/* -- other body styles ----------------------------------------------------- */
+
+ol.arabic {
+    list-style: decimal;
+}
+
+ol.loweralpha {
+    list-style: lower-alpha;
+}
+
+ol.upperalpha {
+    list-style: upper-alpha;
+}
+
+ol.lowerroman {
+    list-style: lower-roman;
+}
+
+ol.upperroman {
+    list-style: upper-roman;
+}
+
+dl {
+    margin-bottom: 15px;
+}
+
+dd p {
+    margin-top: 0px;
+}
+
+dd ul, dd table {
+    margin-bottom: 10px;
+}
+
+dd {
+    margin-top: 3px;
+    margin-bottom: 10px;
+    margin-left: 30px;
+}
+
+dt:target, .highlighted {
+    background-color: #fbe54e;
+}
+
+dl.glossary dt {
+    font-weight: bold;
+    font-size: 1.1em;
+}
+
+.field-list ul {
+    margin: 0;
+    padding-left: 1em;
+}
+
+.field-list p {
+    margin: 0;
+}
+
+.optional {
+    font-size: 1.3em;
+}
+
+.sig-paren {
+    font-size: larger;
+}
+
+.versionmodified {
+    font-style: italic;
+}
+
+.system-message {
+    background-color: #fda;
+    padding: 5px;
+    border: 3px solid red;
+}
+
+.footnote:target  {
+    background-color: #ffa;
+}
+
+.line-block {
+    display: block;
+    margin-top: 1em;
+    margin-bottom: 1em;
+}
+
+.line-block .line-block {
+    margin-top: 0;
+    margin-bottom: 0;
+    margin-left: 1.5em;
+}
+
+.guilabel, .menuselection {
+    font-family: sans-serif;
+}
+
+.accelerator {
+    text-decoration: underline;
+}
+
+.classifier {
+    font-style: oblique;
+}
+
+abbr, acronym {
+    border-bottom: dotted 1px;
+    cursor: help;
+}
+
+/* -- code displays --------------------------------------------------------- */
+
+pre {
+    overflow: auto;
+    overflow-y: hidden;  /* fixes display issues on Chrome browsers */
+}
+
+td.linenos pre {
+    padding: 5px 0px;
+    border: 0;
+    background-color: transparent;
+    color: #aaa;
+}
+
+table.highlighttable {
+    margin-left: 0.5em;
+}
+
+table.highlighttable td {
+    padding: 0 0.5em 0 0.5em;
+}
+
+div.code-block-caption {
+    padding: 2px 5px;
+    font-size: small;
+}
+
+div.code-block-caption code {
+    background-color: transparent;
+}
+
+div.code-block-caption + div > div.highlight > pre {
+    margin-top: 0;
+}
+
+div.code-block-caption span.caption-number {
+    padding: 0.1em 0.3em;
+    font-style: italic;
+}
+
+div.code-block-caption span.caption-text {
+}
+
+div.literal-block-wrapper {
+    padding: 1em 1em 0;
+}
+
+div.literal-block-wrapper div.highlight {
+    margin: 0;
+}
+
+code.descname {
+    background-color: transparent;
+    font-weight: bold;
+    font-size: 1.2em;
+}
+
+code.descclassname {
+    background-color: transparent;
+}
+
+code.xref, a code {
+    background-color: transparent;
+    font-weight: bold;
+}
+
+h1 code, h2 code, h3 code, h4 code, h5 code, h6 code {
+    background-color: transparent;
+}
+
+.viewcode-link {
+    float: right;
+}
+
+.viewcode-back {
+    float: right;
+    font-family: sans-serif;
+}
+
+div.viewcode-block:target {
+    margin: -1px -10px;
+    padding: 0 10px;
+}
+
+/* -- math display ---------------------------------------------------------- */
+
+img.math {
+    vertical-align: middle;
+}
+
+div.body div.math p {
+    text-align: center;
+}
+
+span.eqno {
+    float: right;
+}
+
+/* -- printout stylesheet --------------------------------------------------- */
+
+@media print {
+    div.document,
+    div.documentwrapper,
+    div.bodywrapper {
+        margin: 0 !important;
+        width: 100%;
+    }
+
+    div.sphinxsidebar,
+    div.related,
+    div.footer,
+    #top-link {
+        display: none;
+    }
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/4a92ab09/content/docs/_static/comment-bright.png
----------------------------------------------------------------------
diff --git a/content/docs/_static/comment-bright.png b/content/docs/_static/comment-bright.png
new file mode 100644
index 0000000..551517b
Binary files /dev/null and b/content/docs/_static/comment-bright.png differ

http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/4a92ab09/content/docs/_static/comment-close.png
----------------------------------------------------------------------
diff --git a/content/docs/_static/comment-close.png b/content/docs/_static/comment-close.png
new file mode 100644
index 0000000..09b54be
Binary files /dev/null and b/content/docs/_static/comment-close.png differ

http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/4a92ab09/content/docs/_static/comment.png
----------------------------------------------------------------------
diff --git a/content/docs/_static/comment.png b/content/docs/_static/comment.png
new file mode 100644
index 0000000..92feb52
Binary files /dev/null and b/content/docs/_static/comment.png differ

http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/4a92ab09/content/docs/_static/css/badge_only.css
----------------------------------------------------------------------
diff --git a/content/docs/_static/css/badge_only.css b/content/docs/_static/css/badge_only.css
new file mode 100644
index 0000000..5f8b720
--- /dev/null
+++ b/content/docs/_static/css/badge_only.css
@@ -0,0 +1,4 @@
+.fa:before{-webkit-font-smoothing:antialiased}.clearfix{*zoom:1}.clearfix:before,.clearfix:after{display:table;content:""}.clearfix:after{clear:both}@font-face{font-family:FontAwesome;font-weight:normal;font-style:normal;src:url("../font/fontawesome_webfont.eot");src:url("../font/fontawesome_webfont.eot?#iefix") format("embedded-opentype"),url("../font/fontawesome_webfont.woff") format("woff"),url("../font/fontawesome_webfont.ttf") format("truetype"),url("../font/fontawesome_webfont.svg#FontAwesome") format("svg")}.fa:before{display:inline-block;font-family:FontAwesome;font-style:normal;font-weight:normal;line-height:1;text-decoration:inherit}a .fa{display:inline-block;text-decoration:inherit}li .fa{display:inline-block}li .fa-large:before,li .fa-large:before{width:1.875em}ul.fas{list-style-type:none;margin-left:2em;text-indent:-0.8em}ul.fas li .fa{width:0.8em}ul.fas li .fa-large:before,ul.fas li .fa-large:before{vertical-align:baseline}.fa-book:before{content:""}.icon-book:be
 fore{content:""}.fa-caret-down:before{content:""}.icon-caret-down:before{content:""}.fa-caret-up:before{content:""}.icon-caret-up:before{content:""}.fa-caret-left:before{content:""}.icon-caret-left:before{content:""}.fa-caret-right:before{content:""}.icon-caret-right:before{content:""}.rst-versions{position:fixed;bottom:0;left:0;width:300px;color:#fcfcfc;background:#1f1d1d;border-top:solid 10px #343131;font-family:"Lato","proxima-nova","Helvetica Neue",Arial,sans-serif;z-index:400}.rst-versions a{color:#2980B9;text-decoration:none}.rst-versions .rst-badge-small{display:none}.rst-versions .rst-current-version{padding:12px;background-color:#272525;display:block;text-align:right;font-size:90%;cursor:pointer;color:#27AE60;*zoom:1}.rst-versions .rst-current-version:before,.rst-versions .rst-current-version:after{display:table;content:""}.rst-versions .rst-current-version:after{clear:both}.rst-versions .rst-current-version .fa{color:#fcfcfc}.rst-versions .rst-cu
 rrent-version .fa-book{float:left}.rst-versions .rst-current-version .icon-book{float:left}.rst-versions .rst-current-version.rst-out-of-date{background-color:#E74C3C;color:#fff}.rst-versions .rst-current-version.rst-active-old-version{background-color:#F1C40F;color:#000}.rst-versions.shift-up .rst-other-versions{display:block}.rst-versions .rst-other-versions{font-size:90%;padding:12px;color:gray;display:none}.rst-versions .rst-other-versions hr{display:block;height:1px;border:0;margin:20px 0;padding:0;border-top:solid 1px #413d3d}.rst-versions .rst-other-versions dd{display:inline-block;margin:0}.rst-versions .rst-other-versions dd a{display:inline-block;padding:6px;color:#fcfcfc}.rst-versions.rst-badge{width:auto;bottom:20px;right:20px;left:auto;border:none;max-width:300px}.rst-versions.rst-badge .icon-book{float:none}.rst-versions.rst-badge .fa-book{float:none}.rst-versions.rst-badge.shift-up .rst-current-version{text-align:right}.rst-versions.rst-badge.shift-up .rst-current-ver
 sion .fa-book{float:left}.rst-versions.rst-badge.shift-up .rst-current-version .icon-book{float:left}.rst-versions.rst-badge .rst-current-version{width:auto;height:30px;line-height:30px;padding:0 6px;display:block;text-align:center}@media screen and (max-width: 768px){.rst-versions{width:85%;display:none}.rst-versions.shift{display:block}img{width:100%;height:auto}}
+/*# sourceMappingURL=badge_only.css.map */
+
+

http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/4a92ab09/content/docs/_static/css/badge_only.css.map
----------------------------------------------------------------------
diff --git a/content/docs/_static/css/badge_only.css.map b/content/docs/_static/css/badge_only.css.map
new file mode 100644
index 0000000..b09cc62
--- /dev/null
+++ b/content/docs/_static/css/badge_only.css.map
@@ -0,0 +1,7 @@
+{
+"version": 3,
+"mappings": "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",
+"sources": ["../../../bower_components/wyrm/sass/wyrm_core/_mixin.sass","../../../bower_components/bourbon/dist/css3/_font-face.scss","../../../sass/_theme_badge_fa.sass","../../../sass/_theme_badge.sass","../../../bower_components/wyrm/sass/wyrm_core/_wy_variables.sass","../../../sass/_theme_variables.sass","../../../bower_components/neat/app/assets/stylesheets/grid/_media.scss"],
+"names": [],
+"file": "badge_only.css"
+}