You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@allura.apache.org by he...@apache.org on 2015/08/14 18:11:11 UTC

[01/13] allura git commit: [#6797] remove unused baseTool type. Webhooks collection (only one) doesn't let you POST at the collection level

Repository: allura
Updated Branches:
  refs/heads/hs/6797 [created] f847633bf


[#6797] remove unused baseTool type.  Webhooks collection (only one) doesn't let you POST at the collection level


Project: http://git-wip-us.apache.org/repos/asf/allura/repo
Commit: http://git-wip-us.apache.org/repos/asf/allura/commit/320e5d91
Tree: http://git-wip-us.apache.org/repos/asf/allura/tree/320e5d91
Diff: http://git-wip-us.apache.org/repos/asf/allura/diff/320e5d91

Branch: refs/heads/hs/6797
Commit: 320e5d91baf15f4032039719bb256bd345c5e85c
Parents: 2b67662
Author: Dave Brondsema <da...@brondsema.net>
Authored: Thu Aug 13 14:29:54 2015 -0400
Committer: Heith Seewald <hs...@hsmb.local>
Committed: Fri Aug 14 09:35:28 2015 -0400

----------------------------------------------------------------------
 Allura/docs/api-rest/api.raml           |  6 +++---
 Allura/docs/api-rest/resourceTypes.yaml | 22 +---------------------
 2 files changed, 4 insertions(+), 24 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/allura/blob/320e5d91/Allura/docs/api-rest/api.raml
----------------------------------------------------------------------
diff --git a/Allura/docs/api-rest/api.raml b/Allura/docs/api-rest/api.raml
index dfedf35..2d9b211 100755
--- a/Allura/docs/api-rest/api.raml
+++ b/Allura/docs/api-rest/api.raml
@@ -216,7 +216,6 @@ baseUriParameters:
             Creates a new ticket.
           post:
             body:
-              # FIXME?
               application/x-www-form-urlencoded:
                 formParameters:
                   access_token:
@@ -269,7 +268,6 @@ baseUriParameters:
 
             post:
               body:
-                # form?
                 application/x-www-form-urlencoded:
                   formParameters:
                     access_token:
@@ -543,7 +541,9 @@ baseUriParameters:
               This is to manage webhooks programatically. See the [Webhook docs](https://forge-allura.apache.org/p/allura/wiki/Webhooks/) for more information.
 
               The webhook payloads and signature verification method are documented at https://forge-allura.apache.org/p/allura/wiki/Webhooks/
-
+            get:
+              description: |
+                Returns the list of webhooks
 
             /{type}:
               uriParameters:

http://git-wip-us.apache.org/repos/asf/allura/blob/320e5d91/Allura/docs/api-rest/resourceTypes.yaml
----------------------------------------------------------------------
diff --git a/Allura/docs/api-rest/resourceTypes.yaml b/Allura/docs/api-rest/resourceTypes.yaml
index 4bb176f..4218464 100755
--- a/Allura/docs/api-rest/resourceTypes.yaml
+++ b/Allura/docs/api-rest/resourceTypes.yaml
@@ -1,6 +1,6 @@
 - base:
     get?:
-      responses: &standardResponses
+      responses: &standardResponses  # yaml syntax to alias properties
         200:
           description: OK
     put?:
@@ -13,22 +13,10 @@
             description: Created
     delete?:
       responses: *standardResponses
-- baseTool:
-    get?:
-      responses:
-        200:
-          description: OK
-    post?:
-        responses:
-          201:
-            description: Created
-    delete?:
-      responses: *standardResponses
 - collection:
     type: base
     get:
       is: [ pageable ]
-    post:
 - member:
       type: base
       get?:
@@ -85,14 +73,6 @@
             application/json:
               schema: <<schema>>
               example: <<example>>
-    post:
-      body:
-        application/json:
-      responses:
-        201:
-          body:
-            application/json:
-              schema: <<schema>>
 - permission:
     description: |
       Checks if a given user has permissions.


[11/13] allura git commit: [#6797] remove unused traits. Change examples in 'pageable' since it was starting on page 2 isn't very helpful :)

Posted by he...@apache.org.
[#6797] remove unused traits.  Change examples in 'pageable' since it was starting on page 2 isn't very helpful :)


Project: http://git-wip-us.apache.org/repos/asf/allura/repo
Commit: http://git-wip-us.apache.org/repos/asf/allura/commit/b6483f86
Tree: http://git-wip-us.apache.org/repos/asf/allura/tree/b6483f86
Diff: http://git-wip-us.apache.org/repos/asf/allura/diff/b6483f86

Branch: refs/heads/hs/6797
Commit: b6483f86acf5037441de7f15e72c99e43deed349
Parents: 320e5d9
Author: Dave Brondsema <da...@brondsema.net>
Authored: Thu Aug 13 14:40:13 2015 -0400
Committer: Heith Seewald <hs...@hsmb.local>
Committed: Fri Aug 14 09:35:29 2015 -0400

----------------------------------------------------------------------
 Allura/docs/api-rest/traits.yaml | 16 ++++------------
 1 file changed, 4 insertions(+), 12 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/allura/blob/b6483f86/Allura/docs/api-rest/traits.yaml
----------------------------------------------------------------------
diff --git a/Allura/docs/api-rest/traits.yaml b/Allura/docs/api-rest/traits.yaml
index 40b39e3..2b45b71 100755
--- a/Allura/docs/api-rest/traits.yaml
+++ b/Allura/docs/api-rest/traits.yaml
@@ -20,25 +20,17 @@
 - pageable:
     queryParameters:
       page:
-        description: Skip over a number of elements by specifying an offset value for the query
+        description: Skip over a number of elements by specifying a starting page
         type: integer
         required: false
-        example: 2
+        example: 0
         default: 0
       limit:
-        description: Limit the number of elements on the response
+        description: Limit the number of elements on the response "page"
         type: integer
         required: false
-        example: 5
+        example: 10
         default: 10
-- paged:
-    queryParameters:
-      numPages:
-        description: The number of pages to return
-- rateLimited:
-    queryParameters:
-      numPages:
-        description: The number of pages to return, not to exceed <<maxPages>>
 - permissionTestable:
     description: |
       **Endpoints**


[04/13] allura git commit: [#6797] initial RAML, written by Heith

Posted by he...@apache.org.
[#6797] initial RAML, written by Heith


Project: http://git-wip-us.apache.org/repos/asf/allura/repo
Commit: http://git-wip-us.apache.org/repos/asf/allura/commit/459af1ba
Tree: http://git-wip-us.apache.org/repos/asf/allura/tree/459af1ba
Diff: http://git-wip-us.apache.org/repos/asf/allura/diff/459af1ba

Branch: refs/heads/hs/6797
Commit: 459af1ba0ee05ae78a3814fe748c525609880c4e
Parents: 2f144a9
Author: Dave Brondsema <da...@brondsema.net>
Authored: Fri Aug 7 16:05:56 2015 -0400
Committer: Heith Seewald <hs...@hsmb.local>
Committed: Fri Aug 14 09:35:28 2015 -0400

----------------------------------------------------------------------
 Allura/docs/api-rest/api.raml                   | 617 +++++++++++++++++++
 Allura/docs/api-rest/examples/blog.json         |  19 +
 Allura/docs/api-rest/examples/blogPost.json     |  20 +
 Allura/docs/api-rest/examples/discussion.json   |  58 ++
 Allura/docs/api-rest/examples/link.json         |   1 +
 Allura/docs/api-rest/examples/page.json         |  18 +
 Allura/docs/api-rest/examples/project.json      | 144 +++++
 .../docs/api-rest/examples/searchedTickets.json | 126 ++++
 Allura/docs/api-rest/examples/ticket.json       |  65 ++
 Allura/docs/api-rest/examples/tickets.json      | 150 +++++
 Allura/docs/api-rest/examples/user.json         |  75 +++
 Allura/docs/api-rest/examples/userProfile.json  |  56 ++
 Allura/docs/api-rest/examples/webhook.json      |   7 +
 Allura/docs/api-rest/examples/webhooks.json     |  24 +
 Allura/docs/api-rest/examples/wiki.json         |  28 +
 Allura/docs/api-rest/resourceTypes.yaml         | 150 +++++
 Allura/docs/api-rest/schemas/blog.json          |  37 ++
 Allura/docs/api-rest/schemas/blogPost.json      |  75 +++
 Allura/docs/api-rest/schemas/discussion.json    | 103 ++++
 Allura/docs/api-rest/schemas/hasPermission.json |  12 +
 Allura/docs/api-rest/schemas/link.json          |  12 +
 Allura/docs/api-rest/schemas/page.json          |  63 ++
 Allura/docs/api-rest/schemas/project.json       | 179 ++++++
 .../docs/api-rest/schemas/searchedTickets.json  | 210 +++++++
 Allura/docs/api-rest/schemas/ticket.json        | 180 ++++++
 Allura/docs/api-rest/schemas/tickets.json       | 163 +++++
 Allura/docs/api-rest/schemas/user.json          | 196 ++++++
 Allura/docs/api-rest/schemas/userProfile.json   | 266 ++++++++
 Allura/docs/api-rest/schemas/webhook.json       |  34 +
 Allura/docs/api-rest/schemas/webhooks.json      |  57 ++
 Allura/docs/api-rest/schemas/wiki.json          |  16 +
 Allura/docs/api-rest/securitySchemes.yaml       |   8 +
 Allura/docs/api-rest/traits.yaml                |  80 +++
 33 files changed, 3249 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/allura/blob/459af1ba/Allura/docs/api-rest/api.raml
----------------------------------------------------------------------
diff --git a/Allura/docs/api-rest/api.raml b/Allura/docs/api-rest/api.raml
new file mode 100755
index 0000000..b22c117
--- /dev/null
+++ b/Allura/docs/api-rest/api.raml
@@ -0,0 +1,617 @@
+#%RAML 0.8
+---
+title: Apache Allura
+version: 1
+baseUri: https://{domain}/rest
+
+resourceTypes: !include resourceTypes.yaml
+traits: !include traits.yaml
+securitySchemes: !include securitySchemes.yaml
+
+baseUriParameters:
+  domain:
+    description: "The website domain"
+    example: "forge-allura.apache.org"
+    default: "forge-allura.apache.org"
+
+
+/{neighborhood}:
+    description: |
+      Neighborhoods are groups of logically related projects, which have the same default options. 
+      
+    uriParameters:
+      neighborhood:
+        example: p
+        description: |
+          Allura has two default neighborhoods: **“Projects”** `/p` and **“Users”** `/u`. 
+          More information can be found [here](https://forge-allura.apache.org/docs/getting_started/using.html?highlight=neighborhood#what-are-neighborhoods)
+    
+    /has_access:
+      type: permission
+
+    /{project}:
+      description: |
+        Get or modify existing projects.
+      uriParameters:
+        project:
+          description: "The Apache Allura Project."
+          example: "allura"
+          pattern: ([a-zA-Z]+)
+    
+      type: { 
+          project: { 
+          schema: !include schemas/project.json,
+          example: !include examples/project.json
+          }
+        }
+            
+      /has_access:
+        type: permission
+        
+        /{link}:
+          description: |
+            Represents the External Link tool.
+          type: { 
+              tool: {
+              example: !include examples/link.json,
+              schema: !include schemas/link.json
+              }
+            }
+        
+          get:
+            description: |
+              Returns the existing url.
+        
+          post:
+            description: |
+              Updates the url. *authentication required*.
+            body:
+              application/x-www-form-urlencoded:
+                formParameters:
+                  url:
+                    description: |
+                      The url you would like to update to.
+                    type: string
+                    example: http://google.com
+        
+        /{blog}:
+          type: { 
+              tool: {
+              example: !include examples/blog.json,
+              schema: !include schemas/blog.json
+              }
+            }
+          description: |
+            Represents the **Blog tool**
+        
+          displayName: Blog
+          uriParameters:
+           blog:
+             displayName: Blog Name
+             type: string
+             example: blog
+        
+          get:
+            description: |
+              Returns a list of posts, including title and API url.
+            responses:
+              200:
+                body:
+                  application/json:
+                    schema: !include schemas/blog.json
+                    example: !include examples/blog.json
+          post:
+            description: |
+              Creates a new blog post.
+            body:
+              application/x-www-form-urlencoded:
+                formParameters:
+                  title:
+                    description: |
+                      The title of the post.
+                    type: string
+                    example: New API docs released!
+                  text:
+                    description: |
+                      The text of the post.
+                    type: string
+                    example: Lots of text here describing apis!\nThat is all.
+                  labels:
+                    description: |
+                      Labels of the post -- comma seperated strings
+                    type: string
+                    example: api,development
+                  state:
+                    description: |
+                      Draft or published.
+                    enum: [draft, published]
+                    type: string
+                    example: published
+        
+          /{year}/{month}/{title}:
+              type: {
+                tool: {
+                example: !include examples/blogPost.json,
+                schema: !include schemas/blogPost.json
+                }
+              }
+              displayName: Blog Post
+              uriParameters:
+               year:
+                 displayName: Year
+                 type: number
+                 example: 2015
+               month:
+                 displayName: Month
+                 type: number
+                 example: 04
+               title:
+                 displayName: Title
+                 type: string
+                 example: project-insights
+        
+              post:
+                description: |
+                  Updates an existing blog post.
+                body:
+                  application/x-www-form-urlencoded:
+                    formParameters:
+                      title:
+                        description: |
+                          The title of the post.
+                        type: string
+                      text:
+                        description: |
+                          The text of the post.
+                        type: string
+                      labels:
+                        description: |
+                          Labels of the post -- comma seperated strings
+                        type: string
+                      state:
+                        description: |
+                          Draft or published.
+                        enum: [draft, published]
+                        type: string
+        
+          /has_access:
+            type: permission
+        
+        /{forum}:
+          description: |
+            A list of forums
+          type: {
+              tool: {
+              example: !include examples/page.json,
+              schema: !include schemas/page.json
+              }
+            }
+        
+          displayName: forum
+          uriParameters:
+           forum:
+             displayName: Forum Name
+             type: string
+             example: general
+             description: |
+               Returns a list of forums, including name, description, num_posts, API URL, and last_post details
+        
+               To view more than 100 threads, or 100 posts in a thread, use the pagination support of the API by adding ?page=1 etc. to the URL.
+        
+          /forum:
+            description: |
+              returns a limited list of topics in the forum, with fields for subject, num_replies, API URL, and last_post
+            /{slug}:
+              description: |
+                returns a limited list of posts in the thread, with fields for author, text, and timestamp. Nested posts (i.e. a reply to a post) can be determined by the slug structure. For example, "slug": "0a0b/9f00" is a reply to the post with "slug": "0a0b"
+        
+          /has_access:
+            type: permission
+        
+        /{discussion}:
+          description: |
+            Represents the **Discussion Tool**.
+          type: {
+              tool: {
+              schema: !include schemas/discussion.json,
+              example: !include examples/discussion.json
+        
+              }
+            }
+        
+          displayName: Discussion
+          uriParameters:
+           discussion:
+             displayName: Discussion Name
+             type: string
+             example: "discussion"
+        
+          /{forum}:
+            type: {
+                tool: {
+                  example: !include examples/page.json,
+                  schema: !include schemas/page.json
+                }
+              }
+        
+            displayName: forum
+            uriParameters:
+             forum:
+               displayName: Forum Name
+               type: string
+               example: general
+        
+          /has_access:
+            type: permission
+        
+        /{wiki}:
+          description: |
+            Represents the **Wiki Tool**.
+          type: {
+              tool: {
+              example: !include examples/wiki.json,
+              schema: !include schemas/wiki.json
+              }
+            }
+        
+          displayName: Wiki
+          uriParameters:
+           wiki:
+             displayName: Wiki Name
+             type: string
+             example: wiki
+        
+        
+          /{title}:
+            type: {
+                tool: {
+                example: !include examples/page.json,
+                schema: !include schemas/page.json
+                }
+              }
+        
+            displayName: Title
+            uriParameters:
+             title:
+               displayName: Wiki Title
+               type: string
+               example: Extensions
+            get:
+              description: |
+                returns a JSON representation of a page
+            post:
+              description: |
+                Creates or updates the titled page.
+              body:
+                application/x-www-form-urlencoded:
+                  formParameters:
+                    text:
+                      description: |
+                        Page text.
+                      type: string
+                    labels:
+                      description: |
+                       Comma-separated list of page labels.
+                      type: string
+        
+        
+          /has_access:
+            type: permission
+        
+        /{tracker}:
+          description: |
+            Represents the **Ticket Tracker Tool**.
+          type: {
+              tool: {
+              example: !include examples/tickets.json,
+              schema: !include schemas/ticket.json
+              }
+            }
+          is: [pageable]
+        
+          displayName: Tracker Url
+          uriParameters:
+           tracker:
+             displayName: Tracker Name
+             type: string
+             example: tickets
+        
+          get:
+            is: [pageable]
+            description: |
+              Get a list of tickets
+        
+          /_discuss:
+            description: |
+              returns summary information about the tool discussion, including the threads in the discussion (there is one thread per ticket)
+            get:
+        
+            /thread/{threadId}:
+              uriParameters:
+               threadId:
+                 displayName: Thread ID
+                 type: string
+                 example: f78b98a0
+        
+              get:
+                description: |
+                  returns summary information about a thread, including the posts in a thread
+              /{slug}:
+                uriParameters:
+                 slug:
+                   displayName: Slug
+                   type: string
+                   example: 9133
+                get:
+                  description: |
+                    returns detailed information about a post
+                /reply:
+                  description: |
+                    create a threaded reply to the given post
+                  post:
+                    body:
+                      application/x-www-form-urlencoded:
+                        formParameters:
+                          text:
+                            description: the text of the reply
+                            example: |
+                              I *agree* with you.
+                            required: true
+                            type: string
+              /new:
+                description: |
+                  create a post in the given thread
+                post:
+                  body:
+                    application/x-www-form-urlencoded:
+                      formParameters:
+                        text:
+                          description: The text of the new post
+                          example: |
+                            This is a new post!
+                          required: true
+                          type: string
+        
+          /search:
+            type: {
+              searchableCollection: {
+              queryParamName: q,
+              schema: !include schemas/searchedTickets.json,
+              example: !include examples/searchedTickets.json
+              }
+            }
+            is: [ pageable]
+        
+          /new:
+            description: |
+              Creates a new ticket.
+            post:
+              body:
+                application/x-www-form-urlencoded:
+                  formParameters:
+                    access_token:
+                      description: "The access token provided by the authentication application"
+                      required: true
+                      type: string
+                    ticket_form.summary:
+                      description: Ticket title
+                      type: string
+                      required: false
+                    ticket_form.description:
+                      description: ticket description
+                      type: string
+                      required: false
+                    ticket_form.assigned_to::
+                      type: string
+                      required: false
+                      description: username of ticket assignee
+                    ticket_form.labels:
+                      type: string
+                      required: false
+                      description:  comma-separated list of ticket labels
+                    ticket_form.attachment:
+                      type: file
+                      description:  (optional) attachment
+                      required: false
+                    ticket_form.custom field name:
+                      description:  custom field value
+                      type: string
+                      required: false
+        
+          /{ticketNumber}:
+            type: {
+              tool: {
+              example: !include examples/ticket.json,
+              schema: !include schemas/ticket.json
+        
+              }
+            }
+            displayName: Ticket Number
+            uriParameters:
+              ticketNumber:
+                example: 1
+                description: |
+                  Get a details of a ticket.
+        
+            /save:
+              description: |
+                updates an existing ticket
+                parameters are the same as /rest/p/project_name/mount_point/new
+        
+              post:
+                body:
+                  application/x-www-form-urlencoded:
+                    formParameters:
+                      access_token:
+                        description: "The access token provided by the authentication application"
+                        required: true
+                        type: string
+                      ticket_form.summary:
+                        description: Ticket title
+                        type: string
+                        required: false
+                      ticket_form.description:
+                        description: ticket description
+                        type: string
+                        required: false
+                      ticket_form.assigned_to::
+                        type: string
+                        required: false
+                        description: username of ticket assignee
+                      ticket_form.labels:
+                        type: string
+                        required: false
+                        description:  comma-separated list of ticket labels
+                      ticket_form.attachment:
+                        type: file
+                        description:  (optional) attachment
+                        required: false
+                      ticket_form.custom field name:
+                        description:  custom field value
+                        type: string
+                        required: false
+        
+          /has_access:
+            type: permission
+        
+        
+        /admin:
+          description: |
+            Endpoints for **project exporting** and managing **webhooks**
+        
+          /export:
+            description: |
+              Generates a full bulk export of your tool(s) in the same format as the API for individual access. Authentication required. Here is an [example shell](https://forge-allura.apache.org/p/allura/git/ci/master/tree/scripts/project_export) script using these APIs, suitable to run as a cron job.
+            post:
+              description: |
+                Submits an export job
+        
+                **400 Bad Request:** tools parameter not provided or is invalid
+                **503 Service Unavailable:** an export job is already running
+                **200 OK:** job submitted. Body will be: *{"status": "in progress", "filename": FILENAME}*
+          /export_status:
+            description: |
+              Check status of a bulk export job
+            get:
+              description: |
+                Returns status: busy or ready
+        
+          /{project}/webhooks:
+              type: {
+                typedCollection: {
+                example: !include examples/webhooks.json,
+                schema: !include schemas/webhook.json
+                }
+              }
+              is: [secured]
+              description: |
+                This is to manage webhooks programatically. See the [Webhook docs](https://forge-allura.apache.org/p/allura/wiki/Webhooks/) for more information.
+        
+                The webhook payloads and signature verification method are documented at https://forge-allura.apache.org/p/allura/wiki/Webhooks/
+        
+        
+              /{type}:
+                uriParameters:
+                  type:
+                    example: repo-push
+                    enum: [repo-push]
+                    description: |
+                      Allura supports one type of webhook for the moment - repo-push, triggered when a repository receives new commits. It is supported for Git, Mercurial and SVN repositories.
+                post:
+                  description: |
+                    Create a new webhook.
+                  body:
+                    application/x-www-form-urlencoded:
+                      formParameters:
+                        url:
+                          description: |
+                            The url to call when the the webhook is triggered.
+                          required: true
+                          type: string
+                /{id}:
+                  uriParameters:
+                    id:
+                      type: string
+                      description: |
+                        Unique identifier for a webhook.
+        
+                  get:
+                    description: |
+                      View a webhook
+                  post:
+                    description: |
+                      Update an existing webhook
+                    body:
+                      application/x-www-form-urlencoded:
+                        formParameters:
+                          url:
+                            description: |
+                              The url to call when the the webhook is triggered.
+                            required: true
+                            type: string
+                          secret:
+                            description: |
+                              Optionally supply your own secret.
+        
+                              Note: DO NOT ever expose your secret!
+                            required: false
+                            type: string
+                  delete:
+                    description: |
+                      Delete an existing webhook
+          /install_tool:
+            description: |
+              Adds a new tool to the project. *Authentication Required*.
+        
+              returns dict with two fields:
+              success: False if error is occurred, otherwise True
+              info: success or error message
+            post:
+              body:
+                application/x-www-form-urlencoded:
+                  formParameters:
+                    tool:
+                      description: Tool name that you want to install.
+                      example: tickets
+                      enum: [tickets, link, git, svn, mercurial, blog, discussion, subproject, wiki]
+                      required: true
+                      type: string
+                    mount_point:
+                      description: |
+                        The section of the url relitive to your project. For example: /p/your_project/{mount_point}
+                      example: git
+                      type: string
+                      required: true
+                    mount_label:
+                      description: |
+                        How your tool will be displayed in your project (like a "nice name" for the tool).
+                      example: Git
+                      type: string
+                      required: true
+                    order:
+                      type: string
+                      enum: [first, last, alpha_tool]
+                      required: false
+                      description: |
+                        "first", "last", or "alpha_tool" for position with respect to existing tools (or existing tools of the same type for "alpha_tool")
+        
+        /{username}:
+            description: |
+              Represents a user (returns a project-like response).
+              
+              Most often you'll use the /profile suffix to return user data.
+            type: {
+              tool:{
+                example: !include examples/user.json,
+                schema: !include schemas/user.json
+              }
+            }
+            /profile:
+              description: |
+                A user profile
+              type: {
+                tool:{
+                example: !include examples/userProfile.json,
+                schema: !include schemas/userProfile.json
+                }
+              }
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/allura/blob/459af1ba/Allura/docs/api-rest/examples/blog.json
----------------------------------------------------------------------
diff --git a/Allura/docs/api-rest/examples/blog.json b/Allura/docs/api-rest/examples/blog.json
new file mode 100755
index 0000000..5eb25dd
--- /dev/null
+++ b/Allura/docs/api-rest/examples/blog.json
@@ -0,0 +1,19 @@
+{
+    "count": 3,
+    "limit": 10,
+    "page": 0,
+    "posts": [
+        {
+            "title": "Project Insights",
+            "url": "http://localhost:8080/rest/p/finna/blog/2015/07/project-insights/"
+        },
+        {
+            "title": "New blog",
+            "url": "http://localhost:8080/rest/p/finna/blog/2015/07/new-blog/"
+        },
+        {
+            "title": "Old News",
+            "url": "http://localhost:8080/rest/p/finna/blog/2015/07/old-news/"
+        }
+    ]
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/allura/blob/459af1ba/Allura/docs/api-rest/examples/blogPost.json
----------------------------------------------------------------------
diff --git a/Allura/docs/api-rest/examples/blogPost.json b/Allura/docs/api-rest/examples/blogPost.json
new file mode 100755
index 0000000..d3a41da
--- /dev/null
+++ b/Allura/docs/api-rest/examples/blogPost.json
@@ -0,0 +1,20 @@
+{
+    "_id": "55ad27204d21224d82656b45",
+    "author": "root",
+    "discussion_thread": {
+        "_id": "afb74fce",
+        "discussion_id": "55ad26e94d21224d82656b31",
+        "posts": [],
+        "subject": "New blog discussion"
+    },
+    "discussion_thread_url": "http://localhost:8080/rest/p/finna/blog/_discuss/thread/afb74fce/",
+    "labels": [
+        "general"
+    ],
+    "mod_date": "2015-07-20 16:51:44.589000",
+    "related_artifacts": [],
+    "state": "published",
+    "text": "Just made a new blog here",
+    "title": "New blog",
+    "url": "http://localhost:8080/rest/p/finna/blog/2015/07/new-blog/"
+}

http://git-wip-us.apache.org/repos/asf/allura/blob/459af1ba/Allura/docs/api-rest/examples/discussion.json
----------------------------------------------------------------------
diff --git a/Allura/docs/api-rest/examples/discussion.json b/Allura/docs/api-rest/examples/discussion.json
new file mode 100755
index 0000000..128269b
--- /dev/null
+++ b/Allura/docs/api-rest/examples/discussion.json
@@ -0,0 +1,58 @@
+{
+  "count": 3,
+  "forums": [
+    {
+      "num_topics": 1,
+      "name": "Dev Only",
+      "url": "http://localhost:8080/rest/p/finna/discussion/devs/",
+      "shortname": "devs",
+      "_id": "55ad23c34d21224d82656add",
+      "last_post": {
+        "flagged_by": [],
+        "status": "ok",
+        "last_edited": "2015-07-20 16:39:53.290000",
+        "author": "root",
+        "timestamp": "2015-07-20 16:39:46.083000",
+        "thread_id": "2adb0c35",
+        "text": "checking into it.",
+        "author_id": "55687b5f4d2122410c76eb92",
+        "_id": "83aa16ca9db9f811d68ba47285c3d4c65b4f60d7.discussion@finna.p.localhost",
+        "slug": "c5af",
+        "subject": "Potential issue"
+      },
+      "description": "not open to public!"
+    },
+    {
+      "num_topics": 2,
+      "name": "General Discussion",
+      "url": "http://localhost:8080/rest/p/finna/discussion/general/",
+      "shortname": "general",
+      "_id": "5568f6684d212236d1eaed07",
+      "last_post": {
+        "flagged_by": [],
+        "status": "ok",
+        "last_edited": null,
+        "author": "root",
+        "timestamp": "2015-07-20 16:36:18.019000",
+        "thread_id": "a7528751",
+        "text": "How to fix anything!",
+        "author_id": "55687b5f4d2122410c76eb92",
+        "_id": "b248780c7fa265106dc91e6004107dd4a601afe8.discussion@finna.p.localhost",
+        "slug": "c920",
+        "subject": "Tech Support"
+      },
+      "description": "Forum about anything you want to talk about."
+    },
+    {
+      "num_topics": 0,
+      "name": "Off Topic",
+      "url": "http://localhost:8080/rest/p/finna/discussion/off-topic/",
+      "shortname": "off-topic",
+      "_id": "55ad23a44d21224d82656ada",
+      "last_post": null,
+      "description": "anything else...."
+    }
+  ],
+  "limit": 25,
+  "page": 0
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/allura/blob/459af1ba/Allura/docs/api-rest/examples/link.json
----------------------------------------------------------------------
diff --git a/Allura/docs/api-rest/examples/link.json b/Allura/docs/api-rest/examples/link.json
new file mode 100755
index 0000000..f0f351c
--- /dev/null
+++ b/Allura/docs/api-rest/examples/link.json
@@ -0,0 +1 @@
+{"url": "https://google.com"}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/allura/blob/459af1ba/Allura/docs/api-rest/examples/page.json
----------------------------------------------------------------------
diff --git a/Allura/docs/api-rest/examples/page.json b/Allura/docs/api-rest/examples/page.json
new file mode 100755
index 0000000..e40e9d8
--- /dev/null
+++ b/Allura/docs/api-rest/examples/page.json
@@ -0,0 +1,18 @@
+{
+  "related_artifacts": [
+    "/p/allura/wiki/Home/"
+  ],
+  "attachments": [],
+  "title": "Extensions",
+  "text": "The following extensions for Allura are available as separate packages:\r\n\r\nType  | Title  | License | Notes\r\n----- | ------------- | ----- | Notes\r\nTool  | [ForgeHg](http://pypi.python.org/pypi/ForgeHg) | GPLv2 | Maintained by the Allura developers.\u003Cbr>  Separate package due to Hg GPL license.\r\nTool  | [Pastebin](https://sourceforge.net/p/forgepastebin/) | Apache&nbsp;2 | Maintained by the Allura developers.\u003Cbr>  Example of writing a simple tool.\r\nTool  | [Donay Incentify](http://docs.donay.com/display/Dosense/Installing+Incentify+in+Allura) | Apache 2\r\nTool  | [Bitergia metrics](https://github.com/Bitergia/AlluraBitergiaMetrics) | Apache 2\r\nTool  | [Perforce SCM](https://sourceforge.net/p/p4allura/allura-fork/ci/master/tree/ForgeP4/)\r\nTool  | [Django Allura](https://github.com/rick446/DjangoAllura)\r\nImporter | [Google Code Wiki Importer](http://pypi.python.org/pypi/googlecodewikiimporter/) | GPLv3 | Maintained by the Allura developers.\u003C
 br>  Separate package due to `html2text` GPL.\r\nImporter | [Trac Wiki Importer](http://pypi.python.org/pypi/tracwikiimporter/) | GPLv3 | Maintained by the Allura developers.\u003Cbr>  Separate package due to `html2text` GPL.\r\nImporter | [Mediawiki data importer](http://pypi.python.org/pypi/mediawikiimporter/) | GPLv3 | Maintained by the Allura developers.\u003Cbr>  Separate package due to `html2text` GPL.\r\nExternal Integration  | [TeamCity](https://github.com/Vampire/teamcity-sourceforge) | Apache 2 | Targeted at SourceForge.net but APIs are the same, so base domain could be changed to any Allura host.\r\n",
+  "labels": [],
+  "discussion_thread": {
+    "_id": "9d181a1d",
+    "posts": [],
+    "discussion_id": "523331da6d19cd54e56931db",
+    "subject": ""
+  },
+  "mod_date": "2015-07-07 17:30:01.607000",
+  "_id": "523332d96d19cd54e569322b",
+  "discussion_thread_url": "https://forge-allura.apache.org/rest/p/allura/wiki/_discuss/thread/9d181a1d/"
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/allura/blob/459af1ba/Allura/docs/api-rest/examples/project.json
----------------------------------------------------------------------
diff --git a/Allura/docs/api-rest/examples/project.json b/Allura/docs/api-rest/examples/project.json
new file mode 100755
index 0000000..6744d30
--- /dev/null
+++ b/Allura/docs/api-rest/examples/project.json
@@ -0,0 +1,144 @@
+{
+    "status": "active",
+    "preferred_support_tool": "",
+    "preferred_support_url": "",
+    "labels": [],
+    "private": false,
+    "creation_date": "2013-02-12",
+    "socialnetworks": [
+        {
+            "accounturl": "",
+            "socialnetwork": "Twitter"
+        },
+        {
+            "accounturl": null,
+            "socialnetwork": "Facebook"
+        }
+    ],
+    "tools": [
+        {
+            "mount_point": "activity",
+            "name": "activity",
+            "label": "Activity"
+        },
+        {
+            "mount_point": "git",
+            "name": "git",
+            "label": "Git"
+        },
+        {
+            "mount_point": "allura-dev",
+            "name": "link",
+            "label": "Mailing List (dev)"
+        },
+        {
+            "mount_point": "wiki",
+            "name": "wiki",
+            "label": "Wiki"
+        },
+        {
+            "mount_point": "docs",
+            "name": "link",
+            "label": "Docs"
+        },
+        {
+            "mount_point": "license",
+            "name": "link",
+            "label": "License"
+        },
+        {
+            "mount_point": "apache",
+            "name": "link",
+            "label": "Apache.org"
+        },
+        {
+            "mount_point": "security",
+            "name": "link",
+            "label": "Security"
+        },
+        {
+            "mount_point": "thanks",
+            "name": "link",
+            "label": "Thanks"
+        },
+        {
+            "mount_point": "sponsorship",
+            "name": "link",
+            "label": "Sponsorship"
+        },
+        {
+            "mount_point": "tickets",
+            "name": "tickets",
+            "label": "Tickets"
+        },
+        {
+            "mount_point": "AlluraSite",
+            "name": "git",
+            "label": "Allura Site Repo"
+        },
+        {
+            "mount_point": "pastebin",
+            "name": "pastebin",
+            "label": "Pastebin"
+        }
+    ],
+    "categories": {
+        "developmentstatus": [],
+        "environment": [],
+        "language": [],
+        "license": [],
+        "database": [],
+        "topic": [],
+        "audience": [],
+        "translation": [],
+        "os": []
+    },
+    "_id": "511aa1d46d19cd14f9060c67",
+    "name": "Apache Allura™",
+    "url": "https://forge-allura.apache.org/p/allura/",
+    "icon_url": "https://forge-allura.apache.org/p/allura/icon",
+    "video_url": "www.youtube.com/embed/va9WPbKAI9U?rel=0",
+    "screenshots": [],
+    "summary": "Forge software for hosting software projects",
+    "short_description": "Apache Allura is an open source implementation of a software \"forge\", a web site that manages source code repositories, bug reports, discussions, wiki pages, blogs and more for any number of individual projects.",
+    "moved_to_url": "",
+    "shortname": "allura",
+    "developers": [
+        {
+            "url": "https://forge-allura.apache.org/u/masterbunnyfu/",
+            "username": "masterbunnyfu",
+            "name": "Cory Johns"
+        },
+        {
+            "url": "https://forge-allura.apache.org/u/jetmind/",
+            "username": "jetmind",
+            "name": "Igor Bondarenko"
+        },
+        {
+            "url": "https://forge-allura.apache.org/u/wwitzel3/",
+            "username": "wwitzel3",
+            "name": "Wayne Witzel III"
+        },
+        {
+            "url": "https://forge-allura.apache.org/u/alexluberg/",
+            "username": "alexluberg",
+            "name": "Alexander Luberg"
+        },
+        {
+            "url": "https://forge-allura.apache.org/u/vansteenburgh/",
+            "username": "vansteenburgh",
+            "name": "Tim Van Steenburgh"
+        },
+        {
+            "url": "https://forge-allura.apache.org/u/heiths/",
+            "username": "heiths",
+            "name": "Heith Seewald"
+        },
+        {
+            "url": "https://forge-allura.apache.org/u/brondsem/",
+            "username": "brondsem",
+            "name": "Dave Brondsema"
+        }
+    ],
+    "external_homepage": "http://allura.apache.org/"
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/allura/blob/459af1ba/Allura/docs/api-rest/examples/searchedTickets.json
----------------------------------------------------------------------
diff --git a/Allura/docs/api-rest/examples/searchedTickets.json b/Allura/docs/api-rest/examples/searchedTickets.json
new file mode 100755
index 0000000..a5502c5
--- /dev/null
+++ b/Allura/docs/api-rest/examples/searchedTickets.json
@@ -0,0 +1,126 @@
+{
+  "sort": null,
+  "count": 2,
+  "filter_choices": {
+    "status": [
+      [
+        "closed",
+        4
+      ],
+      [
+        "in-progress",
+        5
+      ],
+      [
+        "open",
+        2
+      ],
+      [
+        "review",
+        3
+      ]
+    ],
+    "reported_by": [
+      [
+        "brondsem",
+        5
+      ],
+      [
+        "ctsai",
+        1
+      ],
+      [
+        "heiths",
+        7
+      ],
+      [
+        "jetmind",
+        1
+      ]
+    ],
+    "_milestone": [
+      [
+        "unreleased",
+        14
+      ]
+    ],
+    "assigned_to": [
+      [
+        "brondsem",
+        1
+      ],
+      [
+        "heiths",
+        4
+      ],
+      [
+        "jetmind",
+        7
+      ]
+    ]
+  },
+  "filter": {},
+  "q": "labels:\"sf-current\"",
+  "solr_error": null,
+  "limit": 100,
+  "tickets": [
+    {
+      "status": "review",
+      "reported_by_id": "548b2d136d19cd59705380a3",
+      "related_artifacts": [],
+      "attachments": [],
+      "reported_by": "heiths",
+      "assigned_to": "heiths",
+      "labels": [
+        "sf-current",
+        "sf-2"
+      ],
+      "discussion_disabled": false,
+      "assigned_to_id": "548b2d136d19cd59705380a3",
+      "private": false,
+      "summary": "Fix pagination issue in the commit browser",
+      "mod_date": "2015-07-17 14:53:43.480000",
+      "votes_down": 0,
+      "votes_up": 0,
+      "_id": "55a6c6c86d19cd7d2dc5d89d",
+      "discussion_thread_url": "https://forge-allura.apache.org/rest/p/allura/tickets/_discuss/thread/3e30246e/",
+      "ticket_num": 7932,
+      "custom_fields": {
+        "_component": "General",
+        "_milestone": "unreleased",
+        "_reviewer": ""
+      },
+      "created_date": "2015-07-15 20:47:04.434000"
+    },
+    {
+      "status": "closed",
+      "reported_by_id": "511aa8756d19cd161e8c1b04",
+      "related_artifacts": [],
+      "attachments": [],
+      "reported_by": "brondsem",
+      "assigned_to": "brondsem",
+      "labels": [
+        "sf-current",
+        "sf-1",
+        "ux"
+      ],
+      "discussion_disabled": false,
+      "assigned_to_id": "511aa8756d19cd161e8c1b04",
+      "private": false,
+      "summary": "Site admin search tables can overflow the page width",
+      "mod_date": "2015-07-14 08:40:35.931000",
+      "votes_down": 0,
+      "votes_up": 0,
+      "_id": "55a3effc6d19cd320d814749",
+      "discussion_thread_url": "https://forge-allura.apache.org/rest/p/allura/tickets/_discuss/thread/1f1023b2/",
+      "ticket_num": 7928,
+      "custom_fields": {
+        "_component": "General",
+        "_milestone": "unreleased",
+        "_reviewer": "jetmind"
+      },
+      "created_date": "2015-07-13 17:06:04.135000"
+    }
+  ],
+  "page": 0
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/allura/blob/459af1ba/Allura/docs/api-rest/examples/ticket.json
----------------------------------------------------------------------
diff --git a/Allura/docs/api-rest/examples/ticket.json b/Allura/docs/api-rest/examples/ticket.json
new file mode 100755
index 0000000..f4ba990
--- /dev/null
+++ b/Allura/docs/api-rest/examples/ticket.json
@@ -0,0 +1,65 @@
+{
+  "ticket": {
+    "status": "review",
+    "reported_by_id": "548b2d136d19cd59705380a3",
+    "related_artifacts": [],
+    "attachments": [],
+    "reported_by": "heiths",
+    "assigned_to": "heiths",
+    "labels": [
+      "sf-2",
+      "sf-current"
+    ],
+    "discussion_disabled": false,
+    "assigned_to_id": "548b2d136d19cd59705380a3",
+    "private": false,
+    "summary": " Speed up diff processing with binary files",
+    "description": "In a git repo with a large amount of binary files, our diff processing can be very inefficient. We should test if a file is binary and exclude it from the diff processing section.",
+    "discussion_thread": {
+      "_id": "8fe1847f",
+      "posts": [
+        {
+          "text": "- **labels**:  --> sf-2, sf-current\n",
+          "attachments": [],
+          "author": "brondsem",
+          "timestamp": "2015-07-13 15:53:20.175000",
+          "last_edited": null,
+          "slug": "498b",
+          "subject": "#7925  Speed up diff processing with binary files"
+        },
+        {
+          "text": "- **status**: in-progress --> review\n",
+          "attachments": [],
+          "author": "heiths",
+          "timestamp": "2015-07-16 19:10:50.153000",
+          "last_edited": null,
+          "slug": "bd3e",
+          "subject": "#7925  Speed up diff processing with binary files"
+        },
+        {
+          "text": "QA: **hs/7925**\r\n\r\nBinary files should no longer make XHR requests for diff processing.",
+          "attachments": [],
+          "author": "heiths",
+          "timestamp": "2015-07-16 19:10:50.511000",
+          "last_edited": null,
+          "slug": "b8a7",
+          "subject": "#7925  Speed up diff processing with binary files"
+        }
+      ],
+      "discussion_id": "545186e86d19cd63b88d1604",
+      "subject": ""
+    },
+    "mod_date": "2015-07-16 19:10:50.625000",
+    "votes_down": 0,
+    "votes_up": 0,
+    "_id": "55a3d3736d19cd2cf292db10",
+    "discussion_thread_url": "https://forge-allura.apache.org/rest/p/allura/tickets/_discuss/thread/8fe1847f/",
+    "ticket_num": 7925,
+    "custom_fields": {
+      "_component": "General",
+      "_milestone": "unreleased",
+      "_reviewer": ""
+    },
+    "created_date": "2015-07-13 15:04:19.926000"
+  }
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/allura/blob/459af1ba/Allura/docs/api-rest/examples/tickets.json
----------------------------------------------------------------------
diff --git a/Allura/docs/api-rest/examples/tickets.json b/Allura/docs/api-rest/examples/tickets.json
new file mode 100755
index 0000000..fc0acc9
--- /dev/null
+++ b/Allura/docs/api-rest/examples/tickets.json
@@ -0,0 +1,150 @@
+{
+    "tickets": [
+        {
+            "summary": "Diff view on the Commit Browser should have a file size limit",
+            "ticket_num": 7933
+        },
+        {
+            "summary": "Fix pagination issue in the commit browser",
+            "ticket_num": 7932
+        },
+        {
+            "summary": "Tool install dialog needs to escape html/js",
+            "ticket_num": 7931
+        },
+        {
+            "summary": "Bug: viewing a thread updates project mod_date",
+            "ticket_num": 7930
+        },
+        {
+            "summary": "Enable voting on tickets by default",
+            "ticket_num": 7929
+        }
+    ],
+    "count": 3662,
+    "milestones": [
+        {
+            "due_date": "",
+            "complete": false,
+            "closed": 2316,
+            "default": false,
+            "description": "",
+            "total": 2316,
+            "name": "asf_release_1.0.0"
+        },
+        {
+            "due_date": "",
+            "complete": false,
+            "closed": 0,
+            "default": false,
+            "description": "",
+            "total": 0,
+            "name": "asf_release_1.0.0-RC1"
+        },
+        {
+            "due_date": "",
+            "complete": false,
+            "closed": 66,
+            "default": false,
+            "description": "",
+            "total": 66,
+            "name": "asf_release_1.0.1"
+        },
+        {
+            "due_date": "",
+            "complete": false,
+            "closed": 145,
+            "default": false,
+            "description": "",
+            "total": 145,
+            "name": "asf_release_1.1.0"
+        },
+        {
+            "due_date": "",
+            "complete": false,
+            "closed": 337,
+            "default": "on",
+            "description": "",
+            "total": 891,
+            "name": "unreleased"
+        },
+        {
+            "due_date": "",
+            "complete": false,
+            "closed": 182,
+            "default": false,
+            "description": "",
+            "total": 182,
+            "name": "asf_release_1.2.0"
+        },
+        {
+            "due_date": "",
+            "complete": false,
+            "closed": 13,
+            "default": false,
+            "description": "",
+            "total": 13,
+            "name": "asf_release_1.2.1"
+        },
+        {
+            "due_date": "",
+            "complete": false,
+            "closed": 49,
+            "default": false,
+            "description": "",
+            "total": 49,
+            "name": "asf_release_1.3.0"
+        }
+    ],
+    "tracker_config": {
+        "_id": "545186e86d19cd63b88d1603",
+        "options": {
+            "ordinal": 3,
+            "TicketHelpNew": "",
+            "mount_point": "tickets",
+            "TicketMonitoringType": "AllPublicTicketChanges",
+            "EnableVoting": true,
+            "TicketHelpSearch": "",
+            "TicketMonitoringEmail": "dev@allura.apache.org",
+            "import_id": {
+                "source": "Allura",
+                "app_config_id": "4c3493551be1ce11d8000032"
+            },
+            "mount_label": "Tickets"
+        }
+    },
+    "limit": 5,
+    "saved_bins": [
+        {
+            "sort": "",
+            "_id": "54526f3f6d19cd509a769848",
+            "terms": "labels:bitesize AND (status:open OR status:review OR status:in-progress)",
+            "summary": "Bitesize Tickets"
+        },
+        {
+            "sort": "",
+            "_id": "54526fd16d19cd5093545c7b",
+            "terms": "(assigned_to_s:$USER AND status:(blocked in-progress open)) OR (_reviewer_s:$USER AND status:review)",
+            "summary": "My Assigned Tickets"
+        },
+        {
+            "sort": "",
+            "_id": "545270036d19cd509a76984c",
+            "terms": "reported_by:$USER AND NOT status:closed",
+            "summary": "My Submitted Tickets"
+        },
+        {
+            "sort": "",
+            "_id": "54526ef86d19cd42f87fbb80",
+            "terms": "status:review",
+            "summary": "Needs Review"
+        },
+        {
+            "sort": "",
+            "_id": "5452703a6d19cd509a769850",
+            "terms": "labels:\"sf-current\"",
+            "summary": "SourceForge current sprint"
+        }
+    ],
+    "page": 0
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/allura/blob/459af1ba/Allura/docs/api-rest/examples/user.json
----------------------------------------------------------------------
diff --git a/Allura/docs/api-rest/examples/user.json b/Allura/docs/api-rest/examples/user.json
new file mode 100755
index 0000000..1c9632f
--- /dev/null
+++ b/Allura/docs/api-rest/examples/user.json
@@ -0,0 +1,75 @@
+{
+    "status": "active",
+    "preferred_support_tool": "",
+    "profile_api_url": "https://forge-allura.apache.org/rest/u/heiths/profile/",
+    "preferred_support_url": "",
+    "labels": [],
+    "private": false,
+    "creation_date": "2014-12-12",
+    "socialnetworks": [
+        {
+            "accounturl": "",
+            "socialnetwork": "Twitter"
+        },
+        {
+            "accounturl": "",
+            "socialnetwork": "Facebook"
+        }
+    ],
+    "tools": [
+        {
+            "mount_point": "admin",
+            "name": "admin",
+            "label": "Admin"
+        },
+        {
+            "mount_point": "wiki",
+            "name": "wiki",
+            "label": "Wiki"
+        },
+        {
+            "mount_point": "profile",
+            "name": "profile",
+            "label": "Profile"
+        },
+        {
+            "mount_point": "search",
+            "name": "search",
+            "label": "Search"
+        },
+        {
+            "mount_point": "activity",
+            "name": "activity",
+            "label": "Activity"
+        }
+    ],
+    "categories": {
+        "developmentstatus": [],
+        "environment": [],
+        "language": [],
+        "license": [],
+        "database": [],
+        "topic": [],
+        "audience": [],
+        "translation": [],
+        "os": []
+    },
+    "_id": "548b2d136d19cd59705380a6",
+    "name": "u/heiths",
+    "url": "https://forge-allura.apache.org/u/heiths/",
+    "icon_url": null,
+    "video_url": "",
+    "screenshots": [],
+    "summary": "",
+    "short_description": null,
+    "moved_to_url": "",
+    "shortname": "u/heiths",
+    "developers": [
+        {
+            "url": "https://forge-allura.apache.org/u/heiths/",
+            "username": "heiths",
+            "name": "Heith Seewald"
+        }
+    ],
+    "external_homepage": ""
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/allura/blob/459af1ba/Allura/docs/api-rest/examples/userProfile.json
----------------------------------------------------------------------
diff --git a/Allura/docs/api-rest/examples/userProfile.json b/Allura/docs/api-rest/examples/userProfile.json
new file mode 100755
index 0000000..ef04a94
--- /dev/null
+++ b/Allura/docs/api-rest/examples/userProfile.json
@@ -0,0 +1,56 @@
+{
+    "username": "heiths",
+    "name": "Heith Seewald",
+    "localization": {
+        "city": "Grand Rapids Area",
+        "country": "United States"
+    },
+    "skills": [
+        {
+            "comment": "asdf",
+            "skill": {
+                "fullpath": "Programming Language",
+                "fullname": "Programming Language",
+                "shortname": "language",
+                "id": 160
+            },
+            "level": "high"
+        }
+    ],
+    "webpages": [],
+    "joined": "2014-12-12 17:59:47+00:00",
+    "socialnetworks": [
+        {
+            "accounturl": "www.linkedin.com/in/heiths/",
+            "socialnetwork": "Linkedin"
+        },
+        {
+            "accounturl": "heiths",
+            "socialnetwork": "Google+"
+        }
+    ],
+    "telnumbers": [],
+    "sex": "Male",
+    "availability": [
+        {
+            "start_time": {
+                "h": 3,
+                "m": 30
+            },
+            "week_day": "Thursday",
+            "end_time": {
+                "h": 4,
+                "m": 45
+            }
+        }
+    ],
+    "projects": [
+        {
+            "url": "/p/allura/",
+            "last_updated": "2015-07-28 16:40:57.701000",
+            "name": "Apache Allura™",
+            "summary": "Forge software for hosting software projects"
+        }
+    ],
+    "skypeaccount": null
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/allura/blob/459af1ba/Allura/docs/api-rest/examples/webhook.json
----------------------------------------------------------------------
diff --git a/Allura/docs/api-rest/examples/webhook.json b/Allura/docs/api-rest/examples/webhook.json
new file mode 100755
index 0000000..68f4d9c
--- /dev/null
+++ b/Allura/docs/api-rest/examples/webhook.json
@@ -0,0 +1,7 @@
+{
+    "hook_url": "http://hs.dev:9999/push-it/",
+    "mod_date": "2015-07-24 16:44:03.871000",
+    "url": "http://localhost:8080/rest/p/finna/admin/finna/webhooks/repo-push/55ae876e4d21222df298086e",
+    "_id": "55ae876e4d21222df298086e",
+    "type": "repo-push"
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/allura/blob/459af1ba/Allura/docs/api-rest/examples/webhooks.json
----------------------------------------------------------------------
diff --git a/Allura/docs/api-rest/examples/webhooks.json b/Allura/docs/api-rest/examples/webhooks.json
new file mode 100755
index 0000000..7b30059
--- /dev/null
+++ b/Allura/docs/api-rest/examples/webhooks.json
@@ -0,0 +1,24 @@
+{
+    "webhooks": [
+        {
+            "url": "http://localhost:8080/rest/p/finna/admin/finna/webhooks/repo-push/55ae874a4d21222df2980868",
+            "mod_date": "2015-07-21 17:54:18.066000",
+            "_id": "55ae874a4d21222df2980868",
+            "type": "repo-push",
+            "hook_url": "http://hs.dev:9999/webhooks/"
+        },
+        {
+            "url": "http://localhost:8080/rest/p/finna/admin/finna/webhooks/repo-push/55ae876e4d21222df298086e",
+            "mod_date": "2015-07-21 17:54:54.836000",
+            "_id": "55ae876e4d21222df298086e",
+            "type": "repo-push",
+            "hook_url": "http://hs.dev:9999/push-it/"
+        }
+    ],
+    "limits": {
+        "repo-push": {
+            "max": 3,
+            "used": 2
+        }
+    }
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/allura/blob/459af1ba/Allura/docs/api-rest/examples/wiki.json
----------------------------------------------------------------------
diff --git a/Allura/docs/api-rest/examples/wiki.json b/Allura/docs/api-rest/examples/wiki.json
new file mode 100755
index 0000000..f5c81c4
--- /dev/null
+++ b/Allura/docs/api-rest/examples/wiki.json
@@ -0,0 +1,28 @@
+{
+  "pages": [
+    "ASF Release Guidelines",
+    "Allura Deployments",
+    "Allura Wiki",
+    "Apache Allura (incubating) Wiki",
+    "Apache Allura™ (incubating) Wiki",
+    "Asking Questions",
+    "Contributing Code",
+    "Contributing to the Discussion",
+    "Extensions",
+    "FAQ",
+    "Feature Comparison",
+    "Features",
+    "Goals",
+    "Google Summer of Code",
+    "HTTP(S) Repositories",
+    "Home",
+    "Install and Run Allura - Vagrant",
+    "Notes",
+    "Our Development Model",
+    "PyCon 2014 Sprint",
+    "Themes in Allura",
+    "Videos",
+    "Webhooks",
+    "Working with Contributors"
+  ]
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/allura/blob/459af1ba/Allura/docs/api-rest/resourceTypes.yaml
----------------------------------------------------------------------
diff --git a/Allura/docs/api-rest/resourceTypes.yaml b/Allura/docs/api-rest/resourceTypes.yaml
new file mode 100755
index 0000000..10dcb53
--- /dev/null
+++ b/Allura/docs/api-rest/resourceTypes.yaml
@@ -0,0 +1,150 @@
+- base:
+    get?:
+      responses: &standardResponses
+        200:
+          description: OK
+    put?:
+      responses: *standardResponses
+    patch?:
+      responses: *standardResponses
+    post?:
+        responses:
+          201:
+            description: Created
+    delete?:
+      responses: *standardResponses
+- baseTool:
+    get?:
+      responses:
+        200:
+          description: OK
+    post?:
+        responses:
+          201:
+            description: Created
+    delete?:
+      responses: *standardResponses
+- collection:
+    type: base
+    get:
+      is: [ pageable ]
+    post:
+- member:
+      type: base
+      get?:
+      post?:
+      put?:
+      patch?:
+      delete?:
+- tool:
+    type: member
+    get:
+      responses:
+        200:
+          body:
+            application/json:
+              schema: <<schema>>
+              example: <<example>>
+    post?:
+    put?:
+      body:
+        application/json:
+          schema: <<schema>>
+      responses:
+        200:
+          body:
+            application/json:
+              schema: <<schema>>
+    patch?:
+      body:
+        application/json:
+          schema: <<schema>>
+      responses:
+        200:
+          body:
+            application/json:
+              schema: <<schema>>
+    delete?:   
+- permissionCheck:
+    description: |
+      This is API to run permission checks. 
+      It is available on a neighborhood, project and tool level.
+      
+      This is only available to users that have 'admin' permission for corresponding neighborhood/project/tool. 
+      It requires user and perm parameters and will return JSON dict with result key, which contains boolean value, 
+      indicating if given user has perm permission to the neighborhood/project/tool.
+    get:
+      queryParameters:
+        user:
+          type: string
+          example: heiths
+          required: true
+          description: The username to check
+        perm:
+          displayName: Permission
+          required: true
+          type: string
+          example: create
+          default: read
+          enum: ["read", "admin", "create", "update"]
+      description: |
+        Get permissions for <<resourcePathName>>.
+      responses:
+        200:
+          body:
+            application/json:
+              schema: <<schemaItem>>
+- searchableCollection:
+    get:
+      queryParameters:
+        <<queryParamName>>:
+          description: Return <<resourcePathName>> that have their <<queryParamName>> matching the given value
+      responses:
+        200:
+          body:
+            application/json:
+              schema: <<schema>>
+              example: <<example>>
+- typedCollection:
+    type: collection
+    get:
+      responses:
+        200:
+          body:
+            application/json:
+              schema: <<schema>>
+              example: <<example>>
+    post:
+      body:
+        application/json:
+      responses:
+        201:
+          body:
+            application/json:
+              schema: <<schema>>
+- permission:
+    securedBy: [null, oauth_1_0]
+    description: |
+      Checks if a given user has permissions.
+    get:
+      is: [permissionTestable]
+- project:
+    type: member
+    get:
+      responses:
+        200:
+          body:
+            application/json:
+              schema: <<schema>>
+              example: <<example>>
+    put:
+      body:
+        application/json:
+          schema: <<schema>>
+      responses:
+        200:
+          body:
+            application/json:
+              schema: <<schema>>
+
+    
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/allura/blob/459af1ba/Allura/docs/api-rest/schemas/blog.json
----------------------------------------------------------------------
diff --git a/Allura/docs/api-rest/schemas/blog.json b/Allura/docs/api-rest/schemas/blog.json
new file mode 100755
index 0000000..bab80f6
--- /dev/null
+++ b/Allura/docs/api-rest/schemas/blog.json
@@ -0,0 +1,37 @@
+{
+    "$schema": "http://json-schema.org/draft-04/schema", 
+    "type": "object", 
+    "id": "#", 
+    "properties": {
+        "count": {
+            "type": "number", 
+            "id": "count"
+        }, 
+        "posts": {
+            "items": {
+                "type": "object", 
+                "id": "0", 
+                "properties": {
+                    "url": {
+                        "type": "string", 
+                        "id": "url"
+                    }, 
+                    "title": {
+                        "type": "string", 
+                        "id": "title"
+                    }
+                }
+            }, 
+            "type": "array", 
+            "id": "posts"
+        }, 
+        "limit": {
+            "type": "number", 
+            "id": "limit"
+        }, 
+        "page": {
+            "type": "number", 
+            "id": "page"
+        }
+    }
+}

http://git-wip-us.apache.org/repos/asf/allura/blob/459af1ba/Allura/docs/api-rest/schemas/blogPost.json
----------------------------------------------------------------------
diff --git a/Allura/docs/api-rest/schemas/blogPost.json b/Allura/docs/api-rest/schemas/blogPost.json
new file mode 100755
index 0000000..f504392
--- /dev/null
+++ b/Allura/docs/api-rest/schemas/blogPost.json
@@ -0,0 +1,75 @@
+{
+  "$schema": "http://json-schema.org/draft-04/schema#",
+  "id": "/",
+  "type": "object",
+  "properties": {
+    "related_artifacts": {
+      "id": "related_artifacts",
+      "type": "array",
+      "items": {}
+    },
+    "discussion_thread": {
+      "id": "discussion_thread",
+      "type": "object",
+      "properties": {
+        "_id": {
+          "id": "_id",
+          "type": "string"
+        },
+        "posts": {
+          "id": "posts",
+          "type": "array",
+          "items": {}
+        },
+        "discussion_id": {
+          "id": "discussion_id",
+          "type": "string"
+        },
+        "subject": {
+          "id": "subject",
+          "type": "string"
+        }
+      }
+    },
+    "author": {
+      "id": "author",
+      "type": "string"
+    },
+    "url": {
+      "id": "url",
+      "type": "string"
+    },
+    "text": {
+      "id": "text",
+      "type": "string"
+    },
+    "labels": {
+      "id": "labels",
+      "type": "array",
+      "items": {
+        "id": "0",
+        "type": "string"
+      }
+    },
+    "state": {
+      "id": "state",
+      "type": "string"
+    },
+    "mod_date": {
+      "id": "mod_date",
+      "type": "string"
+    },
+    "title": {
+      "id": "title",
+      "type": "string"
+    },
+    "_id": {
+      "id": "_id",
+      "type": "string"
+    },
+    "discussion_thread_url": {
+      "id": "discussion_thread_url",
+      "type": "string"
+    }
+  }
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/allura/blob/459af1ba/Allura/docs/api-rest/schemas/discussion.json
----------------------------------------------------------------------
diff --git a/Allura/docs/api-rest/schemas/discussion.json b/Allura/docs/api-rest/schemas/discussion.json
new file mode 100755
index 0000000..8f62a2f
--- /dev/null
+++ b/Allura/docs/api-rest/schemas/discussion.json
@@ -0,0 +1,103 @@
+{
+    "$schema": "http://json-schema.org/draft-04/schema", 
+    "type": "object", 
+    "id": "#", 
+    "properties": {
+        "count": {
+            "type": "number", 
+            "id": "count"
+        }, 
+        "forums": {
+            "items": {
+                "type": "object", 
+                "id": "0", 
+                "properties": {
+                    "num_topics": {
+                        "type": "number", 
+                        "id": "num_topics"
+                    }, 
+                    "url": {
+                        "type": "string", 
+                        "id": "url"
+                    }, 
+                    "name": {
+                        "type": "string", 
+                        "id": "name"
+                    }, 
+                    "shortname": {
+                        "type": "string", 
+                        "id": "shortname"
+                    }, 
+                    "_id": {
+                        "type": "string", 
+                        "id": "_id"
+                    }, 
+                    "last_post": {
+                        "type": "object", 
+                        "id": "last_post", 
+                        "properties": {
+                            "flagged_by": {
+                                "type": "array", 
+                                "id": "flagged_by"
+                            }, 
+                            "status": {
+                                "type": "string", 
+                                "id": "status"
+                            }, 
+                            "last_edited": {
+                                "type": "null", 
+                                "id": "last_edited"
+                            }, 
+                            "author": {
+                                "type": "string", 
+                                "id": "author"
+                            }, 
+                            "timestamp": {
+                                "type": "string", 
+                                "id": "timestamp"
+                            }, 
+                            "thread_id": {
+                                "type": "string", 
+                                "id": "thread_id"
+                            }, 
+                            "text": {
+                                "type": "string", 
+                                "id": "text"
+                            }, 
+                            "author_id": {
+                                "type": "string", 
+                                "id": "author_id"
+                            }, 
+                            "_id": {
+                                "type": "string", 
+                                "id": "_id"
+                            }, 
+                            "slug": {
+                                "type": "string", 
+                                "id": "slug"
+                            }, 
+                            "subject": {
+                                "type": "string", 
+                                "id": "subject"
+                            }
+                        }
+                    }, 
+                    "description": {
+                        "type": "string", 
+                        "id": "description"
+                    }
+                }
+            }, 
+            "type": "array", 
+            "id": "forums"
+        }, 
+        "limit": {
+            "type": "number", 
+            "id": "limit"
+        }, 
+        "page": {
+            "type": "number", 
+            "id": "page"
+        }
+    }
+}

http://git-wip-us.apache.org/repos/asf/allura/blob/459af1ba/Allura/docs/api-rest/schemas/hasPermission.json
----------------------------------------------------------------------
diff --git a/Allura/docs/api-rest/schemas/hasPermission.json b/Allura/docs/api-rest/schemas/hasPermission.json
new file mode 100755
index 0000000..c42a5be
--- /dev/null
+++ b/Allura/docs/api-rest/schemas/hasPermission.json
@@ -0,0 +1,12 @@
+{
+  "$schema": "http://json-schema.org/draft-04/schema#",
+  "type": "object",
+  "name": "/",
+  "properties": {
+    "result": {
+      "type": "boolean",
+      "description": "True if a user has the permission a given permission.",
+      "name": "result"
+    }
+  }
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/allura/blob/459af1ba/Allura/docs/api-rest/schemas/link.json
----------------------------------------------------------------------
diff --git a/Allura/docs/api-rest/schemas/link.json b/Allura/docs/api-rest/schemas/link.json
new file mode 100755
index 0000000..3089559
--- /dev/null
+++ b/Allura/docs/api-rest/schemas/link.json
@@ -0,0 +1,12 @@
+{
+  "$schema": "http://json-schema.org/draft-04/schema#",
+  "type": "object",
+  "properties": {
+    "url": {
+      "type": "string"
+    }
+  },
+  "required": [
+    "url"
+  ]
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/allura/blob/459af1ba/Allura/docs/api-rest/schemas/page.json
----------------------------------------------------------------------
diff --git a/Allura/docs/api-rest/schemas/page.json b/Allura/docs/api-rest/schemas/page.json
new file mode 100755
index 0000000..d961145
--- /dev/null
+++ b/Allura/docs/api-rest/schemas/page.json
@@ -0,0 +1,63 @@
+{
+  "$schema": "http://json-schema.org/draft-04/schema",
+  "type": "object",
+  "properties": {
+    "related_artifacts": {
+      "items": {
+        "type": ["null", "string"],
+      },
+      "type": ["null", "array"],
+      "id": "related_artifacts"
+    },
+    "attachments": {
+      "type": ["null", "array"],
+      "id": "attachments"
+    },
+    "title": {
+      "type": "string",
+      "id": "title"
+    },
+    "text": {
+      "type": ["null", "string"],
+      "id": "text"
+    },
+    "labels": {
+      "type": ["null", "array"],
+      "id": "labels"
+    },
+    "discussion_thread": {
+      "type": "object",
+      "id": "discussion_thread",
+      "properties": {
+        "_id": {
+          "type": "string",
+          "id": "_id"
+        },
+        "posts": {
+          "type": "array",
+          "id": "posts"
+        },
+        "discussion_id": {
+          "type": "string",
+          "id": "discussion_id"
+        },
+        "subject": {
+          "type": "string",
+          "id": "subject"
+        }
+      }
+    },
+    "mod_date": {
+      "type": "string",
+      "id": "mod_date"
+    },
+    "_id": {
+      "type": "string",
+      "id": "_id"
+    },
+    "discussion_thread_url": {
+      "type": "string",
+      "id": "discussion_thread_url"
+    }
+  }
+}

http://git-wip-us.apache.org/repos/asf/allura/blob/459af1ba/Allura/docs/api-rest/schemas/project.json
----------------------------------------------------------------------
diff --git a/Allura/docs/api-rest/schemas/project.json b/Allura/docs/api-rest/schemas/project.json
new file mode 100755
index 0000000..8635bba
--- /dev/null
+++ b/Allura/docs/api-rest/schemas/project.json
@@ -0,0 +1,179 @@
+{
+    "$schema": "http://json-schema.org/draft-04/schema",
+    "type": "object",
+    "id": "#",
+    "properties": {
+        "status": {
+            "type": "string",
+            "id": "status"
+        },
+        "_id": {
+            "type": "string",
+            "id": "_id"
+        },
+        "name": {
+            "type": "string",
+            "id": "name"
+        },
+        "preferred_support_tool": {
+            "type": ["string", "null"], 
+            "id": "preferred_support_tool"
+        },
+        "preferred_support_url": {
+            "type": ["string", "null"], 
+            "id": "preferred_support_url"
+        },
+        "icon_url": {
+            "type": ["string", "null"], 
+            "id": "icon_url"
+        },
+        "labels": {
+            "type": "array",
+            "id": "labels"
+        },
+        "private": {
+            "type": "boolean",
+            "id": "private"
+        },
+        "creation_date": {
+            "type": "string",
+            "id": "creation_date"
+        },
+        "url": {
+            "type": "string",
+            "id": "url"
+        },
+        "short_description": {
+            "type": ["string", "null"], 
+            "id": "short_description"
+        },
+        "summary": {
+            "type": ["string", "null"], 
+            "id": "summary"
+        },
+        "tools": {
+            "items": {
+                "type": "object",
+                "id": "0",
+                "properties": {
+                    "mount_point": {
+                        "type": "string",
+                        "id": "mount_point"
+                    },
+                    "name": {
+                        "type": "string",
+                        "id": "name"
+                    },
+                    "label": {
+                        "type": "string",
+                        "id": "label"
+                    }
+                }
+            },
+            "type": "array",
+            "id": "tools"
+        },
+        "video_url": {
+            "type": ["string", "null"], 
+            "id": "video_url"
+        },
+        "socialnetworks": {
+            "items": {
+                "type": "object",
+                "id": "0",
+                "properties": {
+                    "accounturl": {
+                        "type": ["string", "null"], 
+                        "id": "accounturl"
+                    },
+                    "socialnetwork": {
+                        "type": ["string", "null"], 
+                        "id": "socialnetwork"
+                    }
+                }
+            },
+            "type": "array",
+            "id": "socialnetworks"
+        },
+        "moved_to_url": {
+            "type": ["string", "null"], 
+            "id": "moved_to_url"
+        },
+        "shortname": {
+            "type": "string",
+            "id": "shortname"
+        },
+        "developers": {
+            "items": {
+                "type": "object",
+                "id": "0",
+                "properties": {
+                    "url": {
+                        "type": "string",
+                        "id": "url"
+                    },
+                    "username": {
+                        "type": "string",
+                        "id": "username"
+                    },
+                    "name": {
+                        "type": "string",
+                        "id": "name"
+                    }
+                }
+            },
+            "type": "array",
+            "id": "developers"
+        },
+        "screenshots": {
+            "type": "array",
+            "id": "screenshots"
+        },
+        "external_homepage": {
+            "type": ["string", "null"], 
+            "id": "external_homepage"
+        },
+        "categories": {
+            "type": "object",
+            "id": "categories",
+            "properties": {
+                "developmentstatus": {
+                    "type": "array",
+                    "id": "developmentstatus"
+                },
+                "environment": {
+                    "type": "array",
+                    "id": "environment"
+                },
+                "language": {
+                    "type": "array",
+                    "id": "language"
+                },
+                "license": {
+                    "type": "array",
+                    "id": "license"
+                },
+                "database": {
+                    "type": "array",
+                    "id": "database"
+                },
+                "topic": {
+                    "type": "array",
+                    "id": "topic"
+                },
+                "audience": {
+                    "type": "array",
+                    "id": "audience"
+                },
+                "translation": {
+                    "type": "array",
+                    "id": "translation"
+                },
+                "os": {
+                    "type": "array",
+                    "id": "os"
+                }
+            }
+        }
+    }
+}

http://git-wip-us.apache.org/repos/asf/allura/blob/459af1ba/Allura/docs/api-rest/schemas/searchedTickets.json
----------------------------------------------------------------------
diff --git a/Allura/docs/api-rest/schemas/searchedTickets.json b/Allura/docs/api-rest/schemas/searchedTickets.json
new file mode 100755
index 0000000..cf66f55
--- /dev/null
+++ b/Allura/docs/api-rest/schemas/searchedTickets.json
@@ -0,0 +1,210 @@
+{
+    "$schema": "http://json-schema.org/draft-04/schema", 
+    "required": [
+        "sort", 
+        "count", 
+        "filter_choices", 
+        "page", 
+        "q", 
+        "solr_error", 
+        "limit", 
+        "tickets", 
+        "filter"
+    ], 
+    "type": "object", 
+    "properties": {
+        "sort": {
+            "type": "null"
+        }, 
+        "count": {
+            "type": "number"
+        }, 
+        "filter_choices": {
+            "required": [
+                "status", 
+                "reported_by", 
+                "_milestone", 
+                "assigned_to"
+            ], 
+            "type": "object", 
+            "properties": {
+                "status": {
+                    "items": {
+                        "items": [
+                            {
+                                "type": "string"
+                            }, 
+                            {
+                                "type": "number"
+                            }
+                        ], 
+                        "type": "array"
+                    }, 
+                    "type": "array"
+                }, 
+                "reported_by": {
+                    "items": {
+                        "items": [
+                            {
+                                "type": "string"
+                            }, 
+                            {
+                                "type": "number"
+                            }
+                        ], 
+                        "type": "array"
+                    }, 
+                    "type": "array"
+                }, 
+                "_milestone": {
+                    "items": {
+                        "items": [
+                            {
+                                "type": "string"
+                            }, 
+                            {
+                                "type": "number"
+                            }
+                        ], 
+                        "type": "array"
+                    }, 
+                    "type": "array"
+                }, 
+                "assigned_to": {
+                    "items": {
+                        "items": [
+                            {
+                                "type": "string"
+                            }, 
+                            {
+                                "type": "number"
+                            }
+                        ], 
+                        "type": "array"
+                    }, 
+                    "type": "array"
+                }
+            }
+        }, 
+        "filter": {
+            "type": "object"
+        }, 
+        "q": {
+            "type": "string"
+        }, 
+        "solr_error": {
+            "type": "null"
+        }, 
+        "limit": {
+            "type": "number"
+        }, 
+        "tickets": {
+            "items": {
+                "required": [
+                    "status", 
+                    "labels", 
+                    "related_artifacts", 
+                    "attachments", 
+                    "reported_by", 
+                    "reported_by_id", 
+                    "discussion_disabled", 
+                    "private", 
+                    "summary", 
+                    "assigned_to_id", 
+                    "assigned_to", 
+                    "votes_down", 
+                    "votes_up", 
+                    "mod_date", 
+                    "_id", 
+                    "discussion_thread_url", 
+                    "ticket_num", 
+                    "custom_fields", 
+                    "created_date"
+                ], 
+                "type": "object", 
+                "properties": {
+                    "status": {
+                        "type": "string"
+                    }, 
+                    "labels": {
+                        "items": {
+                            "type": "string"
+                        }, 
+                        "type": "array"
+                    }, 
+                    "related_artifacts": {
+                        "type": "array"
+                    }, 
+                    "attachments": {
+                        "type": "array"
+                    }, 
+                    "reported_by": {
+                        "type": "string"
+                    }, 
+                    "reported_by_id": {
+                        "type": "string"
+                    }, 
+                    "discussion_disabled": {
+                        "type": "boolean"
+                    }, 
+                    "private": {
+                        "type": "boolean"
+                    }, 
+                    "summary": {
+                        "type": "string"
+                    }, 
+                    "assigned_to_id": {
+                        "type": ["string", "null"]
+                    }, 
+                    "assigned_to": {
+                        "type": ["string", "null"]
+                    }, 
+                    "votes_down": {
+                        "type": "number"
+                    }, 
+                    "votes_up": {
+                        "type": "number"
+                    }, 
+                    "mod_date": {
+                        "type": "string"
+                    }, 
+                    "_id": {
+                        "type": "string"
+                    }, 
+                    "discussion_thread_url": {
+                        "type": "string"
+                    }, 
+                    "ticket_num": {
+                        "type": "number"
+                    }, 
+                    "custom_fields": {
+                        "required": [
+                            "_component", 
+                            "_milestone", 
+                            "_reviewer"
+                        ], 
+                        "type": "object", 
+                        "properties": {
+                            "_component": {
+                                "type": "string"
+                            }, 
+                            "_milestone": {
+                                "type": "string"
+                            }, 
+                            "_reviewer": {
+                                "type": "string"
+                            }
+                        }
+                    }, 
+                    "created_date": {
+                        "type": "string"
+                    }
+                }
+            }, 
+            "type": "array"
+        }, 
+        "page": {
+            "type": "number"
+        }
+    }
+}

http://git-wip-us.apache.org/repos/asf/allura/blob/459af1ba/Allura/docs/api-rest/schemas/ticket.json
----------------------------------------------------------------------
diff --git a/Allura/docs/api-rest/schemas/ticket.json b/Allura/docs/api-rest/schemas/ticket.json
new file mode 100755
index 0000000..48aec8d
--- /dev/null
+++ b/Allura/docs/api-rest/schemas/ticket.json
@@ -0,0 +1,180 @@
+{
+    "$schema": "http://json-schema.org/draft04/schema#",
+    "id": "/",
+    "type": "object",
+    "properties": {
+        "ticket": {
+            "id": "ticket",
+            "type": "object",
+            "properties": {
+                "status": {
+                    "id": "status",
+                    "type": "string"
+                },
+                "reported_by_id": {
+                    "id": "reported_by_id",
+                    "type": "string"
+                },
+                "related_artifacts": {
+                    "id": "related_artifacts",
+                    "type": "array",
+                    "items": {},
+                    "additionalItems": false
+                },
+                "attachments": {
+                    "id": "attachments",
+                    "type": "array",
+                    "items": {},
+                    "additionalItems": false
+                },
+                "reported_by": {
+                    "id": "reported_by",
+                    "type": "string"
+                },
+                "assigned_to": {
+                    "id": "assigned_to",
+                    "type": "string"
+                },
+                "labels": {
+                    "id": "labels",
+                    "type": "array",
+                    "items": {
+                        "id": "1",
+                        "type": "string"
+                    },
+                    "additionalItems": false
+                },
+                "discussion_disabled": {
+                    "id": "discussion_disabled",
+                    "type": "boolean"
+                },
+                "assigned_to_id": {
+                    "id": "assigned_to_id",
+                    "type": "string"
+                },
+                "private": {
+                    "id": "private",
+                    "type": "boolean"
+                },
+                "summary": {
+                    "id": "summary",
+                    "type": "string"
+                },
+                "description": {
+                    "id": "description",
+                    "type": "string"
+                },
+                "discussion_thread": {
+                    "id": "discussion_thread",
+                    "type": "object",
+                    "properties": {
+                        "_id": {
+                            "id": "_id",
+                            "type": "string"
+                        },
+                        "posts": {
+                            "id": "posts",
+                            "type": "array",
+                            "items": {
+                                "id": "2",
+                                "type": "object",
+                                "properties": {
+                                    "text": {
+                                        "id": "text",
+                                        "type": "string"
+                                    },
+                                    "attachments": {
+                                        "id": "attachments",
+                                        "type": "array",
+                                        "items": {},
+                                        "additionalItems": false
+                                    },
+                                    "author": {
+                                        "id": "author",
+                                        "type": "string"
+                                    },
+                                    "timestamp": {
+                                        "id": "timestamp",
+                                        "type": "string"
+                                    },
+                                    "last_edited": {
+                                        "id": "last_edited",
+                                        "type": "null"
+                                    },
+                                    "slug": {
+                                        "id": "slug",
+                                        "type": "string"
+                                    },
+                                    "subject": {
+                                        "id": "subject",
+                                        "type": "string"
+                                    }
+                                },
+                                "additionalProperties": false
+                            },
+                            "additionalItems": false
+                        },
+                        "discussion_id": {
+                            "id": "discussion_id",
+                            "type": "string"
+                        },
+                        "subject": {
+                            "id": "subject",
+                            "type": "string"
+                        }
+                    },
+                    "additionalProperties": false
+                },
+                "mod_date": {
+                    "id": "mod_date",
+                    "type": "string"
+                },
+                "votes_down": {
+                    "id": "votes_down",
+                    "type": "integer"
+                },
+                "votes_up": {
+                    "id": "votes_up",
+                    "type": "integer"
+                },
+                "_id": {
+                    "id": "_id",
+                    "type": "string"
+                },
+                "discussion_thread_url": {
+                    "id": "discussion_thread_url",
+                    "type": "string"
+                },
+                "ticket_num": {
+                    "id": "ticket_num",
+                    "type": "integer"
+                },
+                "custom_fields": {
+                    "id": "custom_fields",
+                    "type": "object",
+                    "properties": {
+                        "_component": {
+                            "id": "_component",
+                            "type": "string"
+                        },
+                        "_milestone": {
+                            "id": "_milestone",
+                            "type": "string"
+                        },
+                        "_reviewer": {
+                            "id": "_reviewer",
+                            "type": "string"
+                        }
+                    },
+                    "additionalProperties": false
+                },
+                "created_date": {
+                    "id": "created_date",
+                    "type": "string"
+                }
+            },
+            "additionalProperties": false
+        }
+    },
+    "additionalProperties": false
+}
\ No newline at end of file


[05/13] allura git commit: [#6797] first round of some more changes

Posted by he...@apache.org.
[#6797] first round of some more changes

* specify which types are valid for each has_access endpoint
* add/update a few descriptions
* add a few missing get: sections
* remove _discuss endpoing which will be removed from code soon
* make user-profile stuff anchored to /u/ neighborhood
* remove old unused permission type


Project: http://git-wip-us.apache.org/repos/asf/allura/repo
Commit: http://git-wip-us.apache.org/repos/asf/allura/commit/ff97a973
Tree: http://git-wip-us.apache.org/repos/asf/allura/tree/ff97a973
Diff: http://git-wip-us.apache.org/repos/asf/allura/diff/ff97a973

Branch: refs/heads/hs/6797
Commit: ff97a973d52063513f9aa0a1ab88dea66b20a17c
Parents: 459af1b
Author: Dave Brondsema <da...@brondsema.net>
Authored: Mon Aug 10 16:16:22 2015 -0400
Committer: Heith Seewald <hs...@hsmb.local>
Committed: Fri Aug 14 09:35:28 2015 -0400

----------------------------------------------------------------------
 Allura/docs/api-rest/api.raml           | 289 ++++++++++++++++-----------
 Allura/docs/api-rest/resourceTypes.yaml |  32 +--
 Allura/docs/api-rest/traits.yaml        |  19 +-
 3 files changed, 179 insertions(+), 161 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/allura/blob/ff97a973/Allura/docs/api-rest/api.raml
----------------------------------------------------------------------
diff --git a/Allura/docs/api-rest/api.raml b/Allura/docs/api-rest/api.raml
index b22c117..749e321 100755
--- a/Allura/docs/api-rest/api.raml
+++ b/Allura/docs/api-rest/api.raml
@@ -17,51 +17,70 @@ baseUriParameters:
 
 /{neighborhood}:
     description: |
-      Neighborhoods are groups of logically related projects, which have the same default options. 
-      
+      Neighborhoods are groups of logically related projects, which have the same default options.
+
     uriParameters:
       neighborhood:
         example: p
         description: |
-          Allura has two default neighborhoods: **“Projects”** `/p` and **“Users”** `/u`. 
+          Allura has two default neighborhoods: **“Projects”** `/p` and **“Users”** `/u`.
           More information can be found [here](https://forge-allura.apache.org/docs/getting_started/using.html?highlight=neighborhood#what-are-neighborhoods)
-    
+
     /has_access:
       type: permission
+      get:
+        queryParameters:
+          perm:
+            displayName: Permission
+            required: true
+            type: string
+            example: create
+            default: read
+            enum: [read, admin, create, update, register]
+
 
     /{project}:
       description: |
         Get or modify existing projects.
       uriParameters:
         project:
-          description: "The Apache Allura Project."
+          description: The Project short name.
           example: "allura"
           pattern: ([a-zA-Z]+)
-    
-      type: { 
-          project: { 
+
+      type: {
+          project: {
           schema: !include schemas/project.json,
           example: !include examples/project.json
           }
         }
-            
+
       /has_access:
         type: permission
-        
+        get:
+          queryParameters:
+            perm:
+              displayName: Permission
+              required: true
+              type: string
+              example: create
+              default: read
+              enum: [read, admin, create, update]
+
         /{link}:
           description: |
             Represents the External Link tool.
-          type: { 
+          type: {
               tool: {
               example: !include examples/link.json,
               schema: !include schemas/link.json
               }
             }
-        
+
           get:
             description: |
               Returns the existing url.
-        
+
           post:
             description: |
               Updates the url. *authentication required*.
@@ -73,9 +92,9 @@ baseUriParameters:
                       The url you would like to update to.
                     type: string
                     example: http://google.com
-        
+
         /{blog}:
-          type: { 
+          type: {
               tool: {
               example: !include examples/blog.json,
               schema: !include schemas/blog.json
@@ -83,14 +102,14 @@ baseUriParameters:
             }
           description: |
             Represents the **Blog tool**
-        
+
           displayName: Blog
           uriParameters:
            blog:
              displayName: Blog Name
              type: string
              example: blog
-        
+
           get:
             description: |
               Returns a list of posts, including title and API url.
@@ -127,8 +146,9 @@ baseUriParameters:
                     enum: [draft, published]
                     type: string
                     example: published
-        
+
           /{year}/{month}/{title}:
+              description: Represents a blog post entry.
               type: {
                 tool: {
                 example: !include examples/blogPost.json,
@@ -149,7 +169,7 @@ baseUriParameters:
                  displayName: Title
                  type: string
                  example: project-insights
-        
+
               post:
                 description: |
                   Updates an existing blog post.
@@ -173,10 +193,19 @@ baseUriParameters:
                           Draft or published.
                         enum: [draft, published]
                         type: string
-        
+
           /has_access:
             type: permission
-        
+            get:
+              queryParameters:
+                perm:
+                  displayName: Permission
+                  required: true
+                  type: string
+                  example: post
+                  default: read
+                  enum: [admin, configure, moderate, post, unmoderated_post, read, write]
+
         /{forum}:
           description: |
             A list of forums
@@ -186,7 +215,7 @@ baseUriParameters:
               schema: !include schemas/page.json
               }
             }
-        
+
           displayName: forum
           uriParameters:
            forum:
@@ -195,19 +224,30 @@ baseUriParameters:
              example: general
              description: |
                Returns a list of forums, including name, description, num_posts, API URL, and last_post details
-        
+
                To view more than 100 threads, or 100 posts in a thread, use the pagination support of the API by adding ?page=1 etc. to the URL.
-        
+
           /forum:
             description: |
               returns a limited list of topics in the forum, with fields for subject, num_replies, API URL, and last_post
+            get:
             /{slug}:
               description: |
                 returns a limited list of posts in the thread, with fields for author, text, and timestamp. Nested posts (i.e. a reply to a post) can be determined by the slug structure. For example, "slug": "0a0b/9f00" is a reply to the post with "slug": "0a0b"
-        
+              get:
+
           /has_access:
             type: permission
-        
+            get:
+              queryParameters:
+                perm:
+                  displayName: Permission
+                  required: true
+                  type: string
+                  example: post
+                  default: read
+                  enum: [admin, configure, moderate, post, unmoderated_post, read]
+
         /{discussion}:
           description: |
             Represents the **Discussion Tool**.
@@ -215,17 +255,17 @@ baseUriParameters:
               tool: {
               schema: !include schemas/discussion.json,
               example: !include examples/discussion.json
-        
+
               }
             }
-        
+
           displayName: Discussion
           uriParameters:
            discussion:
              displayName: Discussion Name
              type: string
              example: "discussion"
-        
+
           /{forum}:
             type: {
                 tool: {
@@ -233,17 +273,17 @@ baseUriParameters:
                   schema: !include schemas/page.json
                 }
               }
-        
+
             displayName: forum
             uriParameters:
              forum:
                displayName: Forum Name
                type: string
                example: general
-        
+
           /has_access:
             type: permission
-        
+
         /{wiki}:
           description: |
             Represents the **Wiki Tool**.
@@ -253,15 +293,15 @@ baseUriParameters:
               schema: !include schemas/wiki.json
               }
             }
-        
+
           displayName: Wiki
           uriParameters:
            wiki:
              displayName: Wiki Name
              type: string
              example: wiki
-        
-        
+
+
           /{title}:
             type: {
                 tool: {
@@ -269,7 +309,7 @@ baseUriParameters:
                 schema: !include schemas/page.json
                 }
               }
-        
+
             displayName: Title
             uriParameters:
              title:
@@ -293,11 +333,20 @@ baseUriParameters:
                       description: |
                        Comma-separated list of page labels.
                       type: string
-        
-        
+
+
           /has_access:
             type: permission
-        
+            get:
+              queryParameters:
+                perm:
+                  displayName: Permission
+                  required: true
+                  type: string
+                  example: post
+                  default: read
+                  enum: [admin, configure, moderate, post, unmoderated_post, read, create, delete, edit]
+
         /{tracker}:
           description: |
             Represents the **Ticket Tracker Tool**.
@@ -308,70 +357,65 @@ baseUriParameters:
               }
             }
           is: [pageable]
-        
+
           displayName: Tracker Url
           uriParameters:
            tracker:
              displayName: Tracker Name
              type: string
              example: tickets
-        
+
           get:
             is: [pageable]
             description: |
               Get a list of tickets
-        
-          /_discuss:
-            description: |
-              returns summary information about the tool discussion, including the threads in the discussion (there is one thread per ticket)
+
+          /_discuss/thread/{threadId}:
+            uriParameters:
+             threadId:
+               displayName: Thread ID
+               type: string
+               example: f78b98a0
+
             get:
-        
-            /thread/{threadId}:
+              description: |
+                returns summary information about a thread, including the posts in a thread
+            /{slug}:
               uriParameters:
-               threadId:
-                 displayName: Thread ID
+               slug:
+                 displayName: Slug
                  type: string
-                 example: f78b98a0
-        
+                 example: 9133
               get:
                 description: |
-                  returns summary information about a thread, including the posts in a thread
-              /{slug}:
-                uriParameters:
-                 slug:
-                   displayName: Slug
-                   type: string
-                   example: 9133
-                get:
-                  description: |
-                    returns detailed information about a post
-                /reply:
-                  description: |
-                    create a threaded reply to the given post
-                  post:
-                    body:
-                      application/x-www-form-urlencoded:
-                        formParameters:
-                          text:
-                            description: the text of the reply
-                            example: |
-                              I *agree* with you.
-                            required: true
-                            type: string
-              /new:
+                  returns detailed information about a post
+              /reply:
                 description: |
-                  create a post in the given thread
+                  create a threaded reply to the given post
                 post:
                   body:
                     application/x-www-form-urlencoded:
                       formParameters:
                         text:
-                          description: The text of the new post
+                          description: the text of the reply
                           example: |
-                            This is a new post!
+                            I *agree* with you.
                           required: true
                           type: string
-        
+            /new:
+              description: |
+                create a post in the given thread
+              post:
+                body:
+                  application/x-www-form-urlencoded:
+                    formParameters:
+                      text:
+                        description: The text of the new post
+                        example: |
+                          This is a new post!
+                        required: true
+                        type: string
+
           /search:
             type: {
               searchableCollection: {
@@ -381,12 +425,13 @@ baseUriParameters:
               }
             }
             is: [ pageable]
-        
+
           /new:
             description: |
               Creates a new ticket.
             post:
               body:
+                # FIXME?
                 application/x-www-form-urlencoded:
                   formParameters:
                     access_token:
@@ -417,13 +462,13 @@ baseUriParameters:
                       description:  custom field value
                       type: string
                       required: false
-        
+
           /{ticketNumber}:
             type: {
               tool: {
               example: !include examples/ticket.json,
               schema: !include schemas/ticket.json
-        
+
               }
             }
             displayName: Ticket Number
@@ -432,14 +477,15 @@ baseUriParameters:
                 example: 1
                 description: |
                   Get a details of a ticket.
-        
+
             /save:
               description: |
                 updates an existing ticket
                 parameters are the same as /rest/p/project_name/mount_point/new
-        
+
               post:
                 body:
+                  # form?
                   application/x-www-form-urlencoded:
                     formParameters:
                       access_token:
@@ -470,22 +516,31 @@ baseUriParameters:
                         description:  custom field value
                         type: string
                         required: false
-        
+
           /has_access:
             type: permission
-        
-        
+            get:
+              queryParameters:
+                perm:
+                  displayName: Permission
+                  required: true
+                  type: string
+                  example: post
+                  default: read
+                  enum: [admin, configure, moderate, post, unmoderated_post, read, create, delete, update, save_searches]
+
+
         /admin:
           description: |
             Endpoints for **project exporting** and managing **webhooks**
-        
+
           /export:
             description: |
               Generates a full bulk export of your tool(s) in the same format as the API for individual access. Authentication required. Here is an [example shell](https://forge-allura.apache.org/p/allura/git/ci/master/tree/scripts/project_export) script using these APIs, suitable to run as a cron job.
             post:
               description: |
                 Submits an export job
-        
+
                 **400 Bad Request:** tools parameter not provided or is invalid
                 **503 Service Unavailable:** an export job is already running
                 **200 OK:** job submitted. Body will be: *{"status": "in progress", "filename": FILENAME}*
@@ -495,7 +550,7 @@ baseUriParameters:
             get:
               description: |
                 Returns status: busy or ready
-        
+
           /{project}/webhooks:
               type: {
                 typedCollection: {
@@ -506,10 +561,10 @@ baseUriParameters:
               is: [secured]
               description: |
                 This is to manage webhooks programatically. See the [Webhook docs](https://forge-allura.apache.org/p/allura/wiki/Webhooks/) for more information.
-        
+
                 The webhook payloads and signature verification method are documented at https://forge-allura.apache.org/p/allura/wiki/Webhooks/
-        
-        
+
+
               /{type}:
                 uriParameters:
                   type:
@@ -534,7 +589,7 @@ baseUriParameters:
                       type: string
                       description: |
                         Unique identifier for a webhook.
-        
+
                   get:
                     description: |
                       View a webhook
@@ -552,7 +607,7 @@ baseUriParameters:
                           secret:
                             description: |
                               Optionally supply your own secret.
-        
+
                               Note: DO NOT ever expose your secret!
                             required: false
                             type: string
@@ -562,7 +617,7 @@ baseUriParameters:
           /install_tool:
             description: |
               Adds a new tool to the project. *Authentication Required*.
-        
+
               returns dict with two fields:
               success: False if error is occurred, otherwise True
               info: success or error message
@@ -594,24 +649,24 @@ baseUriParameters:
                       required: false
                       description: |
                         "first", "last", or "alpha_tool" for position with respect to existing tools (or existing tools of the same type for "alpha_tool")
-        
-        /{username}:
-            description: |
-              Represents a user (returns a project-like response).
-              
-              Most often you'll use the /profile suffix to return user data.
-            type: {
-              tool:{
-                example: !include examples/user.json,
-                schema: !include schemas/user.json
-              }
-            }
-            /profile:
-              description: |
-                A user profile
-              type: {
-                tool:{
-                example: !include examples/userProfile.json,
-                schema: !include schemas/userProfile.json
-                }
-              }
\ No newline at end of file
+
+/u/{username}:
+    description: |
+      Represents a user (returns a project-like response).
+
+      Most often you'll use the /profile suffix to return user data.
+    type: {
+      tool:{
+        example: !include examples/user.json,
+        schema: !include schemas/user.json
+      }
+    }
+    /profile:
+      description: |
+        A user profile
+      type: {
+        tool:{
+        example: !include examples/userProfile.json,
+        schema: !include schemas/userProfile.json
+        }
+      }
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/allura/blob/ff97a973/Allura/docs/api-rest/resourceTypes.yaml
----------------------------------------------------------------------
diff --git a/Allura/docs/api-rest/resourceTypes.yaml b/Allura/docs/api-rest/resourceTypes.yaml
index 10dcb53..1f7b9f8 100755
--- a/Allura/docs/api-rest/resourceTypes.yaml
+++ b/Allura/docs/api-rest/resourceTypes.yaml
@@ -64,36 +64,7 @@
           body:
             application/json:
               schema: <<schema>>
-    delete?:   
-- permissionCheck:
-    description: |
-      This is API to run permission checks. 
-      It is available on a neighborhood, project and tool level.
-      
-      This is only available to users that have 'admin' permission for corresponding neighborhood/project/tool. 
-      It requires user and perm parameters and will return JSON dict with result key, which contains boolean value, 
-      indicating if given user has perm permission to the neighborhood/project/tool.
-    get:
-      queryParameters:
-        user:
-          type: string
-          example: heiths
-          required: true
-          description: The username to check
-        perm:
-          displayName: Permission
-          required: true
-          type: string
-          example: create
-          default: read
-          enum: ["read", "admin", "create", "update"]
-      description: |
-        Get permissions for <<resourcePathName>>.
-      responses:
-        200:
-          body:
-            application/json:
-              schema: <<schemaItem>>
+    delete?:
 - searchableCollection:
     get:
       queryParameters:
@@ -147,4 +118,3 @@
             application/json:
               schema: <<schema>>
 
-    
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/allura/blob/ff97a973/Allura/docs/api-rest/traits.yaml
----------------------------------------------------------------------
diff --git a/Allura/docs/api-rest/traits.yaml b/Allura/docs/api-rest/traits.yaml
index d483810..c1f47c5 100755
--- a/Allura/docs/api-rest/traits.yaml
+++ b/Allura/docs/api-rest/traits.yaml
@@ -50,15 +50,15 @@
 - permissionTestable:
     description: |
       **Endpoints**
-      Permissions can be checked at three levels: 
+      Permissions can be checked at three levels:
       1. **Neighborhood:** `/rest/p/has_access`
       2. **Project:** `/rest/p/project_name/has_access`
       3. **Tool:** `/rest/p/project_name/mount_point/has_access`
-      
-      --- 
-      
+
+      ---
+
       It is only available to users that have 'admin' permission for corresponding neighborhood/project/tool. It requires user and perm parameters and will return JSON dict with result key, which contains boolean value, indicating if given user has perm permission to the neighborhood/project/tool.
-      
+
       E.g.:
       **GET** `/rest/p/test/wiki/has_access?user=admin1&perm=create`
       *returns* { result: true }
@@ -70,11 +70,4 @@
         type: string
         example: heiths
         required: true
-        description: The username to check
-      perm:
-        displayName: Permission
-        required: true
-        type: string
-        example: create
-        default: read
-        enum: ["read", "admin", "create", "update"]
\ No newline at end of file
+        description: The username to check
\ No newline at end of file


[08/13] allura git commit: [#6797] fix indentation, so not all nested under has_access

Posted by he...@apache.org.
[#6797] fix indentation, so not all nested under has_access


Project: http://git-wip-us.apache.org/repos/asf/allura/repo
Commit: http://git-wip-us.apache.org/repos/asf/allura/commit/7af8677e
Tree: http://git-wip-us.apache.org/repos/asf/allura/tree/7af8677e
Diff: http://git-wip-us.apache.org/repos/asf/allura/diff/7af8677e

Branch: refs/heads/hs/6797
Commit: 7af8677e7907cd071f8b26e507d253bdb5bc2ca1
Parents: d899d68
Author: Dave Brondsema <da...@brondsema.net>
Authored: Mon Aug 10 17:42:05 2015 -0400
Committer: Heith Seewald <hs...@hsmb.local>
Committed: Fri Aug 14 09:35:28 2015 -0400

----------------------------------------------------------------------
 Allura/docs/api-rest/api.raml | 906 ++++++++++++++++++-------------------
 1 file changed, 453 insertions(+), 453 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/allura/blob/7af8677e/Allura/docs/api-rest/api.raml
----------------------------------------------------------------------
diff --git a/Allura/docs/api-rest/api.raml b/Allura/docs/api-rest/api.raml
index 6f040e7..b123871 100755
--- a/Allura/docs/api-rest/api.raml
+++ b/Allura/docs/api-rest/api.raml
@@ -69,152 +69,210 @@ baseUriParameters:
               default: read
               enum: [read, admin, create, update]
 
-        /{link}:
+      /{link}:
+        description: |
+          Represents the External Link tool.
+        type: {
+            tool: {
+            example: !include examples/link.json,
+            schema: !include schemas/link.json
+            }
+          }
+
+        get:
           description: |
-            Represents the External Link tool.
-          type: {
-              tool: {
-              example: !include examples/link.json,
-              schema: !include schemas/link.json
-              }
+            Returns the existing url.
+
+        post:
+          description: |
+            Updates the url. *authentication required*.
+          body:
+            application/x-www-form-urlencoded:
+              formParameters:
+                url:
+                  description: |
+                    The url you would like to update to.
+                  type: string
+                  example: http://google.com
+
+      /{blog}:
+        type: {
+            tool: {
+            example: !include examples/blog.json,
+            schema: !include schemas/blog.json
             }
+          }
+        description: |
+          Represents the **Blog tool**
 
-          get:
-            description: |
-              Returns the existing url.
+        displayName: Blog
+        uriParameters:
+         blog:
+           displayName: Blog Name
+           type: string
+           example: blog
 
-          post:
-            description: |
-              Updates the url. *authentication required*.
-            body:
-              application/x-www-form-urlencoded:
-                formParameters:
-                  url:
-                    description: |
-                      The url you would like to update to.
-                    type: string
-                    example: http://google.com
+        get:
+          description: |
+            Returns a list of posts, including title and API url.
+          responses:
+            200:
+              body:
+                application/json:
+                  schema: !include schemas/blog.json
+                  example: !include examples/blog.json
+        post:
+          description: |
+            Creates a new blog post.
+          body:
+            application/x-www-form-urlencoded:
+              formParameters:
+                title:
+                  description: |
+                    The title of the post.
+                  type: string
+                  example: New API docs released!
+                text:
+                  description: |
+                    The text of the post.
+                  type: string
+                  example: Lots of text here describing apis!\nThat is all.
+                labels:
+                  description: |
+                    Labels of the post -- comma seperated strings
+                  type: string
+                  example: api,development
+                state:
+                  description: |
+                    Draft or published.
+                  enum: [draft, published]
+                  type: string
+                  example: published
 
-        /{blog}:
-          type: {
+        /{year}/{month}/{title}:
+            description: Represents a blog post entry.
+            type: {
               tool: {
-              example: !include examples/blog.json,
-              schema: !include schemas/blog.json
+              example: !include examples/blogPost.json,
+              schema: !include schemas/blogPost.json
               }
             }
-          description: |
-            Represents the **Blog tool**
+            displayName: Blog Post
+            uriParameters:
+             year:
+               displayName: Year
+               type: number
+               example: 2015
+             month:
+               displayName: Month
+               type: number
+               example: 04
+             title:
+               displayName: Title
+               type: string
+               example: project-insights
 
-          displayName: Blog
-          uriParameters:
-           blog:
-             displayName: Blog Name
-             type: string
-             example: blog
+            post:
+              description: |
+                Updates an existing blog post.
+              body:
+                application/x-www-form-urlencoded:
+                  formParameters:
+                    title:
+                      description: |
+                        The title of the post.
+                      type: string
+                    text:
+                      description: |
+                        The text of the post.
+                      type: string
+                    labels:
+                      description: |
+                        Labels of the post -- comma seperated strings
+                      type: string
+                    state:
+                      description: |
+                        Draft or published.
+                      enum: [draft, published]
+                      type: string
 
+        /has_access:
+          type: permission
           get:
-            description: |
-              Returns a list of posts, including title and API url.
-            responses:
-              200:
-                body:
-                  application/json:
-                    schema: !include schemas/blog.json
-                    example: !include examples/blog.json
-          post:
-            description: |
-              Creates a new blog post.
-            body:
-              application/x-www-form-urlencoded:
-                formParameters:
-                  title:
-                    description: |
-                      The title of the post.
-                    type: string
-                    example: New API docs released!
-                  text:
-                    description: |
-                      The text of the post.
-                    type: string
-                    example: Lots of text here describing apis!\nThat is all.
-                  labels:
-                    description: |
-                      Labels of the post -- comma seperated strings
-                    type: string
-                    example: api,development
-                  state:
-                    description: |
-                      Draft or published.
-                    enum: [draft, published]
-                    type: string
-                    example: published
-
-          /{year}/{month}/{title}:
-              description: Represents a blog post entry.
-              type: {
-                tool: {
-                example: !include examples/blogPost.json,
-                schema: !include schemas/blogPost.json
-                }
-              }
-              displayName: Blog Post
-              uriParameters:
-               year:
-                 displayName: Year
-                 type: number
-                 example: 2015
-               month:
-                 displayName: Month
-                 type: number
-                 example: 04
-               title:
-                 displayName: Title
-                 type: string
-                 example: project-insights
+            queryParameters:
+              perm:
+                displayName: Permission
+                required: true
+                type: string
+                example: post
+                default: read
+                enum: [admin, configure, moderate, post, unmoderated_post, read, write]
+
+      /{forum}:
+        description: |
+          A list of forums
+        type: {
+            tool: {
+            example: !include examples/page.json,
+            schema: !include schemas/page.json
+            }
+          }
 
-              post:
-                description: |
-                  Updates an existing blog post.
-                body:
-                  application/x-www-form-urlencoded:
-                    formParameters:
-                      title:
-                        description: |
-                          The title of the post.
-                        type: string
-                      text:
-                        description: |
-                          The text of the post.
-                        type: string
-                      labels:
-                        description: |
-                          Labels of the post -- comma seperated strings
-                        type: string
-                      state:
-                        description: |
-                          Draft or published.
-                        enum: [draft, published]
-                        type: string
+        displayName: forum
+        uriParameters:
+         forum:
+           displayName: Forum Name
+           type: string
+           example: general
+           description: |
+             Returns a list of forums, including name, description, num_posts, API URL, and last_post details
+
+             To view more than 100 threads, or 100 posts in a thread, use the pagination support of the API by adding ?page=1 etc. to the URL.
 
-          /has_access:
-            type: permission
+        /forum:
+          description: |
+            returns a limited list of topics in the forum, with fields for subject, num_replies, API URL, and last_post
+          get:
+          /{slug}:
+            description: |
+              returns a limited list of posts in the thread, with fields for author, text, and timestamp. Nested posts (i.e. a reply to a post) can be determined by the slug structure. For example, "slug": "0a0b/9f00" is a reply to the post with "slug": "0a0b"
             get:
-              queryParameters:
-                perm:
-                  displayName: Permission
-                  required: true
-                  type: string
-                  example: post
-                  default: read
-                  enum: [admin, configure, moderate, post, unmoderated_post, read, write]
+
+        /has_access:
+          type: permission
+          get:
+            queryParameters:
+              perm:
+                displayName: Permission
+                required: true
+                type: string
+                example: post
+                default: read
+                enum: [admin, configure, moderate, post, unmoderated_post, read]
+
+      /{discussion}:
+        description: |
+          Represents the **Discussion Tool**.
+        type: {
+            tool: {
+            schema: !include schemas/discussion.json,
+            example: !include examples/discussion.json
+
+            }
+          }
+
+        displayName: Discussion
+        uriParameters:
+         discussion:
+           displayName: Discussion Name
+           type: string
+           example: "discussion"
 
         /{forum}:
-          description: |
-            A list of forums
           type: {
               tool: {
-              example: !include examples/page.json,
-              schema: !include schemas/page.json
+                example: !include examples/page.json,
+                schema: !include schemas/page.json
               }
             }
 
@@ -224,216 +282,212 @@ baseUriParameters:
              displayName: Forum Name
              type: string
              example: general
-             description: |
-               Returns a list of forums, including name, description, num_posts, API URL, and last_post details
-
-               To view more than 100 threads, or 100 posts in a thread, use the pagination support of the API by adding ?page=1 etc. to the URL.
-
-          /forum:
-            description: |
-              returns a limited list of topics in the forum, with fields for subject, num_replies, API URL, and last_post
-            get:
-            /{slug}:
-              description: |
-                returns a limited list of posts in the thread, with fields for author, text, and timestamp. Nested posts (i.e. a reply to a post) can be determined by the slug structure. For example, "slug": "0a0b/9f00" is a reply to the post with "slug": "0a0b"
-              get:
-
-          /has_access:
-            type: permission
-            get:
-              queryParameters:
-                perm:
-                  displayName: Permission
-                  required: true
-                  type: string
-                  example: post
-                  default: read
-                  enum: [admin, configure, moderate, post, unmoderated_post, read]
 
-        /{discussion}:
-          description: |
-            Represents the **Discussion Tool**.
-          type: {
-              tool: {
-              schema: !include schemas/discussion.json,
-              example: !include examples/discussion.json
+        /has_access:
+          type: permission
 
-              }
+      /{wiki}:
+        description: |
+          Represents the **Wiki Tool**.
+        type: {
+            tool: {
+            example: !include examples/wiki.json,
+            schema: !include schemas/wiki.json
             }
+          }
 
-          displayName: Discussion
-          uriParameters:
-           discussion:
-             displayName: Discussion Name
-             type: string
-             example: "discussion"
-
-          /{forum}:
-            type: {
-                tool: {
-                  example: !include examples/page.json,
-                  schema: !include schemas/page.json
-                }
-              }
-
-            displayName: forum
-            uriParameters:
-             forum:
-               displayName: Forum Name
-               type: string
-               example: general
+        displayName: Wiki
+        uriParameters:
+         wiki:
+           displayName: Wiki Name
+           type: string
+           example: wiki
 
-          /has_access:
-            type: permission
 
-        /{wiki}:
-          description: |
-            Represents the **Wiki Tool**.
+        /{title}:
           type: {
               tool: {
-              example: !include examples/wiki.json,
-              schema: !include schemas/wiki.json
+              example: !include examples/page.json,
+              schema: !include schemas/page.json
               }
             }
 
-          displayName: Wiki
+          displayName: Title
           uriParameters:
-           wiki:
-             displayName: Wiki Name
+           title:
+             displayName: Wiki Title
              type: string
-             example: wiki
-
+             example: Extensions
+          get:
+            description: |
+              returns a JSON representation of a page
+          post:
+            description: |
+              Creates or updates the titled page.
+            body:
+              application/x-www-form-urlencoded:
+                formParameters:
+                  text:
+                    description: |
+                      Page text.
+                    type: string
+                  labels:
+                    description: |
+                     Comma-separated list of page labels.
+                    type: string
 
-          /{title}:
-            type: {
-                tool: {
-                example: !include examples/page.json,
-                schema: !include schemas/page.json
-                }
-              }
 
-            displayName: Title
-            uriParameters:
-             title:
-               displayName: Wiki Title
-               type: string
-               example: Extensions
-            get:
-              description: |
-                returns a JSON representation of a page
-            post:
-              description: |
-                Creates or updates the titled page.
-              body:
-                application/x-www-form-urlencoded:
-                  formParameters:
-                    text:
-                      description: |
-                        Page text.
-                      type: string
-                    labels:
-                      description: |
-                       Comma-separated list of page labels.
-                      type: string
+        /has_access:
+          type: permission
+          get:
+            queryParameters:
+              perm:
+                displayName: Permission
+                required: true
+                type: string
+                example: post
+                default: read
+                enum: [admin, configure, moderate, post, unmoderated_post, read, create, delete, edit]
+
+      /{tracker}:
+        description: |
+          Represents the **Ticket Tracker Tool**.
+        type: {
+            tool: {
+            example: !include examples/tickets.json,
+            schema: !include schemas/ticket.json
+            }
+          }
+        is: [pageable]
 
+        displayName: Tracker Url
+        uriParameters:
+         tracker:
+           displayName: Tracker Name
+           type: string
+           example: tickets
 
-          /has_access:
-            type: permission
-            get:
-              queryParameters:
-                perm:
-                  displayName: Permission
-                  required: true
-                  type: string
-                  example: post
-                  default: read
-                  enum: [admin, configure, moderate, post, unmoderated_post, read, create, delete, edit]
-
-        /{tracker}:
-          description: |
-            Represents the **Ticket Tracker Tool**.
-          type: {
-              tool: {
-              example: !include examples/tickets.json,
-              schema: !include schemas/ticket.json
-              }
-            }
+        get:
           is: [pageable]
+          description: |
+            Get a list of tickets
 
-          displayName: Tracker Url
+        /_discuss/thread/{threadId}:
           uriParameters:
-           tracker:
-             displayName: Tracker Name
+           threadId:
+             displayName: Thread ID
              type: string
-             example: tickets
+             example: f78b98a0
 
           get:
-            is: [pageable]
             description: |
-              Get a list of tickets
-
-          /_discuss/thread/{threadId}:
+              returns summary information about a thread, including the posts in a thread
+          /{slug}:
             uriParameters:
-             threadId:
-               displayName: Thread ID
+             slug:
+               displayName: Slug
                type: string
-               example: f78b98a0
-
+               example: 9133
             get:
               description: |
-                returns summary information about a thread, including the posts in a thread
-            /{slug}:
-              uriParameters:
-               slug:
-                 displayName: Slug
-                 type: string
-                 example: 9133
-              get:
-                description: |
-                  returns detailed information about a post
-              /reply:
-                description: |
-                  create a threaded reply to the given post
-                post:
-                  body:
-                    application/x-www-form-urlencoded:
-                      formParameters:
-                        text:
-                          description: the text of the reply
-                          example: |
-                            I *agree* with you.
-                          required: true
-                          type: string
-            /new:
+                returns detailed information about a post
+            /reply:
               description: |
-                create a post in the given thread
+                create a threaded reply to the given post
               post:
                 body:
                   application/x-www-form-urlencoded:
                     formParameters:
                       text:
-                        description: The text of the new post
+                        description: the text of the reply
                         example: |
-                          This is a new post!
+                          I *agree* with you.
                         required: true
                         type: string
+          /new:
+            description: |
+              create a post in the given thread
+            post:
+              body:
+                application/x-www-form-urlencoded:
+                  formParameters:
+                    text:
+                      description: The text of the new post
+                      example: |
+                        This is a new post!
+                      required: true
+                      type: string
 
-          /search:
-            type: {
-              searchableCollection: {
-              queryParamName: q,
-              schema: !include schemas/searchedTickets.json,
-              example: !include examples/searchedTickets.json
-              }
+        /search:
+          type: {
+            searchableCollection: {
+            queryParamName: q,
+            schema: !include schemas/searchedTickets.json,
+            example: !include examples/searchedTickets.json
             }
-            is: [ pageable]
+          }
+          is: [ pageable]
 
-          /new:
+        /new:
+          description: |
+            Creates a new ticket.
+          post:
+            body:
+              # FIXME?
+              application/x-www-form-urlencoded:
+                formParameters:
+                  access_token:
+                    description: "The access token provided by the authentication application"
+                    required: true
+                    type: string
+                  ticket_form.summary:
+                    description: Ticket title
+                    type: string
+                    required: false
+                  ticket_form.description:
+                    description: ticket description
+                    type: string
+                    required: false
+                  ticket_form.assigned_to::
+                    type: string
+                    required: false
+                    description: username of ticket assignee
+                  ticket_form.labels:
+                    type: string
+                    required: false
+                    description:  comma-separated list of ticket labels
+                  ticket_form.attachment:
+                    type: file
+                    description:  (optional) attachment
+                    required: false
+                  ticket_form.custom field name:
+                    description:  custom field value
+                    type: string
+                    required: false
+
+        /{ticketNumber}:
+          type: {
+            tool: {
+            example: !include examples/ticket.json,
+            schema: !include schemas/ticket.json
+
+            }
+          }
+          displayName: Ticket Number
+          uriParameters:
+            ticketNumber:
+              example: 1
+              description: |
+                Get a details of a ticket.
+
+          /save:
             description: |
-              Creates a new ticket.
+              updates an existing ticket
+              parameters are the same as /rest/p/project_name/mount_point/new
+
             post:
               body:
-                # FIXME?
+                # form?
                 application/x-www-form-urlencoded:
                   formParameters:
                     access_token:
@@ -465,117 +519,84 @@ baseUriParameters:
                       type: string
                       required: false
 
-          /{ticketNumber}:
-            type: {
-              tool: {
-              example: !include examples/ticket.json,
-              schema: !include schemas/ticket.json
-
-              }
-            }
-            displayName: Ticket Number
-            uriParameters:
-              ticketNumber:
-                example: 1
-                description: |
-                  Get a details of a ticket.
-
-            /save:
-              description: |
-                updates an existing ticket
-                parameters are the same as /rest/p/project_name/mount_point/new
-
-              post:
-                body:
-                  # form?
-                  application/x-www-form-urlencoded:
-                    formParameters:
-                      access_token:
-                        description: "The access token provided by the authentication application"
-                        required: true
-                        type: string
-                      ticket_form.summary:
-                        description: Ticket title
-                        type: string
-                        required: false
-                      ticket_form.description:
-                        description: ticket description
-                        type: string
-                        required: false
-                      ticket_form.assigned_to::
-                        type: string
-                        required: false
-                        description: username of ticket assignee
-                      ticket_form.labels:
-                        type: string
-                        required: false
-                        description:  comma-separated list of ticket labels
-                      ticket_form.attachment:
-                        type: file
-                        description:  (optional) attachment
-                        required: false
-                      ticket_form.custom field name:
-                        description:  custom field value
-                        type: string
-                        required: false
+        /has_access:
+          type: permission
+          get:
+            queryParameters:
+              perm:
+                displayName: Permission
+                required: true
+                type: string
+                example: post
+                default: read
+                enum: [admin, configure, moderate, post, unmoderated_post, read, create, delete, update, save_searches]
 
-          /has_access:
-            type: permission
-            get:
-              queryParameters:
-                perm:
-                  displayName: Permission
-                  required: true
-                  type: string
-                  example: post
-                  default: read
-                  enum: [admin, configure, moderate, post, unmoderated_post, read, create, delete, update, save_searches]
 
+      /admin:
+        description: |
+          Endpoints for **project exporting** and managing **webhooks**
 
-        /admin:
+        /export:
           description: |
-            Endpoints for **project exporting** and managing **webhooks**
-
-          /export:
+            Generates a full bulk export of your tool(s) in the same format as the API for individual access. Authentication required. Here is an [example shell](https://forge-allura.apache.org/p/allura/git/ci/master/tree/scripts/project_export) script using these APIs, suitable to run as a cron job.
+          post:
             description: |
-              Generates a full bulk export of your tool(s) in the same format as the API for individual access. Authentication required. Here is an [example shell](https://forge-allura.apache.org/p/allura/git/ci/master/tree/scripts/project_export) script using these APIs, suitable to run as a cron job.
-            post:
-              description: |
-                Submits an export job
+              Submits an export job
 
-                **400 Bad Request:** tools parameter not provided or is invalid
-                **503 Service Unavailable:** an export job is already running
-                **200 OK:** job submitted. Body will be: *{"status": "in progress", "filename": FILENAME}*
-          /export_status:
+              **400 Bad Request:** tools parameter not provided or is invalid
+              **503 Service Unavailable:** an export job is already running
+              **200 OK:** job submitted. Body will be: *{"status": "in progress", "filename": FILENAME}*
+        /export_status:
+          description: |
+            Check status of a bulk export job
+          get:
             description: |
-              Check status of a bulk export job
-            get:
-              description: |
-                Returns status: busy or ready
-
-          /{project}/webhooks:
-              type: {
-                typedCollection: {
-                example: !include examples/webhooks.json,
-                schema: !include schemas/webhook.json
-                }
+              Returns status: busy or ready
+
+        /{project}/webhooks:
+            type: {
+              typedCollection: {
+              example: !include examples/webhooks.json,
+              schema: !include schemas/webhook.json
               }
-              description: |
-                This is to manage webhooks programatically. See the [Webhook docs](https://forge-allura.apache.org/p/allura/wiki/Webhooks/) for more information.
+            }
+            description: |
+              This is to manage webhooks programatically. See the [Webhook docs](https://forge-allura.apache.org/p/allura/wiki/Webhooks/) for more information.
 
-                The webhook payloads and signature verification method are documented at https://forge-allura.apache.org/p/allura/wiki/Webhooks/
+              The webhook payloads and signature verification method are documented at https://forge-allura.apache.org/p/allura/wiki/Webhooks/
 
 
-              /{type}:
+            /{type}:
+              uriParameters:
+                type:
+                  example: repo-push
+                  enum: [repo-push]
+                  description: |
+                    Allura supports one type of webhook for the moment - repo-push, triggered when a repository receives new commits. It is supported for Git, Mercurial and SVN repositories.
+              post:
+                description: |
+                  Create a new webhook.
+                body:
+                  application/x-www-form-urlencoded:
+                    formParameters:
+                      url:
+                        description: |
+                          The url to call when the the webhook is triggered.
+                        required: true
+                        type: string
+              /{id}:
                 uriParameters:
-                  type:
-                    example: repo-push
-                    enum: [repo-push]
+                  id:
+                    type: string
                     description: |
-                      Allura supports one type of webhook for the moment - repo-push, triggered when a repository receives new commits. It is supported for Git, Mercurial and SVN repositories.
+                      Unique identifier for a webhook.
+
+                get:
+                  description: |
+                    View a webhook
                 post:
                   description: |
-                    Create a new webhook.
+                    Update an existing webhook
                   body:
                     application/x-www-form-urlencoded:
                       formParameters:
@@ -584,72 +605,51 @@ baseUriParameters:
                             The url to call when the the webhook is triggered.
                           required: true
                           type: string
-                /{id}:
-                  uriParameters:
-                    id:
-                      type: string
-                      description: |
-                        Unique identifier for a webhook.
+                        secret:
+                          description: |
+                            Optionally supply your own secret.
 
-                  get:
+                            Note: DO NOT ever expose your secret!
+                          required: false
+                          type: string
+                delete:
+                  description: |
+                    Delete an existing webhook
+        /install_tool:
+          description: |
+            Adds a new tool to the project. *Authentication Required*.
+
+            returns dict with two fields:
+            success: False if error is occurred, otherwise True
+            info: success or error message
+          post:
+            body:
+              application/x-www-form-urlencoded:
+                formParameters:
+                  tool:
+                    description: Tool name that you want to install.
+                    example: tickets
+                    enum: [tickets, link, git, svn, mercurial, blog, discussion, subproject, wiki]
+                    required: true
+                    type: string
+                  mount_point:
                     description: |
-                      View a webhook
-                  post:
+                      The section of the url relitive to your project. For example: /p/your_project/{mount_point}
+                    example: git
+                    type: string
+                    required: true
+                  mount_label:
                     description: |
-                      Update an existing webhook
-                    body:
-                      application/x-www-form-urlencoded:
-                        formParameters:
-                          url:
-                            description: |
-                              The url to call when the the webhook is triggered.
-                            required: true
-                            type: string
-                          secret:
-                            description: |
-                              Optionally supply your own secret.
-
-                              Note: DO NOT ever expose your secret!
-                            required: false
-                            type: string
-                  delete:
+                      How your tool will be displayed in your project (like a "nice name" for the tool).
+                    example: Git
+                    type: string
+                    required: true
+                  order:
+                    type: string
+                    enum: [first, last, alpha_tool]
+                    required: false
                     description: |
-                      Delete an existing webhook
-          /install_tool:
-            description: |
-              Adds a new tool to the project. *Authentication Required*.
-
-              returns dict with two fields:
-              success: False if error is occurred, otherwise True
-              info: success or error message
-            post:
-              body:
-                application/x-www-form-urlencoded:
-                  formParameters:
-                    tool:
-                      description: Tool name that you want to install.
-                      example: tickets
-                      enum: [tickets, link, git, svn, mercurial, blog, discussion, subproject, wiki]
-                      required: true
-                      type: string
-                    mount_point:
-                      description: |
-                        The section of the url relitive to your project. For example: /p/your_project/{mount_point}
-                      example: git
-                      type: string
-                      required: true
-                    mount_label:
-                      description: |
-                        How your tool will be displayed in your project (like a "nice name" for the tool).
-                      example: Git
-                      type: string
-                      required: true
-                    order:
-                      type: string
-                      enum: [first, last, alpha_tool]
-                      required: false
-                      description: |
-                        "first", "last", or "alpha_tool" for position with respect to existing tools (or existing tools of the same type for "alpha_tool")
+                      "first", "last", or "alpha_tool" for position with respect to existing tools (or existing tools of the same type for "alpha_tool")
 
 /u/{username}:
     description: |


[12/13] allura git commit: [#6797] no PUT to project

Posted by he...@apache.org.
[#6797] no PUT to project


Project: http://git-wip-us.apache.org/repos/asf/allura/repo
Commit: http://git-wip-us.apache.org/repos/asf/allura/commit/27268796
Tree: http://git-wip-us.apache.org/repos/asf/allura/tree/27268796
Diff: http://git-wip-us.apache.org/repos/asf/allura/diff/27268796

Branch: refs/heads/hs/6797
Commit: 27268796b015fa31bb69dc82d49a2ca41647b440
Parents: b6483f8
Author: Dave Brondsema <da...@brondsema.net>
Authored: Thu Aug 13 16:00:14 2015 -0400
Committer: Heith Seewald <hs...@hsmb.local>
Committed: Fri Aug 14 09:35:29 2015 -0400

----------------------------------------------------------------------
 Allura/docs/api-rest/resourceTypes.yaml | 10 +---------
 1 file changed, 1 insertion(+), 9 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/allura/blob/27268796/Allura/docs/api-rest/resourceTypes.yaml
----------------------------------------------------------------------
diff --git a/Allura/docs/api-rest/resourceTypes.yaml b/Allura/docs/api-rest/resourceTypes.yaml
index 4218464..7d38d3f 100755
--- a/Allura/docs/api-rest/resourceTypes.yaml
+++ b/Allura/docs/api-rest/resourceTypes.yaml
@@ -87,13 +87,5 @@
             application/json:
               schema: <<schema>>
               example: <<example>>
-    put:
-      body:
-        application/json:
-          schema: <<schema>>
-      responses:
-        200:
-          body:
-            application/json:
-              schema: <<schema>>
+
 


[13/13] allura git commit: [#6797] Add user docs and forum json

Posted by he...@apache.org.
[#6797] Add user docs and forum json


Project: http://git-wip-us.apache.org/repos/asf/allura/repo
Commit: http://git-wip-us.apache.org/repos/asf/allura/commit/f847633b
Tree: http://git-wip-us.apache.org/repos/asf/allura/tree/f847633b
Diff: http://git-wip-us.apache.org/repos/asf/allura/diff/f847633b

Branch: refs/heads/hs/6797
Commit: f847633bfafb531c06a01c470656ffa5799422a6
Parents: 22a7a0b
Author: Heith Seewald <hs...@hsmb.local>
Authored: Fri Aug 14 12:10:54 2015 -0400
Committer: Heith Seewald <hs...@hsmb.local>
Committed: Fri Aug 14 12:10:54 2015 -0400

----------------------------------------------------------------------
 Allura/docs/api-rest/api.raml            |   9 +-
 Allura/docs/api-rest/docs.md             | 189 ++++++++++++++++++++++++++
 Allura/docs/api-rest/examples/forum.json |  32 +++++
 Allura/docs/api-rest/schemas/forum.json  |  76 +++++++++++
 4 files changed, 303 insertions(+), 3 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/allura/blob/f847633b/Allura/docs/api-rest/api.raml
----------------------------------------------------------------------
diff --git a/Allura/docs/api-rest/api.raml b/Allura/docs/api-rest/api.raml
index 9a55249..60cfe94 100755
--- a/Allura/docs/api-rest/api.raml
+++ b/Allura/docs/api-rest/api.raml
@@ -15,6 +15,10 @@ baseUriParameters:
     example: "forge-allura.apache.org"
     default: "forge-allura.apache.org"
 
+documentation:
+  - title: Api Overview
+    content: !include docs.md
+
 /{neighborhood}:
     description: |
       Neighborhoods are groups of logically related projects, which have the same default options.
@@ -341,9 +345,8 @@ baseUriParameters:
             Represents a forum within a Discussion tool.
           type: {
             generic: {
-              # FIXME
-              example: !include examples/page.json,
-              schema: !include schemas/page.json
+              example: !include examples/forum.json,
+              schema: !include schemas/forum.json
             }
           }
           displayName: forum

http://git-wip-us.apache.org/repos/asf/allura/blob/f847633b/Allura/docs/api-rest/docs.md
----------------------------------------------------------------------
diff --git a/Allura/docs/api-rest/docs.md b/Allura/docs/api-rest/docs.md
new file mode 100755
index 0000000..dd22b83
--- /dev/null
+++ b/Allura/docs/api-rest/docs.md
@@ -0,0 +1,189 @@
+#### Basic API architecture
+
+All url endpoints are prefixed with /rest/ and the path to the project and tool.  
+
+For example, in order to access a wiki installed in the 'test' project with the mount point 'docs' the API endpoint would be /rest/p/test/docs.
+
+
+#### Permissions
+
+This is API to run permission checks. It is available on a neighborhood, project and tool level.
+
+It is only available to users that have 'admin' permission for corresponding neighborhood/project/tool.  
+It requires `user` and `perm` parameters and will return JSON dict with `result` key, which contains boolean value, indicating if given `user` has `perm` permission to the neighborhood/project/tool.
+
+
+
+#### Project Export
+
+Generates a full bulk export of your tool(s) in the same format as the API for individual access. 
+Authentication required.  
+
+An example shell script using these APIs, suitable to run in a cron, is at <https://forge-allura.apache.org/p/allura/git/ci/master/tree/scripts/project_export>
+
+
+
+
+#### DOAP (Description of a Project)
+
+[DOAP](http://en.wikipedia.org/wiki/DOAP) is an RDF/XML specification for "Description of a Project"
+
+Project information is available in DOAP format with additional custom RDF fields at /rest/p/*project_name*?doap
+
+
+#### User
+
+This is a user's personal project, so it contains the same information as a project, although many fields may not be useful. 
+The `profile_api_url` field is a link to the user's profile endpoint which is documented next.
+
+
+#### Webhooks
+
+This allows you to manage webhooks programatically.  See https://forge-allura.apache.org/p/allura/wiki/Webhooks/ for using a webhook.
+
+
+#### Authenticating requests
+
+In order to use the API for authenticated actions, you should use the OAuth account page to create a consumer key for your application.  Once you have a consumer key, you must have a SourceForge user (e.g. your own account, if you're writing a single script) authorize your application to act on his or her behalf.
+
+You can also use your normal browser session as authentication for the API.  This is useful for manually testing API calls or for in-browser applications (such as extensions or user-scripts).  It is not recommended for programatic access, however, as it would require you to store your account username and password, and thus cannot be easily managed or revoked.
+
+Without authentication, all API requests have the permissions of an anonymous visitor.  To view or change anything that requires a login, you must authenticate to the API using OAuth.  You must first register for an OAuth consumer token at <https://sourceforge.net/auth/oauth/>.  Once you have registered, you will be be able to see your consumer key and consumer secret, or generate a bearer token, at <https://sourceforge.net/auth/oauth/>.
+
+
+#### OAuth With Bearer Tokens
+
+The easiest way to use the API with your own account is to use a bearer token.  Once you have generated a bearer token at <https://sourceforge.net/auth/oauth/>, you just include it in the request to the API via the `access_token` URL parameter, `access_token` POST form field, or http header like `Authorization: Bearer MY_BEARER_TOKEN`.
+
+Note, however, that to use bearer tokens, you *must* use HTTPS/SSL for the request.
+
+Simple URL example to access a private ticket:
+
+https://sourceforge.net/rest/p/theproject/tickets/35/?access_token=MY_BEARER_TOKEN
+
+Python code example:
+
+~~~~~
+  import requests
+  from pprint import pprint
+  
+  BEARER_TOKEN = '<bearer token from oauth page>'
+  
+  r = requests.post('https://sourceforge.net/rest/p/test-project/new', params={
+          'access_token': BEARER_TOKEN,
+          'ticket_form.summary': 'Test ticket',
+          'ticket_form.description': 'This is a test ticket',
+          'ticket_form.labels': 'test',
+          'ticket_form.custom_fields._my_num': '7',  # custom field with label "My Num"
+                                                     # must be created first
+      })
+  if r.status_code == 200:
+      print 'Ticket created at: %s' % r.url
+      pprint(r.json())
+  else:
+      print 'Error [%s]:\n%s' % (r.status_code, r.text)
+~~~~~
+
+
+
+#### OAuth 1.0 Application Authorization (Third-Party Apps)
+
+
+If you want your application to be able to use the API on behalf of another user, that user must authorize your application to act on their behalf.  This is usually accomplished by obtaining a request token and directing the user authorize the request.  The following is an example of how one would authorize an application in Python using the python-oauth2 library.  First, run `pip install oauth2` and `pip install certifi`.
+
+~~~~~
+  CONSUMER_KEY = '<consumer key from registration>'
+  CONSUMER_SECRET = '<consumer secret from registration>'
+  REQUEST_TOKEN_URL = 'https://sourceforge.net/rest/oauth/request_token'
+  AUTHORIZE_URL = 'https://sourceforge.net/rest/oauth/authorize'
+  ACCESS_TOKEN_URL = 'https://sourceforge.net/rest/oauth/access_token'
+  
+  import oauth2 as oauth  # misleading package name, oauth2 implements OAuth 1.0 spec
+  import certifi
+  from urllib2 import urlparse
+  import webbrowser
+  
+  consumer = oauth.Consumer(CONSUMER_KEY, CONSUMER_SECRET)
+  client = oauth.Client(consumer)
+  client.ca_certs = certifi.where()
+  
+  # Step 1: Get a request token. This is a temporary token that is used for 
+  # having the user authorize an access token and to sign the request to obtain 
+  # said access token.
+  
+  resp, content = client.request(REQUEST_TOKEN_URL, 'GET')
+  if resp['status'] != '200':
+      raise Exception("Invalid response %s." % resp['status'])
+  
+  request_token = dict(urlparse.parse_qsl(content))
+  
+  # these are intermediate tokens and not needed later
+  #print "Request Token:"
+  #print "    - oauth_token        = %s" % request_token['oauth_token']
+  #print "    - oauth_token_secret = %s" % request_token['oauth_token_secret']
+  #print 
+  
+  # Step 2: Redirect to the provider. Since this is a CLI script we do not 
+  # redirect. In a web application you would redirect the user to the URL
+  # below, specifying the additional parameter oauth_callback=<your callback URL>.
+  
+  webbrowser.open("%s?oauth_token=%s" % (
+          AUTHORIZE_URL, request_token['oauth_token']))
+  
+  # Since we didn't specify a callback, the user must now enter the PIN displayed in 
+  # their browser.  If you had specified a callback URL, it would have been called with 
+  # oauth_token and oauth_verifier parameters, used below in obtaining an access token.
+  oauth_verifier = raw_input('What is the PIN? ')
+  
+  # Step 3: Once the consumer has redirected the user back to the oauth_callback
+  # URL you can request the access token the user has approved. You use the 
+  # request token to sign this request. After this is done you throw away the
+  # request token and use the access token returned. You should store this 
+  # access token somewhere safe, like a database, for future use.
+  token = oauth.Token(request_token['oauth_token'],
+      request_token['oauth_token_secret'])
+  token.set_verifier(oauth_verifier)
+  client = oauth.Client(consumer, token)
+  client.ca_certs = certifi.where()
+  
+  resp, content = client.request(ACCESS_TOKEN_URL, "GET")
+  access_token = dict(urlparse.parse_qsl(content))
+  
+  print "Access Token:"
+  print "    - oauth_token        = %s" % access_token['oauth_token']
+  print "    - oauth_token_secret = %s" % access_token['oauth_token_secret']
+  print
+  print "You may now access protected resources using the access tokens above." 
+  print
+~~~~~
+
+
+You can then use your access token with the REST API.  For instance script to create a wiki page might look like this:
+
+~~~~~
+  from urllib import urlencode
+  import oauth2 as oauth
+  import certifi
+  
+  PROJECT='test'
+  
+  CONSUMER_KEY='<consumer key from app registration>'
+  CONSUMER_SECRET='<consumer secret from app registration>'
+  
+  ACCESS_KEY='<access key from previous script>'
+  ACCESS_SECRET='<access secret from previous script>'
+  
+  URL_BASE='https://sourceforge.net/rest/'
+  
+  consumer = oauth.Consumer(CONSUMER_KEY, CONSUMER_SECRET)
+  access_token = oauth.Token(ACCESS_KEY, ACCESS_SECRET)
+  client = oauth.Client(consumer, access_token)
+  client.ca_certs = certifi.where()
+  
+  response = client.request(
+      URL_BASE + 'p/' + PROJECT + '/wiki/TestPage', 'POST',
+      body=urlencode(dict(
+              text='This is a test page')))
+  print "Done.  Response was:"
+  print response
+~~~~~

http://git-wip-us.apache.org/repos/asf/allura/blob/f847633b/Allura/docs/api-rest/examples/forum.json
----------------------------------------------------------------------
diff --git a/Allura/docs/api-rest/examples/forum.json b/Allura/docs/api-rest/examples/forum.json
new file mode 100644
index 0000000..a20c1c4
--- /dev/null
+++ b/Allura/docs/api-rest/examples/forum.json
@@ -0,0 +1,32 @@
+{
+  "topic": {
+    "_id": "a7528751",
+    "posts": [
+      {
+        "text": "How to fix anything!",
+        "attachments": [
+        ],
+        "author": "root",
+        "timestamp": "2015-07-20 16:36:18.019000",
+        "last_edited": null,
+        "slug": "c920",
+        "subject": "Tech Support"
+      },
+      {
+        "text": "fdas",
+        "attachments": [
+        ],
+        "author": "hs2",
+        "timestamp": "2015-07-22 15:41:58.522000",
+        "last_edited": null,
+        "slug": "b8fa",
+        "subject": "Tech Support"
+      }
+    ],
+    "discussion_id": "5568f6684d212236d1eaed07",
+    "subject": "Tech Support"
+  },
+  "count": 2,
+  "limit": 25,
+  "page": 0
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/allura/blob/f847633b/Allura/docs/api-rest/schemas/forum.json
----------------------------------------------------------------------
diff --git a/Allura/docs/api-rest/schemas/forum.json b/Allura/docs/api-rest/schemas/forum.json
new file mode 100644
index 0000000..7c67c61
--- /dev/null
+++ b/Allura/docs/api-rest/schemas/forum.json
@@ -0,0 +1,76 @@
+{
+  "$schema": "http://json-schema.org/draft-04/schema#",
+  "id": "/",
+  "type": "object",
+  "properties": {
+    "topic": {
+      "id": "topic",
+      "type": "object",
+      "properties": {
+        "_id": {
+          "id": "_id",
+          "type": "string"
+        },
+        "posts": {
+          "id": "posts",
+          "type": "array",
+          "items": {
+            "id": "1",
+            "type": "object",
+            "properties": {
+              "text": {
+                "id": "text",
+                "type": "string"
+              },
+              "attachments": {
+                "id": "attachments",
+                "type": "array",
+                "items": {}
+              },
+              "author": {
+                "id": "author",
+                "type": "string"
+              },
+              "timestamp": {
+                "id": "timestamp",
+                "type": "string"
+              },
+              "last_edited": {
+                "id": "last_edited",
+                "type": "null"
+              },
+              "slug": {
+                "id": "slug",
+                "type": "string"
+              },
+              "subject": {
+                "id": "subject",
+                "type": "string"
+              }
+            }
+          }
+        },
+        "discussion_id": {
+          "id": "discussion_id",
+          "type": "string"
+        },
+        "subject": {
+          "id": "subject",
+          "type": "string"
+        }
+      }
+    },
+    "count": {
+      "id": "count",
+      "type": "integer"
+    },
+    "limit": {
+      "id": "limit",
+      "type": "integer"
+    },
+    "page": {
+      "id": "page",
+      "type": "integer"
+    }
+  }
+}
\ No newline at end of file


[10/13] allura git commit: [#6797] replace custom security (which actually breaks Mulesoft api "try it") with bearer token headers

Posted by he...@apache.org.
[#6797] replace custom security (which actually breaks Mulesoft api "try it") with bearer token headers


Project: http://git-wip-us.apache.org/repos/asf/allura/repo
Commit: http://git-wip-us.apache.org/repos/asf/allura/commit/41bb5cb8
Tree: http://git-wip-us.apache.org/repos/asf/allura/tree/41bb5cb8
Diff: http://git-wip-us.apache.org/repos/asf/allura/diff/41bb5cb8

Branch: refs/heads/hs/6797
Commit: 41bb5cb8d0999e93bbd50f4ab092c6c3a9fb384d
Parents: 2726879
Author: Dave Brondsema <da...@brondsema.net>
Authored: Thu Aug 13 16:01:20 2015 -0400
Committer: Heith Seewald <hs...@hsmb.local>
Committed: Fri Aug 14 09:35:29 2015 -0400

----------------------------------------------------------------------
 Allura/docs/api-rest/api.raml             | 25 ++++++++++++-----
 Allura/docs/api-rest/resourceTypes.yaml   | 12 ++++----
 Allura/docs/api-rest/securitySchemes.yaml | 39 +++++++++++---------------
 Allura/docs/api-rest/traits.yaml          | 13 ++++++++-
 4 files changed, 53 insertions(+), 36 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/allura/blob/41bb5cb8/Allura/docs/api-rest/api.raml
----------------------------------------------------------------------
diff --git a/Allura/docs/api-rest/api.raml b/Allura/docs/api-rest/api.raml
index 2d9b211..f501679 100755
--- a/Allura/docs/api-rest/api.raml
+++ b/Allura/docs/api-rest/api.raml
@@ -3,7 +3,7 @@
 title: Apache Allura
 version: 1
 baseUri: https://{domain}/rest
-securedBy: [null, oauth_1_0, oauth_bearer_token]
+securedBy: [null, oauth_1_0]
 
 resourceTypes: !include resourceTypes.yaml
 traits: !include traits.yaml
@@ -15,8 +15,6 @@ baseUriParameters:
     example: "forge-allura.apache.org"
     default: "forge-allura.apache.org"
 
-
-
 /{neighborhood}:
     description: |
       Neighborhoods are groups of logically related projects, which have the same default options.
@@ -107,6 +105,7 @@ baseUriParameters:
           post:
             description: |
               Creates or updates the titled page.
+            is: [ bearerAuth ]
             body:
               application/x-www-form-urlencoded:
                 formParameters:
@@ -141,8 +140,6 @@ baseUriParameters:
             schema: !include schemas/tickets.json
             }
           }
-        is: [pageable]
-
         displayName: Tracker Url
         uriParameters:
          tracker:
@@ -165,6 +162,7 @@ baseUriParameters:
           get:
             description: |
               returns summary information about a thread, including the posts in a thread
+            is: [ bearerAuth ]
           /{slug}:
             uriParameters:
              slug:
@@ -174,10 +172,12 @@ baseUriParameters:
             get:
               description: |
                 returns detailed information about a post
+              is: [ bearerAuth ]
             /reply:
               description: |
                 create a threaded reply to the given post
               post:
+                is: [ bearerAuth ]
                 body:
                   application/x-www-form-urlencoded:
                     formParameters:
@@ -191,6 +191,7 @@ baseUriParameters:
             description: |
               create a post in the given thread
             post:
+              is: [ bearerAuth ]
               body:
                 application/x-www-form-urlencoded:
                   formParameters:
@@ -215,6 +216,7 @@ baseUriParameters:
           description: |
             Creates a new ticket.
           post:
+            is: [ bearerAuth ]
             body:
               application/x-www-form-urlencoded:
                 formParameters:
@@ -267,6 +269,7 @@ baseUriParameters:
               parameters are the same as /rest/p/project_name/mount_point/new
 
             post:
+              is: [ bearerAuth ]
               body:
                 application/x-www-form-urlencoded:
                   formParameters:
@@ -360,7 +363,7 @@ baseUriParameters:
             description: |
               Represents a thread of posts.
             get:
-              is: [pageable]
+              is: [pageable, bearerAuth]
               description: |
                 returns a list of posts in the thread, with fields for author, text, and timestamp. Nested posts (i.e. a reply to a post) can be determined by the slug structure. For example, "slug": "0a0b/9f00" is a reply to the post with "slug": "0a0b"
 
@@ -399,6 +402,7 @@ baseUriParameters:
         post:
           description: |
             Creates a new blog post.
+          is: [ bearerAuth ]
           body:
             application/x-www-form-urlencoded:
               formParameters:
@@ -450,6 +454,7 @@ baseUriParameters:
             post:
               description: |
                 Updates an existing blog post.
+              is: [ bearerAuth ]
               body:
                 application/x-www-form-urlencoded:
                   formParameters:
@@ -500,6 +505,7 @@ baseUriParameters:
         post:
           description: |
             Updates the url. *authentication required*.
+          is: [ bearerAuth ]
           body:
             application/x-www-form-urlencoded:
               formParameters:
@@ -523,13 +529,14 @@ baseUriParameters:
               **400 Bad Request:** tools parameter not provided or is invalid
               **503 Service Unavailable:** an export job is already running
               **200 OK:** job submitted. Body will be: *{"status": "in progress", "filename": FILENAME}*
+            is: [ bearerAuth ]
         /export_status:
           description: |
             Check status of a bulk export job
           get:
             description: |
               Returns status: busy or ready
-
+            is: [ bearerAuth ]
         /{project}/webhooks:
             type: {
               typedCollection: {
@@ -555,6 +562,7 @@ baseUriParameters:
               post:
                 description: |
                   Create a new webhook.
+                is: [ bearerAuth ]
                 body:
                   application/x-www-form-urlencoded:
                     formParameters:
@@ -582,6 +590,7 @@ baseUriParameters:
                 post:
                   description: |
                     Update an existing webhook
+                  is: [ bearerAuth ]
                   body:
                     application/x-www-form-urlencoded:
                       formParameters:
@@ -598,6 +607,7 @@ baseUriParameters:
                           required: false
                           type: string
                 delete:
+                  is: [ bearerAuth ]
                   description: |
                     Delete an existing webhook
         /install_tool:
@@ -608,6 +618,7 @@ baseUriParameters:
             success: False if error is occurred, otherwise True
             info: success or error message
           post:
+            is: [ bearerAuth ]
             body:
               application/x-www-form-urlencoded:
                 formParameters:

http://git-wip-us.apache.org/repos/asf/allura/blob/41bb5cb8/Allura/docs/api-rest/resourceTypes.yaml
----------------------------------------------------------------------
diff --git a/Allura/docs/api-rest/resourceTypes.yaml b/Allura/docs/api-rest/resourceTypes.yaml
index 7d38d3f..9a69e5a 100755
--- a/Allura/docs/api-rest/resourceTypes.yaml
+++ b/Allura/docs/api-rest/resourceTypes.yaml
@@ -8,15 +8,15 @@
     patch?:
       responses: *standardResponses
     post?:
-        responses:
-          201:
-            description: Created
+      responses:
+        201:
+          description: Created
     delete?:
       responses: *standardResponses
 - collection:
     type: base
     get:
-      is: [ pageable ]
+      is: [ pageable, bearerAuth ]
 - member:
       type: base
       get?:
@@ -27,6 +27,7 @@
 - tool:
     type: member
     get:
+      is: [ bearerAuth ]
       responses:
         200:
           body:
@@ -55,6 +56,7 @@
     delete?:
 - searchableCollection:
     get:
+      is: [ bearerAuth ]
       queryParameters:
         <<queryParamName>>:
           description: Return <<resourcePathName>> that have their <<queryParamName>> matching the given value
@@ -77,7 +79,7 @@
     description: |
       Checks if a given user has permissions.
     get:
-      is: [permissionTestable]
+      is: [permissionTestable, bearerAuth]
 - project:
     type: member
     get:

http://git-wip-us.apache.org/repos/asf/allura/blob/41bb5cb8/Allura/docs/api-rest/securitySchemes.yaml
----------------------------------------------------------------------
diff --git a/Allura/docs/api-rest/securitySchemes.yaml b/Allura/docs/api-rest/securitySchemes.yaml
index c4bdd06..7516290 100755
--- a/Allura/docs/api-rest/securitySchemes.yaml
+++ b/Allura/docs/api-rest/securitySchemes.yaml
@@ -1,29 +1,22 @@
 - oauth_1_0:
     description: |
-        Apache Allura supports OAuth 1.0 for authenticating API requests.
+        OAuth 1.0 may be used to authenticate API requests.
+
+        Another option which is simpler in some ways is "bearer tokens":
+
+        A bearer token (aka access token) may be generated at https://forge-allura.apache.org/auth/oauth/ and used
+        in an HTTP header like:
+
+        `Authorization: Bearer MY_BEARER_TOKEN`
+
+          or in a URL like
+
+        `?access_token=MY_BEARER_TOKEN`
+
+        To use bearer tokens, choose "Anonymous" security and then use the Authorization header to enter your Bearer token.
     type: OAuth 1.0
     settings:
       requestTokenUri: https://forge-allura.apache.org/rest/oauth/request_token
-      authorizationUri: /rest/oauth/authorize
-      tokenCredentialsUri: /rest/oauth/access_token
+      authorizationUri: https://forge-allura.apache.org/rest/oauth/authorize
+      tokenCredentialsUri: https://forge-allura.apache.org/rest/oauth/access_token
 
-- oauth_bearer_token:
-    description: |
-        A bearer token (aka access token) may be generated at https://forge-allura.apache.org/auth/oauth/ for simple
-        authorization via URL parameter or HTTP header.
-    type: x-OAuth-Bearer-Token
-    describedBy:
-        headers:
-            Authorization:
-                description: |
-                   Used to send a bearer token.  Use either this or
-                   the "access_token" query string parameter.
-                type: string
-        queryParameters:
-            access_token:
-                description: |
-                   Used to send a bearer token.  Use either this or
-                   the "Authorization" header
-                type: string
-    settings:
-      authorizationUri: https://forge-allura.apache.org//auth/oauth/

http://git-wip-us.apache.org/repos/asf/allura/blob/41bb5cb8/Allura/docs/api-rest/traits.yaml
----------------------------------------------------------------------
diff --git a/Allura/docs/api-rest/traits.yaml b/Allura/docs/api-rest/traits.yaml
index 2b45b71..31ee122 100755
--- a/Allura/docs/api-rest/traits.yaml
+++ b/Allura/docs/api-rest/traits.yaml
@@ -54,4 +54,15 @@
         type: string
         example: heiths
         required: true
-        description: The username to check
\ No newline at end of file
+        description: The username to check
+- bearerAuth:
+    # This can also be done with ?access_token=
+    # But it's simpler in the docs / Try It interface to just show one option
+    # and using the header method keeps it separate from query params that the individual API endpoints use
+    headers:
+      Authorization:
+        description: |
+          Optional.  Authenticate yourselve with a token from https://forge-allura.apache.org/auth/oauth/
+          Use it here like: `Bearer 5d79e800a36bf602314d`
+        type: string
+        pattern: "^Bearer [0-9a-f]+$"


[02/13] allura git commit: [#6797] reorder tools; link shouldn't got first

Posted by he...@apache.org.
[#6797] reorder tools; link shouldn't got first


Project: http://git-wip-us.apache.org/repos/asf/allura/repo
Commit: http://git-wip-us.apache.org/repos/asf/allura/commit/2b676621
Tree: http://git-wip-us.apache.org/repos/asf/allura/tree/2b676621
Diff: http://git-wip-us.apache.org/repos/asf/allura/diff/2b676621

Branch: refs/heads/hs/6797
Commit: 2b6766213894ab9e5044f2d3cdd0cbe6b57d1a1c
Parents: 9271748
Author: Dave Brondsema <da...@brondsema.net>
Authored: Thu Aug 13 14:04:22 2015 -0400
Committer: Heith Seewald <hs...@hsmb.local>
Committed: Fri Aug 14 09:35:28 2015 -0400

----------------------------------------------------------------------
 Allura/docs/api-rest/api.raml | 394 ++++++++++++++++++-------------------
 1 file changed, 197 insertions(+), 197 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/allura/blob/2b676621/Allura/docs/api-rest/api.raml
----------------------------------------------------------------------
diff --git a/Allura/docs/api-rest/api.raml b/Allura/docs/api-rest/api.raml
index 78402a2..dfedf35 100755
--- a/Allura/docs/api-rest/api.raml
+++ b/Allura/docs/api-rest/api.raml
@@ -69,203 +69,6 @@ baseUriParameters:
               default: read
               enum: [read, admin, create, update]
 
-      /{link}:
-        description: |
-          Represents the External Link tool.
-        type: {
-            tool: {
-            example: !include examples/link.json,
-            schema: !include schemas/link.json
-            }
-          }
-
-        get:
-          description: |
-            Returns the existing url.
-
-        post:
-          description: |
-            Updates the url. *authentication required*.
-          body:
-            application/x-www-form-urlencoded:
-              formParameters:
-                url:
-                  description: |
-                    The url you would like to update to.
-                  type: string
-                  example: http://google.com
-
-      /{blog}:
-        type: {
-            tool: {
-            example: !include examples/blog.json,
-            schema: !include schemas/blog.json
-            }
-          }
-        description: |
-          Represents the **Blog tool**
-
-        displayName: Blog
-        uriParameters:
-         blog:
-           displayName: Blog Name
-           type: string
-           example: blog
-
-        get:
-          description: |
-            Returns a list of posts, including title and API url.
-        post:
-          description: |
-            Creates a new blog post.
-          body:
-            application/x-www-form-urlencoded:
-              formParameters:
-                title:
-                  description: |
-                    The title of the post.
-                  type: string
-                  example: New API docs released!
-                text:
-                  description: |
-                    The text of the post.
-                  type: string
-                  example: Lots of text here describing apis!\nThat is all.
-                labels:
-                  description: |
-                    Labels of the post -- comma seperated strings
-                  type: string
-                  example: api,development
-                state:
-                  description: |
-                    Draft or published.
-                  enum: [draft, published]
-                  type: string
-                  example: published
-
-        /{year}/{month}/{title}:
-            description: Represents a blog post entry.
-            type: {
-              tool: {
-              example: !include examples/blogPost.json,
-              schema: !include schemas/blogPost.json
-              }
-            }
-            displayName: Blog Post
-            uriParameters:
-             year:
-               displayName: Year
-               type: number
-               example: 2015
-             month:
-               displayName: Month
-               type: number
-               example: 04
-             title:
-               displayName: Title
-               type: string
-               example: project-insights
-
-            post:
-              description: |
-                Updates an existing blog post.
-              body:
-                application/x-www-form-urlencoded:
-                  formParameters:
-                    title:
-                      description: |
-                        The title of the post.
-                      type: string
-                    text:
-                      description: |
-                        The text of the post.
-                      type: string
-                    labels:
-                      description: |
-                        Labels of the post -- comma seperated strings
-                      type: string
-                    state:
-                      description: |
-                        Draft or published.
-                      enum: [draft, published]
-                      type: string
-
-        /has_access:
-          type: permission
-          get:
-            queryParameters:
-              perm:
-                displayName: Permission
-                required: true
-                type: string
-                example: post
-                default: read
-                enum: [admin, configure, moderate, post, unmoderated_post, read, write]
-
-      /{discussion}:
-        description: |
-          Represents the **Discussion Tool**.
-        type: {
-          tool: {
-            schema: !include schemas/discussion.json,
-            example: !include examples/discussion.json
-            }
-          }
-
-        displayName: Discussion
-        uriParameters:
-         discussion:
-           displayName: Discussion Tool Name
-           type: string
-           example: "discussion"
-        get:
-          description: |
-            Returns a list of forums, including name, description, num_topics, and last_post details
-          is: [pageable]
-
-        /{forum}:
-          description: |
-            Represents a forum within a Discussion tool.
-          type: {
-            tool: {
-              # FIXME
-              example: !include examples/page.json,
-              schema: !include schemas/page.json
-            }
-          }
-          displayName: forum
-          uriParameters:
-           forum:
-             displayName: Forum Name
-             type: string
-             example: general
-
-          get:
-            is: [pageable]
-            description: |
-              returns a limited list of topics in the forum, with fields for subject, num_replies, API URL, and last_post
-              To view more than 100 threads, or 100 posts in a thread, use the pagination support of the API by adding ?page=1 etc. to the URL.
-
-          /thread/{thread}:
-            description: |
-              Represents a thread of posts.
-            get:
-              is: [pageable]
-              description: |
-                returns a list of posts in the thread, with fields for author, text, and timestamp. Nested posts (i.e. a reply to a post) can be determined by the slug structure. For example, "slug": "0a0b/9f00" is a reply to the post with "slug": "0a0b"
-
-        /has_access:
-          type: permission
-          get:
-            queryParameters:
-              perm:
-                displayName: Permission
-                required: true
-                type: string
-                example: post
-                default: read
-                enum: [admin, configure, moderate, post, unmoderated_post, read]
-
       /{wiki}:
         description: |
           Represents the **Wiki Tool**.
@@ -511,6 +314,203 @@ baseUriParameters:
                 enum: [admin, configure, moderate, post, unmoderated_post, read, create, delete, update, save_searches]
 
 
+      /{discussion}:
+        description: |
+          Represents the **Discussion Tool**.
+        type: {
+          tool: {
+            schema: !include schemas/discussion.json,
+            example: !include examples/discussion.json
+            }
+          }
+
+        displayName: Discussion
+        uriParameters:
+         discussion:
+           displayName: Discussion Tool Name
+           type: string
+           example: "discussion"
+        get:
+          description: |
+            Returns a list of forums, including name, description, num_topics, and last_post details
+          is: [pageable]
+
+        /{forum}:
+          description: |
+            Represents a forum within a Discussion tool.
+          type: {
+            tool: {
+              # FIXME
+              example: !include examples/page.json,
+              schema: !include schemas/page.json
+            }
+          }
+          displayName: forum
+          uriParameters:
+           forum:
+             displayName: Forum Name
+             type: string
+             example: general
+
+          get:
+            is: [pageable]
+            description: |
+              returns a limited list of topics in the forum, with fields for subject, num_replies, API URL, and last_post
+              To view more than 100 threads, or 100 posts in a thread, use the pagination support of the API by adding ?page=1 etc. to the URL.
+
+          /thread/{thread}:
+            description: |
+              Represents a thread of posts.
+            get:
+              is: [pageable]
+              description: |
+                returns a list of posts in the thread, with fields for author, text, and timestamp. Nested posts (i.e. a reply to a post) can be determined by the slug structure. For example, "slug": "0a0b/9f00" is a reply to the post with "slug": "0a0b"
+
+        /has_access:
+          type: permission
+          get:
+            queryParameters:
+              perm:
+                displayName: Permission
+                required: true
+                type: string
+                example: post
+                default: read
+                enum: [admin, configure, moderate, post, unmoderated_post, read]
+
+      /{blog}:
+        type: {
+            tool: {
+            example: !include examples/blog.json,
+            schema: !include schemas/blog.json
+            }
+          }
+        description: |
+          Represents the **Blog tool**
+
+        displayName: Blog
+        uriParameters:
+         blog:
+           displayName: Blog Name
+           type: string
+           example: blog
+
+        get:
+          description: |
+            Returns a list of posts, including title and API url.
+        post:
+          description: |
+            Creates a new blog post.
+          body:
+            application/x-www-form-urlencoded:
+              formParameters:
+                title:
+                  description: |
+                    The title of the post.
+                  type: string
+                  example: New API docs released!
+                text:
+                  description: |
+                    The text of the post.
+                  type: string
+                  example: Lots of text here describing apis!\nThat is all.
+                labels:
+                  description: |
+                    Labels of the post -- comma seperated strings
+                  type: string
+                  example: api,development
+                state:
+                  description: |
+                    Draft or published.
+                  enum: [draft, published]
+                  type: string
+                  example: published
+
+        /{year}/{month}/{title}:
+            description: Represents a blog post entry.
+            type: {
+              tool: {
+              example: !include examples/blogPost.json,
+              schema: !include schemas/blogPost.json
+              }
+            }
+            displayName: Blog Post
+            uriParameters:
+             year:
+               displayName: Year
+               type: number
+               example: 2015
+             month:
+               displayName: Month
+               type: number
+               example: 04
+             title:
+               displayName: Title
+               type: string
+               example: project-insights
+
+            post:
+              description: |
+                Updates an existing blog post.
+              body:
+                application/x-www-form-urlencoded:
+                  formParameters:
+                    title:
+                      description: |
+                        The title of the post.
+                      type: string
+                    text:
+                      description: |
+                        The text of the post.
+                      type: string
+                    labels:
+                      description: |
+                        Labels of the post -- comma seperated strings
+                      type: string
+                    state:
+                      description: |
+                        Draft or published.
+                      enum: [draft, published]
+                      type: string
+
+        /has_access:
+          type: permission
+          get:
+            queryParameters:
+              perm:
+                displayName: Permission
+                required: true
+                type: string
+                example: post
+                default: read
+                enum: [admin, configure, moderate, post, unmoderated_post, read, write]
+
+      /{link}:
+        description: |
+          Represents the External Link tool.
+        type: {
+            tool: {
+            example: !include examples/link.json,
+            schema: !include schemas/link.json
+            }
+          }
+
+        get:
+          description: |
+            Returns the existing url.
+
+        post:
+          description: |
+            Updates the url. *authentication required*.
+          body:
+            application/x-www-form-urlencoded:
+              formParameters:
+                url:
+                  description: |
+                    The url you would like to update to.
+                  type: string
+                  example: http://google.com
+
       /admin:
         description: |
           Endpoints for **project exporting** and managing **webhooks**


[06/13] allura git commit: [#6797] fix incorrect includes. Combine forum & discussion endpoints into one and fix up

Posted by he...@apache.org.
[#6797] fix incorrect includes.  Combine forum & discussion endpoints into one and fix up


Project: http://git-wip-us.apache.org/repos/asf/allura/repo
Commit: http://git-wip-us.apache.org/repos/asf/allura/commit/92717482
Tree: http://git-wip-us.apache.org/repos/asf/allura/tree/92717482
Diff: http://git-wip-us.apache.org/repos/asf/allura/diff/92717482

Branch: refs/heads/hs/6797
Commit: 92717482b51ac334eac349aa4ab32b7905b818dd
Parents: 7af8677
Author: Dave Brondsema <da...@brondsema.net>
Authored: Mon Aug 10 18:30:01 2015 -0400
Committer: Heith Seewald <hs...@hsmb.local>
Committed: Fri Aug 14 09:35:28 2015 -0400

----------------------------------------------------------------------
 Allura/docs/api-rest/api.raml | 105 ++++++++++++++++---------------------
 1 file changed, 45 insertions(+), 60 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/allura/blob/92717482/Allura/docs/api-rest/api.raml
----------------------------------------------------------------------
diff --git a/Allura/docs/api-rest/api.raml b/Allura/docs/api-rest/api.raml
index b123871..78402a2 100755
--- a/Allura/docs/api-rest/api.raml
+++ b/Allura/docs/api-rest/api.raml
@@ -115,12 +115,6 @@ baseUriParameters:
         get:
           description: |
             Returns a list of posts, including title and API url.
-          responses:
-            200:
-              body:
-                application/json:
-                  schema: !include schemas/blog.json
-                  example: !include examples/blog.json
         post:
           description: |
             Creates a new blog post.
@@ -208,74 +202,37 @@ baseUriParameters:
                 default: read
                 enum: [admin, configure, moderate, post, unmoderated_post, read, write]
 
-      /{forum}:
-        description: |
-          A list of forums
-        type: {
-            tool: {
-            example: !include examples/page.json,
-            schema: !include schemas/page.json
-            }
-          }
-
-        displayName: forum
-        uriParameters:
-         forum:
-           displayName: Forum Name
-           type: string
-           example: general
-           description: |
-             Returns a list of forums, including name, description, num_posts, API URL, and last_post details
-
-             To view more than 100 threads, or 100 posts in a thread, use the pagination support of the API by adding ?page=1 etc. to the URL.
-
-        /forum:
-          description: |
-            returns a limited list of topics in the forum, with fields for subject, num_replies, API URL, and last_post
-          get:
-          /{slug}:
-            description: |
-              returns a limited list of posts in the thread, with fields for author, text, and timestamp. Nested posts (i.e. a reply to a post) can be determined by the slug structure. For example, "slug": "0a0b/9f00" is a reply to the post with "slug": "0a0b"
-            get:
-
-        /has_access:
-          type: permission
-          get:
-            queryParameters:
-              perm:
-                displayName: Permission
-                required: true
-                type: string
-                example: post
-                default: read
-                enum: [admin, configure, moderate, post, unmoderated_post, read]
-
       /{discussion}:
         description: |
           Represents the **Discussion Tool**.
         type: {
-            tool: {
+          tool: {
             schema: !include schemas/discussion.json,
             example: !include examples/discussion.json
-
             }
           }
 
         displayName: Discussion
         uriParameters:
          discussion:
-           displayName: Discussion Name
+           displayName: Discussion Tool Name
            type: string
            example: "discussion"
+        get:
+          description: |
+            Returns a list of forums, including name, description, num_topics, and last_post details
+          is: [pageable]
 
         /{forum}:
+          description: |
+            Represents a forum within a Discussion tool.
           type: {
-              tool: {
-                example: !include examples/page.json,
-                schema: !include schemas/page.json
-              }
+            tool: {
+              # FIXME
+              example: !include examples/page.json,
+              schema: !include schemas/page.json
             }
-
+          }
           displayName: forum
           uriParameters:
            forum:
@@ -283,8 +240,31 @@ baseUriParameters:
              type: string
              example: general
 
+          get:
+            is: [pageable]
+            description: |
+              returns a limited list of topics in the forum, with fields for subject, num_replies, API URL, and last_post
+              To view more than 100 threads, or 100 posts in a thread, use the pagination support of the API by adding ?page=1 etc. to the URL.
+
+          /thread/{thread}:
+            description: |
+              Represents a thread of posts.
+            get:
+              is: [pageable]
+              description: |
+                returns a list of posts in the thread, with fields for author, text, and timestamp. Nested posts (i.e. a reply to a post) can be determined by the slug structure. For example, "slug": "0a0b/9f00" is a reply to the post with "slug": "0a0b"
+
         /has_access:
           type: permission
+          get:
+            queryParameters:
+              perm:
+                displayName: Permission
+                required: true
+                type: string
+                example: post
+                default: read
+                enum: [admin, configure, moderate, post, unmoderated_post, read]
 
       /{wiki}:
         description: |
@@ -355,7 +335,7 @@ baseUriParameters:
         type: {
             tool: {
             example: !include examples/tickets.json,
-            schema: !include schemas/ticket.json
+            schema: !include schemas/tickets.json
             }
           }
         is: [pageable]
@@ -470,7 +450,6 @@ baseUriParameters:
             tool: {
             example: !include examples/ticket.json,
             schema: !include schemas/ticket.json
-
             }
           }
           displayName: Ticket Number
@@ -557,7 +536,7 @@ baseUriParameters:
             type: {
               typedCollection: {
               example: !include examples/webhooks.json,
-              schema: !include schemas/webhook.json
+              schema: !include schemas/webhooks.json
               }
             }
             description: |
@@ -585,6 +564,12 @@ baseUriParameters:
                         required: true
                         type: string
               /{id}:
+                type: {
+                  tool: {
+                  example: !include examples/webhook.json,
+                  schema: !include schemas/webhook.json
+                  }
+                }
                 uriParameters:
                   id:
                     type: string
@@ -634,7 +619,7 @@ baseUriParameters:
                     type: string
                   mount_point:
                     description: |
-                      The section of the url relitive to your project. For example: /p/your_project/{mount_point}
+                      The section of the url relative to your project. For example: /p/your_project/{mount_point}
                     example: git
                     type: string
                     required: true


[09/13] allura git commit: [#6797] remove unneeded 'member' type; rename 'tool' since its used for more than just top-level tool endpoints

Posted by he...@apache.org.
[#6797] remove unneeded 'member' type; rename 'tool' since its used for more than just top-level tool endpoints


Project: http://git-wip-us.apache.org/repos/asf/allura/repo
Commit: http://git-wip-us.apache.org/repos/asf/allura/commit/22a7a0b2
Tree: http://git-wip-us.apache.org/repos/asf/allura/tree/22a7a0b2
Diff: http://git-wip-us.apache.org/repos/asf/allura/diff/22a7a0b2

Branch: refs/heads/hs/6797
Commit: 22a7a0b258bf7dab38a61cffe38039cc1e87ca9d
Parents: 41bb5cb
Author: Dave Brondsema <da...@brondsema.net>
Authored: Thu Aug 13 16:30:30 2015 -0400
Committer: Heith Seewald <hs...@hsmb.local>
Committed: Fri Aug 14 09:35:29 2015 -0400

----------------------------------------------------------------------
 Allura/docs/api-rest/api.raml           | 48 ++++++++++++++--------------
 Allura/docs/api-rest/resourceTypes.yaml | 15 +++------
 2 files changed, 29 insertions(+), 34 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/allura/blob/22a7a0b2/Allura/docs/api-rest/api.raml
----------------------------------------------------------------------
diff --git a/Allura/docs/api-rest/api.raml b/Allura/docs/api-rest/api.raml
index f501679..9a55249 100755
--- a/Allura/docs/api-rest/api.raml
+++ b/Allura/docs/api-rest/api.raml
@@ -49,7 +49,7 @@ baseUriParameters:
           pattern: ([a-zA-Z]+)
 
       type: {
-          project: {
+        project: {
           schema: !include schemas/project.json,
           example: !include examples/project.json
           }
@@ -71,11 +71,11 @@ baseUriParameters:
         description: |
           Represents the **Wiki Tool**.
         type: {
-            tool: {
+          generic: {
             example: !include examples/wiki.json,
             schema: !include schemas/wiki.json
-            }
           }
+        }
 
         displayName: Wiki
         uriParameters:
@@ -87,7 +87,7 @@ baseUriParameters:
 
         /{title}:
           type: {
-              tool: {
+            generic: {
               example: !include examples/page.json,
               schema: !include schemas/page.json
               }
@@ -135,7 +135,7 @@ baseUriParameters:
         description: |
           Represents the **Ticket Tracker Tool**.
         type: {
-            tool: {
+          generic: {
             example: !include examples/tickets.json,
             schema: !include schemas/tickets.json
             }
@@ -251,9 +251,9 @@ baseUriParameters:
 
         /{ticketNumber}:
           type: {
-            tool: {
-            example: !include examples/ticket.json,
-            schema: !include schemas/ticket.json
+            generic: {
+              example: !include examples/ticket.json,
+              schema: !include schemas/ticket.json
             }
           }
           displayName: Ticket Number
@@ -319,7 +319,7 @@ baseUriParameters:
         description: |
           Represents the **Discussion Tool**.
         type: {
-          tool: {
+          generic: {
             schema: !include schemas/discussion.json,
             example: !include examples/discussion.json
             }
@@ -340,7 +340,7 @@ baseUriParameters:
           description: |
             Represents a forum within a Discussion tool.
           type: {
-            tool: {
+            generic: {
               # FIXME
               example: !include examples/page.json,
               schema: !include schemas/page.json
@@ -381,11 +381,11 @@ baseUriParameters:
 
       /{blog}:
         type: {
-            tool: {
+          generic: {
             example: !include examples/blog.json,
             schema: !include schemas/blog.json
-            }
           }
+        }
         description: |
           Represents the **Blog tool**
 
@@ -431,9 +431,9 @@ baseUriParameters:
         /{year}/{month}/{title}:
             description: Represents a blog post entry.
             type: {
-              tool: {
-              example: !include examples/blogPost.json,
-              schema: !include schemas/blogPost.json
+              generic: {
+                example: !include examples/blogPost.json,
+                schema: !include schemas/blogPost.json
               }
             }
             displayName: Blog Post
@@ -492,11 +492,11 @@ baseUriParameters:
         description: |
           Represents the External Link tool.
         type: {
-            tool: {
+          generic: {
             example: !include examples/link.json,
             schema: !include schemas/link.json
-            }
           }
+        }
 
         get:
           description: |
@@ -573,9 +573,9 @@ baseUriParameters:
                         type: string
               /{id}:
                 type: {
-                  tool: {
-                  example: !include examples/webhook.json,
-                  schema: !include schemas/webhook.json
+                  generic: {
+                    example: !include examples/webhook.json,
+                    schema: !include schemas/webhook.json
                   }
                 }
                 uriParameters:
@@ -653,7 +653,7 @@ baseUriParameters:
 
       Most often you'll use the /profile suffix to return user data.
     type: {
-      tool:{
+      generic: {
         example: !include examples/user.json,
         schema: !include schemas/user.json
       }
@@ -662,8 +662,8 @@ baseUriParameters:
       description: |
         A user profile
       type: {
-        tool:{
-        example: !include examples/userProfile.json,
-        schema: !include schemas/userProfile.json
+        generic: {
+          example: !include examples/userProfile.json,
+          schema: !include schemas/userProfile.json
         }
       }
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/allura/blob/22a7a0b2/Allura/docs/api-rest/resourceTypes.yaml
----------------------------------------------------------------------
diff --git a/Allura/docs/api-rest/resourceTypes.yaml b/Allura/docs/api-rest/resourceTypes.yaml
index 9a69e5a..76807d3 100755
--- a/Allura/docs/api-rest/resourceTypes.yaml
+++ b/Allura/docs/api-rest/resourceTypes.yaml
@@ -17,15 +17,10 @@
     type: base
     get:
       is: [ pageable, bearerAuth ]
-- member:
-      type: base
-      get?:
-      post?:
-      put?:
-      patch?:
-      delete?:
-- tool:
-    type: member
+- generic:
+    # this is really just a shorthand for us when we have a schema & example
+    # so we couldn't come up with a good name and picked something generic :)
+    type: base
     get:
       is: [ bearerAuth ]
       responses:
@@ -81,7 +76,7 @@
     get:
       is: [permissionTestable, bearerAuth]
 - project:
-    type: member
+    type: base
     get:
       responses:
         200:


[07/13] allura git commit: [#6797] apply security globally; put bearer token option in even though it doesn't do much; remove trait (although it might be a good option to bring back)

Posted by he...@apache.org.
[#6797] apply security globally; put bearer token option in even though it doesn't do much; remove trait (although it might be a good option to bring back)


Project: http://git-wip-us.apache.org/repos/asf/allura/repo
Commit: http://git-wip-us.apache.org/repos/asf/allura/commit/d899d684
Tree: http://git-wip-us.apache.org/repos/asf/allura/tree/d899d684
Diff: http://git-wip-us.apache.org/repos/asf/allura/diff/d899d684

Branch: refs/heads/hs/6797
Commit: d899d68423b1886bb6cdb3e946cab27d24d313b4
Parents: ff97a97
Author: Dave Brondsema <da...@brondsema.net>
Authored: Mon Aug 10 17:40:06 2015 -0400
Committer: Heith Seewald <hs...@hsmb.local>
Committed: Fri Aug 14 09:35:28 2015 -0400

----------------------------------------------------------------------
 Allura/docs/api-rest/api.raml             |  3 ++-
 Allura/docs/api-rest/resourceTypes.yaml   |  1 -
 Allura/docs/api-rest/securitySchemes.yaml | 25 +++++++++++++++++++++++--
 Allura/docs/api-rest/traits.yaml          |  8 --------
 4 files changed, 25 insertions(+), 12 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/allura/blob/d899d684/Allura/docs/api-rest/api.raml
----------------------------------------------------------------------
diff --git a/Allura/docs/api-rest/api.raml b/Allura/docs/api-rest/api.raml
index 749e321..6f040e7 100755
--- a/Allura/docs/api-rest/api.raml
+++ b/Allura/docs/api-rest/api.raml
@@ -3,6 +3,7 @@
 title: Apache Allura
 version: 1
 baseUri: https://{domain}/rest
+securedBy: [null, oauth_1_0, oauth_bearer_token]
 
 resourceTypes: !include resourceTypes.yaml
 traits: !include traits.yaml
@@ -15,6 +16,7 @@ baseUriParameters:
     default: "forge-allura.apache.org"
 
 
+
 /{neighborhood}:
     description: |
       Neighborhoods are groups of logically related projects, which have the same default options.
@@ -558,7 +560,6 @@ baseUriParameters:
                 schema: !include schemas/webhook.json
                 }
               }
-              is: [secured]
               description: |
                 This is to manage webhooks programatically. See the [Webhook docs](https://forge-allura.apache.org/p/allura/wiki/Webhooks/) for more information.
 

http://git-wip-us.apache.org/repos/asf/allura/blob/d899d684/Allura/docs/api-rest/resourceTypes.yaml
----------------------------------------------------------------------
diff --git a/Allura/docs/api-rest/resourceTypes.yaml b/Allura/docs/api-rest/resourceTypes.yaml
index 1f7b9f8..4bb176f 100755
--- a/Allura/docs/api-rest/resourceTypes.yaml
+++ b/Allura/docs/api-rest/resourceTypes.yaml
@@ -94,7 +94,6 @@
             application/json:
               schema: <<schema>>
 - permission:
-    securedBy: [null, oauth_1_0]
     description: |
       Checks if a given user has permissions.
     get:

http://git-wip-us.apache.org/repos/asf/allura/blob/d899d684/Allura/docs/api-rest/securitySchemes.yaml
----------------------------------------------------------------------
diff --git a/Allura/docs/api-rest/securitySchemes.yaml b/Allura/docs/api-rest/securitySchemes.yaml
index a7927cc..c4bdd06 100755
--- a/Allura/docs/api-rest/securitySchemes.yaml
+++ b/Allura/docs/api-rest/securitySchemes.yaml
@@ -4,5 +4,26 @@
     type: OAuth 1.0
     settings:
       requestTokenUri: https://forge-allura.apache.org/rest/oauth/request_token
-      authorizationUri: https://forge-allura.apache.org/rest/oauth/authorize
-      tokenCredentialsUri: https://forge-allura.apache.org/rest/oauth/access_token
\ No newline at end of file
+      authorizationUri: /rest/oauth/authorize
+      tokenCredentialsUri: /rest/oauth/access_token
+
+- oauth_bearer_token:
+    description: |
+        A bearer token (aka access token) may be generated at https://forge-allura.apache.org/auth/oauth/ for simple
+        authorization via URL parameter or HTTP header.
+    type: x-OAuth-Bearer-Token
+    describedBy:
+        headers:
+            Authorization:
+                description: |
+                   Used to send a bearer token.  Use either this or
+                   the "access_token" query string parameter.
+                type: string
+        queryParameters:
+            access_token:
+                description: |
+                   Used to send a bearer token.  Use either this or
+                   the "Authorization" header
+                type: string
+    settings:
+      authorizationUri: https://forge-allura.apache.org//auth/oauth/

http://git-wip-us.apache.org/repos/asf/allura/blob/d899d684/Allura/docs/api-rest/traits.yaml
----------------------------------------------------------------------
diff --git a/Allura/docs/api-rest/traits.yaml b/Allura/docs/api-rest/traits.yaml
index c1f47c5..40b39e3 100755
--- a/Allura/docs/api-rest/traits.yaml
+++ b/Allura/docs/api-rest/traits.yaml
@@ -35,14 +35,6 @@
     queryParameters:
       numPages:
         description: The number of pages to return
-- secured:
-    displayName: secured
-    headers:
-      Authorization:
-        description: The auth token for this request
-    responses:
-      401:
-        description: Unauthorized
 - rateLimited:
     queryParameters:
       numPages:


[03/13] allura git commit: [#6797] initial RAML, written by Heith

Posted by he...@apache.org.
http://git-wip-us.apache.org/repos/asf/allura/blob/459af1ba/Allura/docs/api-rest/schemas/tickets.json
----------------------------------------------------------------------
diff --git a/Allura/docs/api-rest/schemas/tickets.json b/Allura/docs/api-rest/schemas/tickets.json
new file mode 100755
index 0000000..6a68c2c
--- /dev/null
+++ b/Allura/docs/api-rest/schemas/tickets.json
@@ -0,0 +1,163 @@
+ {
+        "$schema": "http://json-schema.org/draft-04/schema#",
+        "id": "/",
+        "type": "object",
+        "properties": {
+          "tickets": {
+            "id": "tickets",
+            "type": "array",
+            "items": {
+              "id": "99",
+              "type": "object",
+              "properties": {
+                "summary": {
+                  "id": "summary",
+                  "type": "string"
+                },
+                "ticket_num": {
+                  "id": "ticket_num",
+                  "type": "integer"
+                }
+              }
+            }
+          },
+          "count": {
+            "id": "count",
+            "type": "integer"
+          },
+          "milestones": {
+            "id": "milestones",
+            "type": "array",
+            "items": {
+              "id": "7",
+              "type": "object",
+              "properties": {
+                "due_date": {
+                  "id": "due_date",
+                  "type": "string"
+                },
+                "complete": {
+                  "id": "complete",
+                  "type": "boolean"
+                },
+                "closed": {
+                  "id": "closed",
+                  "type": "integer"
+                },
+                "default": {
+                  "id": "default",
+                  "type": ""
+                },
+                "description": {
+                  "id": "description",
+                  "type": "string"
+                },
+                "total": {
+                  "id": "total",
+                  "type": "integer"
+                },
+                "name": {
+                  "id": "name",
+                  "type": "string"
+                }
+              }
+            }
+          },
+          "tracker_config": {
+            "id": "tracker_config",
+            "type": "object",
+            "properties": {
+              "_id": {
+                "id": "_id",
+                "type": "string"
+              },
+              "options": {
+                "id": "options",
+                "type": "object",
+                "properties": {
+                  "ordinal": {
+                    "id": "ordinal",
+                    "type": "integer"
+                  },
+                  "TicketHelpNew": {
+                    "id": "TicketHelpNew",
+                    "type": "string"
+                  },
+                  "mount_point": {
+                    "id": "mount_point",
+                    "type": "string"
+                  },
+                  "TicketMonitoringType": {
+                    "id": "TicketMonitoringType",
+                    "type": "string"
+                  },
+                  "EnableVoting": {
+                    "id": "EnableVoting",
+                    "type": "boolean"
+                  },
+                  "TicketHelpSearch": {
+                    "id": "TicketHelpSearch",
+                    "type": "string"
+                  },
+                  "TicketMonitoringEmail": {
+                    "id": "TicketMonitoringEmail",
+                    "type": "string"
+                  },
+                  "import_id": {
+                    "id": "import_id",
+                    "type": "object",
+                    "properties": {
+                      "source": {
+                        "id": "source",
+                        "type": "string"
+                      },
+                      "app_config_id": {
+                        "id": "app_config_id",
+                        "type": "string"
+                      }
+                    }
+                  },
+                  "mount_label": {
+                    "id": "mount_label",
+                    "type": "string"
+                  }
+                }
+              }
+            }
+          },
+          "limit": {
+            "id": "limit",
+            "type": "integer"
+          },
+          "saved_bins": {
+            "id": "saved_bins",
+            "type": "array",
+            "items": {
+              "id": "4",
+              "type": "object",
+              "properties": {
+                "sort": {
+                  "id": "sort",
+                  "type": "string"
+                },
+                "_id": {
+                  "id": "_id",
+                  "type": "string"
+                },
+                "terms": {
+                  "id": "terms",
+                  "type": "string"
+                },
+                "summary": {
+                  "id": "summary",
+                  "type": "string"
+                }
+              }
+            }
+          },
+          "page": {
+            "id": "page",
+            "type": "integer"
+          }
+        }
+      }

http://git-wip-us.apache.org/repos/asf/allura/blob/459af1ba/Allura/docs/api-rest/schemas/user.json
----------------------------------------------------------------------
diff --git a/Allura/docs/api-rest/schemas/user.json b/Allura/docs/api-rest/schemas/user.json
new file mode 100755
index 0000000..77d0591
--- /dev/null
+++ b/Allura/docs/api-rest/schemas/user.json
@@ -0,0 +1,196 @@
+{
+  "$schema": "http://json-schema.org/draft-04/schema#",
+  "id": "/",
+  "title": "User.",
+  "description": "A user's first and last name.",
+  "type": "object",
+  "properties": {
+    "status": {
+      "id": "status",
+      "type": "string"
+    },
+    "preferred_support_tool": {
+      "id": "preferred_support_tool",
+      "type": "string"
+    },
+    "profile_api_url": {
+      "id": "profile_api_url",
+      "type": "string"
+    },
+    "preferred_support_url": {
+      "id": "preferred_support_url",
+      "type": "string"
+    },
+    "labels": {
+      "id": "labels",
+      "type": "array",
+      "items": {}
+    },
+    "private": {
+      "id": "private",
+      "type": "boolean"
+    },
+    "creation_date": {
+      "id": "creation_date",
+      "type": "string"
+    },
+    "socialnetworks": {
+      "id": "socialnetworks",
+      "type": "array",
+      "items": {
+        "id": "1",
+        "type": "object",
+        "properties": {
+          "accounturl": {
+            "id": "accounturl",
+            "type": "string"
+          },
+          "socialnetwork": {
+            "id": "socialnetwork",
+            "type": "string"
+          }
+        }
+      }
+    },
+    "tools": {
+      "id": "tools",
+      "type": "array",
+      "items": {
+        "id": "5",
+        "type": "object",
+        "properties": {
+          "mount_point": {
+            "id": "mount_point",
+            "type": "string"
+          },
+          "name": {
+            "id": "name",
+            "type": "string"
+          },
+          "label": {
+            "id": "label",
+            "type": "string"
+          }
+        }
+      }
+    },
+    "categories": {
+      "id": "categories",
+      "type": "object",
+      "properties": {
+        "developmentstatus": {
+          "id": "developmentstatus",
+          "type": "array",
+          "items": {}
+        },
+        "environment": {
+          "id": "environment",
+          "type": "array",
+          "items": {}
+        },
+        "language": {
+          "id": "language",
+          "type": "array",
+          "items": {}
+        },
+        "license": {
+          "id": "license",
+          "type": "array",
+          "items": {}
+        },
+        "database": {
+          "id": "database",
+          "type": "array",
+          "items": {}
+        },
+        "topic": {
+          "id": "topic",
+          "type": "array",
+          "items": {}
+        },
+        "audience": {
+          "id": "audience",
+          "type": "array",
+          "items": {}
+        },
+        "translation": {
+          "id": "translation",
+          "type": "array",
+          "items": {}
+        },
+        "os": {
+          "id": "os",
+          "type": "array",
+          "items": {}
+        }
+      }
+    },
+    "_id": {
+      "id": "_id",
+      "type": "string"
+    },
+    "name": {
+      "id": "name",
+      "type": "string"
+    },
+    "url": {
+      "id": "url",
+      "type": "string"
+    },
+    "icon_url": {
+      "id": "icon_url",
+      "type": "null"
+    },
+    "video_url": {
+      "id": "video_url",
+      "type": "string"
+    },
+    "screenshots": {
+      "id": "screenshots",
+      "type": "array",
+      "items": {}
+    },
+    "summary": {
+      "id": "summary",
+      "type": "string"
+    },
+    "short_description": {
+      "id": "short_description",
+      "type": "null"
+    },
+    "moved_to_url": {
+      "id": "moved_to_url",
+      "type": "string"
+    },
+    "shortname": {
+      "id": "shortname",
+      "type": "string"
+    },
+    "developers": {
+      "id": "developers",
+      "type": "array",
+      "items": {
+        "id": "0",
+        "type": "object",
+        "properties": {
+          "url": {
+            "id": "url",
+            "type": "string"
+          },
+          "username": {
+            "id": "username",
+            "type": "string"
+          },
+          "name": {
+            "id": "name",
+            "type": "string"
+          }
+        }
+      }
+    },
+    "external_homepage": {
+      "id": "external_homepage",
+      "type": "string"
+    }
+  }
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/allura/blob/459af1ba/Allura/docs/api-rest/schemas/userProfile.json
----------------------------------------------------------------------
diff --git a/Allura/docs/api-rest/schemas/userProfile.json b/Allura/docs/api-rest/schemas/userProfile.json
new file mode 100755
index 0000000..a2fde7b
--- /dev/null
+++ b/Allura/docs/api-rest/schemas/userProfile.json
@@ -0,0 +1,266 @@
+{
+  "$schema": "http://json-schema.org/draft-04/schema#",
+  "id": "/",
+  "type": "object",
+  "title": "User Profile.",
+  "name": "/",
+  "properties": {
+    "username": {
+      "id": "username",
+      "type": "string",
+      "name": "username"
+    },
+    "name": {
+      "id": "name",
+      "type": "string",
+      "title": "Full Name.",
+      "description": "A user's first and last name.",
+      "name": "name"
+    },
+    "localization": {
+      "id": "localization",
+      "type": "object",
+      "description": "General Location.",
+      "name": "localization",
+      "properties": {
+        "city": {
+          "id": "city",
+          "type": "string",
+          "name": "city"
+        },
+        "country": {
+          "id": "country",
+          "type": "string",
+          "name": "country"
+        }
+      }
+    },
+    "skills": {
+      "id": "skills",
+      "type": "array",
+      "title": "Skills.",
+      "description": "A list of skills and associated skill levels.",
+      "name": "skills",
+      "items": {
+        "id": "0",
+        "type": "object",
+        "title": "0 schema.",
+        "name": "0",
+        "properties": {
+          "comment": {
+            "id": "comment",
+            "type": "string",
+            "title": "Comment.",
+            "description": "Additional comments about a given skill.",
+            "name": "comment"
+          },
+          "skill": {
+            "id": "skill",
+            "type": "object",
+            "title": "Skill schema.",
+            "name": "skill",
+            "properties": {
+              "fullpath": {
+                "id": "fullpath",
+                "type": "string",
+                "title": "Full Path.",
+                "description": "Category hierarchy.",
+                "name": "fullpath"
+              },
+              "fullname": {
+                "id": "fullname",
+                "type": "string",
+                "title": "Fullname schema.",
+                "description": "Name of category.",
+                "name": "fullname"
+              },
+              "shortname": {
+                "id": "shortname",
+                "type": "string",
+                "title": "Shortname.",
+                "description": "Short form of category.",
+                "name": "shortname"
+              },
+              "id": {
+                "id": "id",
+                "type": "integer",
+                "title": "Id.",
+                "description": "Unique identifier",
+                "name": "id"
+              }
+            }
+          },
+          "level": {
+            "id": "level",
+            "type": "string",
+             "enum": ["low", "medium", "high"],
+            "title": "Skill Level.",
+            "description": "low, medium or high",
+            "name": "level"
+          }
+        }
+      }
+    },
+    "webpages": {
+      "id": "webpages",
+      "type": "array",
+      "title": "Webpages schema.",
+      "description": "A list of URL strings associated with a user.",
+      "name": "webpages",
+      "items": {}
+    },
+    "joined": {
+      "id": "joined",
+      "type": "string",
+      "title": "Joined schema.",
+      "description": "The date a user signed up.",
+      "name": "joined"
+    },
+    "socialnetworks": {
+      "id": "socialnetworks",
+      "type": "array",
+      "title": "Social Networks.",
+      "description": "A list of social networks URLs.",
+      "name": "socialnetworks",
+      "items": {
+        "type": "object",
+        "properties": {
+          "accounturl": {
+            "id": "accounturl",
+            "type": "string",
+            "title": "Account Url.",
+            "description": "URL to the associated user account on the social network site.",
+            "name": "accounturl"
+          },
+          "socialnetwork": {
+            "id": "socialnetwork",
+            "type": "string",
+            "title": "Socialnetwork schema.",
+            "description": "Name of the social networking site.",
+            "name": "socialnetwork"
+          }
+        }
+      }
+    },
+    "telnumbers": {
+      "id": "telnumbers",
+      "type": "array",
+      "title": "Telnumbers schema.",
+      "description": "A list of phone numbers as strings.",
+      "name": "telnumbers",
+      "items": {}
+    },
+    "sex": {
+      "id": "sex",
+      "type": "string",
+      "name": "sex"
+    },
+    "availability": {
+      "id": "availability",
+      "type": "array",
+      "title": "Availability.",
+      "description": "Indicates the availability of a user.",
+      "name": "availability",
+      "items": {
+        "type": "object",
+        "description": "An explanation about the puropose of this instance described by this schema.",
+        "properties": {
+          "start_time": {
+            "id": "start_time",
+            "type": "object",
+            "title": "Start Time.",
+            "description": "The start of a user's availability.",
+            "name": "start_time",
+            "properties": {
+              "h": {
+                "id": "h",
+                "type": "integer",
+                "title": "Hour.",
+                "name": "h"
+              },
+              "m": {
+                "id": "m",
+                "type": "integer",
+                "title": "Minute.",
+                "name": "m"
+              }
+            }
+          },
+          "week_day": {
+            "id": "week_day",
+            "type": "string",
+            "title": "Week Day.",
+            "description": "Day of week.",
+            "name": "week_day"
+          },
+          "end_time": {
+            "id": "end_time",
+            "type": "object",
+            "title": "End Time.",
+            "description": "The end of a user's availability.",
+            "name": "end_time",
+            "properties": {
+              "h": {
+                "id": "h",
+                "type": "integer",
+                "title": "Hour.",
+                "name": "h"
+              },
+              "m": {
+                "id": "m",
+                "type": "integer",
+                "title": "Minute.",
+                "name": "m"
+              }
+            }
+          }
+        }
+      }
+    },
+    "projects": {
+      "id": "projects",
+      "type": "array",
+      "title": "Projects.",
+      "description": "A list of projects accociated with a user.",
+      "name": "projects",
+      "items": {
+        "type": "object",
+        "description": "Apache Allura project.",
+        "properties": {
+          "url": {
+            "id": "url",
+            "type": "string",
+            "title": "Project Url.",
+            "name": "url"
+          },
+          "last_updated": {
+            "id": "last_updated",
+            "type": "string",
+            "title": "Last Updated.",
+            "description": "string formatted timestamp.",
+            "name": "last_updated"
+          },
+          "name": {
+            "id": "name",
+            "type": "string",
+            "title": "Name.",
+            "name": "name"
+          },
+          "summary": {
+            "id": "summary",
+            "type": "string",
+            "title": "Project Summary.",
+            "name": "summary"
+          }
+        }
+      }
+    },
+    "skypeaccount": {
+      "id": "skypeaccount",
+      "type": ["null", "string"],
+      "title": "Skype Account.",
+      "description": "Skype account username.",
+      "name": "skypeaccount"
+    }
+  }
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/allura/blob/459af1ba/Allura/docs/api-rest/schemas/webhook.json
----------------------------------------------------------------------
diff --git a/Allura/docs/api-rest/schemas/webhook.json b/Allura/docs/api-rest/schemas/webhook.json
new file mode 100755
index 0000000..a855903
--- /dev/null
+++ b/Allura/docs/api-rest/schemas/webhook.json
@@ -0,0 +1,34 @@
+{
+  "$schema": "http://json-schema.org/draft-04/schema#",
+  "id": "http://jsonschema.net",
+  "type": "object",
+  "properties": {
+    "hook_url": {
+      "id": "http://jsonschema.net/hook_url",
+      "type": "string"
+    },
+    "mod_date": {
+      "id": "http://jsonschema.net/mod_date",
+      "type": "string"
+    },
+    "url": {
+      "id": "http://jsonschema.net/url",
+      "type": "string"
+    },
+    "_id": {
+      "id": "http://jsonschema.net/_id",
+      "type": "string"
+    },
+    "type": {
+      "id": "http://jsonschema.net/type",
+      "type": "string"
+    }
+  },
+  "required": [
+    "hook_url",
+    "mod_date",
+    "url",
+    "_id",
+    "type"
+  ]
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/allura/blob/459af1ba/Allura/docs/api-rest/schemas/webhooks.json
----------------------------------------------------------------------
diff --git a/Allura/docs/api-rest/schemas/webhooks.json b/Allura/docs/api-rest/schemas/webhooks.json
new file mode 100755
index 0000000..4c10e81
--- /dev/null
+++ b/Allura/docs/api-rest/schemas/webhooks.json
@@ -0,0 +1,57 @@
+{
+  "$schema": "http://json-schema.org/draft-04/schema#",
+  "id": "/",
+  "type": "object",
+  "properties": {
+    "webhooks": {
+      "id": "webhooks",
+      "type": "array",
+      "items": {
+        "id": "1",
+        "type": "object",
+        "properties": {
+          "url": {
+            "id": "url",
+            "type": "string"
+          },
+          "mod_date": {
+            "id": "mod_date",
+            "type": "string"
+          },
+          "_id": {
+            "id": "_id",
+            "type": "string"
+          },
+          "type": {
+            "id": "type",
+            "type": "string"
+          },
+          "hook_url": {
+            "id": "hook_url",
+            "type": "string"
+          }
+        }
+      }
+    },
+    "limits": {
+      "id": "limits",
+      "type": "object",
+      "properties": {
+        "repo-push": {
+          "id": "repo-push",
+          "type": "object",
+          "properties": {
+            "max": {
+              "id": "max",
+              "type": "integer"
+            },
+            "used": {
+              "id": "used",
+              "type": "integer"
+            }
+          }
+        }
+      }
+    }
+  }
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/allura/blob/459af1ba/Allura/docs/api-rest/schemas/wiki.json
----------------------------------------------------------------------
diff --git a/Allura/docs/api-rest/schemas/wiki.json b/Allura/docs/api-rest/schemas/wiki.json
new file mode 100755
index 0000000..7859527
--- /dev/null
+++ b/Allura/docs/api-rest/schemas/wiki.json
@@ -0,0 +1,16 @@
+{
+    "$schema": "http://json-schema.org/draft-04/schema",
+    "type": "object",
+    "id": "#",
+    "properties": {
+        "pages": {
+            "items": {
+                "type": "string",
+                "id": "0"
+            },
+            "type": "array",
+            "id": "pages"
+        }
+    }
+}
+	
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/allura/blob/459af1ba/Allura/docs/api-rest/securitySchemes.yaml
----------------------------------------------------------------------
diff --git a/Allura/docs/api-rest/securitySchemes.yaml b/Allura/docs/api-rest/securitySchemes.yaml
new file mode 100755
index 0000000..a7927cc
--- /dev/null
+++ b/Allura/docs/api-rest/securitySchemes.yaml
@@ -0,0 +1,8 @@
+- oauth_1_0:
+    description: |
+        Apache Allura supports OAuth 1.0 for authenticating API requests.
+    type: OAuth 1.0
+    settings:
+      requestTokenUri: https://forge-allura.apache.org/rest/oauth/request_token
+      authorizationUri: https://forge-allura.apache.org/rest/oauth/authorize
+      tokenCredentialsUri: https://forge-allura.apache.org/rest/oauth/access_token
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/allura/blob/459af1ba/Allura/docs/api-rest/traits.yaml
----------------------------------------------------------------------
diff --git a/Allura/docs/api-rest/traits.yaml b/Allura/docs/api-rest/traits.yaml
new file mode 100755
index 0000000..d483810
--- /dev/null
+++ b/Allura/docs/api-rest/traits.yaml
@@ -0,0 +1,80 @@
+- searchable:
+    queryParameters:
+      query:
+        description: |
+          JSON array [{"field1","value1","operator1"},{"field2","value2","operator2"},...,{"fieldN","valueN","operatorN"}] <<description>>
+        example: |
+          <<example>>
+- orderable:
+    queryParameters:
+      orderBy:
+        description: |
+          Order by field: <<fieldsList>>
+        type: string
+        required: false
+      order:
+        description: Order
+        enum: [desc, asc]
+        default: desc
+        required: false
+- pageable:
+    queryParameters:
+      page:
+        description: Skip over a number of elements by specifying an offset value for the query
+        type: integer
+        required: false
+        example: 2
+        default: 0
+      limit:
+        description: Limit the number of elements on the response
+        type: integer
+        required: false
+        example: 5
+        default: 10
+- paged:
+    queryParameters:
+      numPages:
+        description: The number of pages to return
+- secured:
+    displayName: secured
+    headers:
+      Authorization:
+        description: The auth token for this request
+    responses:
+      401:
+        description: Unauthorized
+- rateLimited:
+    queryParameters:
+      numPages:
+        description: The number of pages to return, not to exceed <<maxPages>>
+- permissionTestable:
+    description: |
+      **Endpoints**
+      Permissions can be checked at three levels: 
+      1. **Neighborhood:** `/rest/p/has_access`
+      2. **Project:** `/rest/p/project_name/has_access`
+      3. **Tool:** `/rest/p/project_name/mount_point/has_access`
+      
+      --- 
+      
+      It is only available to users that have 'admin' permission for corresponding neighborhood/project/tool. It requires user and perm parameters and will return JSON dict with result key, which contains boolean value, indicating if given user has perm permission to the neighborhood/project/tool.
+      
+      E.g.:
+      **GET** `/rest/p/test/wiki/has_access?user=admin1&perm=create`
+      *returns* { result: true }
+      **GET** `/rest/p/test/wiki/has_access?user=user01&perm=create`
+      *returns* { result: false }
+
+    queryParameters:
+      user:
+        type: string
+        example: heiths
+        required: true
+        description: The username to check
+      perm:
+        displayName: Permission
+        required: true
+        type: string
+        example: create
+        default: read
+        enum: ["read", "admin", "create", "update"]
\ No newline at end of file