Advertisement
Guest User

Untitled

a guest
Oct 28th, 2016
97
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.68 KB | None | 0 0
  1. package main
  2.  
  3. import (
  4. "context"
  5. "errors"
  6. "fmt"
  7.  
  8. "code.cloudfoundry.org/lager"
  9. "github.com/cloudfoundry-community/go-cfclient"
  10. "github.com/pivotal-cf/brokerapi"
  11. uaa "github.com/pivotalservices/go-uaac"
  12. )
  13.  
  14. type User struct {
  15. ID string `json:"id,omitempty"`
  16. UserName string `json:"userName,omitempty"`
  17. Password string `json:"password,omitempty"`
  18. Active bool `json:"active,omitempty"`
  19. Zone string `json:"zone,omitempty"`
  20. }
  21.  
  22. type DeployerAccountBroker struct {
  23. uaaClient uaa.Client
  24. cfClient cfclient.Client
  25. logger lager.Logger
  26. }
  27.  
  28. func (b *DeployerAccountBroker) Services(context context.Context) []brokerapi.Service {
  29. return []brokerapi.Service{{
  30. ID: "964bd86d-72fa-4852-957f-e4cd802de34b",
  31. Name: "deployer-account",
  32. Plans: []brokerapi.ServicePlan{{
  33. ID: "074e652b-b77b-4ac3-8d5b-52144486b1a3",
  34. Name: "deployer-account",
  35. }},
  36. }}
  37. }
  38.  
  39. func (b *DeployerAccountBroker) Provision(context context.Context, instanceID string, details brokerapi.ProvisionDetails, asyncAllowed bool) (brokerapi.ProvisionedServiceSpec, error) {
  40. userID, err := b.provisionUser(instanceID)
  41. if err != nil {
  42. return brokerapi.ProvisionedServiceSpec{}, err
  43. }
  44.  
  45. err = b.setRole(instanceID, userID)
  46. if err != nil {
  47. return brokerapi.ProvisionedServiceSpec{}, err
  48. }
  49.  
  50. return brokerapi.ProvisionedServiceSpec{IsAsync: asyncAllowed}, nil
  51. }
  52.  
  53. func (b *DeployerAccountBroker) provisionUser(userID string) (string, error) {
  54. b.logger.Info("create-user", lager.Data{"user": "user"})
  55. req := b.uaaClient.NewRequest("PUT", "/Users")
  56. user := User{
  57. UserName: userID,
  58. Password: "password",
  59. Zone: "zone",
  60. }
  61. req.SetPayload(user)
  62. err := b.uaaClient.ExecuteAndUnmarshall(req, &user)
  63. if err != nil {
  64. return "", err
  65. }
  66. return user.ID, nil
  67. }
  68.  
  69. func (b *DeployerAccountBroker) deprovisionUser(userID string) error {
  70. b.logger.Info("create-user", lager.Data{"user": "user"})
  71. req := b.uaaClient.NewRequest("PATCH", fmt.Sprintf("/Users/%s", userID))
  72. user := User{
  73. ID: userID,
  74. Active: false,
  75. }
  76. req.SetPayload(user)
  77. _, err := b.uaaClient.ExecuteRequest(req)
  78. return err
  79. }
  80.  
  81. func (b *DeployerAccountBroker) setRole(instanceID, userID string) error {
  82. b.logger.Info("set-role", lager.Data{"id": userID})
  83. req := b.cfClient.NewRequest("PUT", fmt.Sprintf("/v2/spaces/%s/developers/%s", instanceID, userID))
  84. resp, err := b.cfClient.DoRequest(req)
  85. if err != nil {
  86. return err
  87. }
  88. if resp.StatusCode != 201 {
  89. return fmt.Errorf("Expected status 201; got: %d", resp.StatusCode)
  90. }
  91. return nil
  92. }
  93.  
  94. func (b *DeployerAccountBroker) Deprovision(context context.Context, instanceID string, details brokerapi.DeprovisionDetails, asyncAllowed bool) (brokerapi.DeprovisionServiceSpec, error) {
  95. err := b.deprovisionUser(instanceID)
  96. if err != nil {
  97. return brokerapi.DeprovisionServiceSpec{}, err
  98. }
  99. return brokerapi.DeprovisionServiceSpec{IsAsync: asyncAllowed}, nil
  100. }
  101.  
  102. func (b *DeployerAccountBroker) Bind(context context.Context, instanceID, bindingID string, details brokerapi.BindDetails) (brokerapi.Binding, error) {
  103. return brokerapi.Binding{
  104. Credentials: map[string]string{
  105. "username": instanceID,
  106. "password": "password",
  107. },
  108. }, nil
  109. }
  110.  
  111. func (b *DeployerAccountBroker) Unbind(context context.Context, instanceID, bindingID string, details brokerapi.UnbindDetails) error {
  112. return nil
  113. }
  114.  
  115. func (b *DeployerAccountBroker) Update(context context.Context, instanceID string, details brokerapi.UpdateDetails, asyncAllowed bool) (brokerapi.UpdateServiceSpec, error) {
  116. return brokerapi.UpdateServiceSpec{}, errors.New("Broker does not support update")
  117. }
  118.  
  119. func (b *DeployerAccountBroker) LastOperation(context context.Context, instanceID, operationData string) (brokerapi.LastOperation, error) {
  120. return brokerapi.LastOperation{}, errors.New("TODO")
  121. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement