cyverse-de/permissions

Name: permissions

Owner: CyVerse Discovery Environment

Description: null

Created: 2016-07-18 21:31:39.0

Updated: 2016-07-18 21:32:00.0

Pushed: 2017-08-08 21:44:31.0

Homepage: null

Size: 3936

Language: Go

GitHub Committers

UserMost Recent Commit# Commits

Other Committers

UserEmailMost Recent Commit# Commits

README

Permissions Service

This service manages permissions for the Discovery environment.

Implementation Details

This service is generated using go-swagger.

Adding a New Endpoint
  1. Update swagger.yml
  2. Run swagger generate server -A permissions -f swagger.yml
  3. Update restapi/configure_permissions.go to add the service implementation

Example Endpoint Implementation

swagger.yml
definitions
source_type_out:
type: object
required:
  - id
  - name
properties:
  id:
    type: string
    minLength: 36
    maxLength: 36
  name:
    type: string
    minLength: 1
  description:
    type: string
source_types_out:
type: object
required:
  - resource_types
properties:
  resource_types:
    type: array
    items:
      $ref: "#/definitions/resource_type_out"
paths
esource_types:
get:
  tags:
    - resource_types
  responses:
    200:
      description: resource type listing
      schema:
        $ref: "#/definitions/resource_types_out"
    500:
      description: resource type listing
      schema:
        $ref: "#/definitions/error_out"
Generating the Code
agger generate server -A permissions -f swagger.yml
/04/18 13:52:14 building a plan for generation
/04/18 13:52:14 planning definitions
/04/18 13:52:15 planning operations
/04/18 13:52:15 grouping operations into packages
/04/18 13:52:15 planning meta data and facades
/04/18 13:52:15 rendering 4 models
/04/18 13:52:15 rendered model template: resource_type_out
/04/18 13:52:15 rendered model template: resource_types_out
/04/18 13:52:15 rendered model template: service_info
/04/18 13:52:15 rendered model template: error_out
/04/18 13:52:15 rendered handler template: resource_types.GetResourceTypes
/04/18 13:52:16 generated handler resource_types.GetResourceTypes
/04/18 13:52:16 rendered responses template: resource_types.GetResourceTypesResponses
/04/18 13:52:16 generated responses resource_types.GetResourceTypesResponses
/04/18 13:52:16 no parameters for operation resource_types.GetResourceTypes
/04/18 13:52:16 rendered handler template: status.Get
/04/18 13:52:16 generated handler status.Get
/04/18 13:52:16 rendered responses template: status.GetResponses
/04/18 13:52:16 generated responses status.GetResponses
/04/18 13:52:16 no parameters for operation status.Get
/04/18 13:52:16 rendered embedded Swagger JSON template: restapi.Permissions
/04/18 13:52:17 rendered builder template: operations.Permissions
/04/18 13:52:32 rendered server template: restapi.Server
/04/18 13:52:32 skipped (already exists) configure api template: operations.ConfigurePermissions
/04/18 13:52:32 rendered doc template: operations.Permissions
/04/18 13:52:32 rendered main template: server.Permissions
Updates to restapi/configure_permissions.go

Update the imports to include the new operation:

rt (
 ...
ermissions/restapi/operations/resource_types"
 ...

Add the handler definition to configureAPI:

i.ResourceTypesGetResourceTypesHandler =
resource_types.GetResourceTypesHandlerFunc(impl.BuildResourceTypesGetHandler(db))
Endpoint Implementation Files

restapi/impl/get_resource_types.go:

age impl

rt (
atabase/sql"
ithub.com/go-swagger/go-swagger/httpkit/middleware"
ermissions/models"
rmsdb "permissions/restapi/impl/db"
ermissions/restapi/operations/resource_types"


 buildResponse(db *sql.DB) (*models.ResourceTypesOut, error) {

 Get the list of resource types.
sourceTypes, err := permsdb.ListResourceTypes(db)
 err != nil {
return nil, err


turn &models.ResourceTypesOut{resourceTypes}, nil


 BuildResourceTypesGetHandler(db *sql.DB) func() middleware.Responder {

 Return the handler function.
turn func() middleware.Responder {
response, err := buildResponse(db)
if err != nil {
  reason := err.Error()
  return resource_types.NewGetResourceTypesInternalServerError().WithPayload(&models.ErrorOut{&reason})
}
return resource_types.NewGetResourceTypesOK().WithPayload(response)


restapi/impl/db/resource_types.go:

age db

rt (
atabase/sql"
ermissions/models"


 ListResourceTypes(db *sql.DB) ([]*models.ResourceTypeOut, error) {

 Query the database.
ery := "SELECT id, name, description FROM resource_types"
ws, err := db.Query(query)
 err != nil {
return nil, err

fer rows.Close()

 Build the list of resource types.
r resourceTypes []*models.ResourceTypeOut
r rows.Next() {
var resourceType models.ResourceTypeOut
if err := rows.Scan(&resourceType.ID, &resourceType.Name, &resourceType.Description); err != nil {
  return nil, err
}
resourceTypes = append(resourceTypes, &resourceType)


 Check for any uncaught errors.
 err := rows.Err(); err != nil {
return resourceTypes, err


turn resourceTypes, nil


This work is supported by the National Institutes of Health's National Center for Advancing Translational Sciences, Grant Number U24TR002306. This work is solely the responsibility of the creators and does not necessarily represent the official views of the National Institutes of Health.