Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat: Authorizations API #96

Merged
merged 11 commits into from
Apr 24, 2020
5 changes: 4 additions & 1 deletion CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,8 @@
## 1.1.0
### Features
1. [#96](https://github.com/influxdata/influxdb-client-go/pull/96) Authorization API

## 1.0.0 [2020-04-01]

### Core

- initial release of new client version
Expand Down
150 changes: 150 additions & 0 deletions api/authorizations.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,150 @@
package api

import (
"context"
"github.com/influxdata/influxdb-client-go/domain"
ihttp "github.com/influxdata/influxdb-client-go/internal/http"
)

// AuthorizationsApi provides methods for organizing Authorization in a InfluxDB server
type AuthorizationsApi interface {
// GetAuthorizations returns all authorizations
GetAuthorizations(ctx context.Context) (*[]domain.Authorization, error)
// FindAuthorizationsByUserName returns all authorizations for given userName
FindAuthorizationsByUserName(ctx context.Context, userName string) (*[]domain.Authorization, error)
// FindAuthorizationsByUserId returns all authorizations for given userID
FindAuthorizationsByUserId(ctx context.Context, userId string) (*[]domain.Authorization, error)
// FindAuthorizationsByOrgName returns all authorizations for given organization name
FindAuthorizationsByOrgName(ctx context.Context, orgName string) (*[]domain.Authorization, error)
// FindAuthorizationsByUserId returns all authorizations for given organization id
FindAuthorizationsByOrgId(ctx context.Context, orgId string) (*[]domain.Authorization, error)
// CreateAuthorization creates new authorization
CreateAuthorization(ctx context.Context, authorization *domain.Authorization) (*domain.Authorization, error)
// CreateAuthorizationWithOrgId creates new authorization with given permissions scoped to given orgId
CreateAuthorizationWithOrgId(ctx context.Context, orgId string, permissions []domain.Permission) (*domain.Authorization, error)
// UpdateAuthorizationStatus updates status of authorization with authId
UpdateAuthorizationStatus(ctx context.Context, authId string, status domain.AuthorizationUpdateRequestStatus) (*domain.Authorization, error)
// DeleteAuthorization deletes authorization with authId
DeleteAuthorization(ctx context.Context, authId string) error
}

type authorizationsApiImpl struct {
apiClient *domain.ClientWithResponses
}

func NewAuthorizationApi(service ihttp.Service) AuthorizationsApi {

apiClient := domain.NewClientWithResponses(service)
return &authorizationsApiImpl{
apiClient: apiClient,
}
}

func (a *authorizationsApiImpl) GetAuthorizations(ctx context.Context) (*[]domain.Authorization, error) {
authQuery := &domain.GetAuthorizationsParams{}
auths, err := a.listAuthorizations(ctx, authQuery)
if err != nil {
return nil, err
}
return auths.Authorizations, nil
}

func (a *authorizationsApiImpl) FindAuthorizationsByUserName(ctx context.Context, userName string) (*[]domain.Authorization, error) {
authQuery := &domain.GetAuthorizationsParams{User: &userName}
auths, err := a.listAuthorizations(ctx, authQuery)
if err != nil {
return nil, err
}
return auths.Authorizations, nil
}

func (a *authorizationsApiImpl) FindAuthorizationsByUserId(ctx context.Context, userId string) (*[]domain.Authorization, error) {
authQuery := &domain.GetAuthorizationsParams{UserID: &userId}
auths, err := a.listAuthorizations(ctx, authQuery)
if err != nil {
return nil, err
}
return auths.Authorizations, nil
}

func (a *authorizationsApiImpl) FindAuthorizationsByOrgName(ctx context.Context, orgName string) (*[]domain.Authorization, error) {
authQuery := &domain.GetAuthorizationsParams{Org: &orgName}
auths, err := a.listAuthorizations(ctx, authQuery)
if err != nil {
return nil, err
}
return auths.Authorizations, nil
}

func (a *authorizationsApiImpl) FindAuthorizationsByOrgId(ctx context.Context, orgId string) (*[]domain.Authorization, error) {
authQuery := &domain.GetAuthorizationsParams{OrgID: &orgId}
auths, err := a.listAuthorizations(ctx, authQuery)
if err != nil {
return nil, err
}
return auths.Authorizations, nil
}

func (a *authorizationsApiImpl) listAuthorizations(ctx context.Context, query *domain.GetAuthorizationsParams) (*domain.Authorizations, error) {
if query == nil {
query = &domain.GetAuthorizationsParams{}
}
response, err := a.apiClient.GetAuthorizationsWithResponse(ctx, query)
if err != nil {
return nil, err
}
if response.JSONDefault != nil {
return nil, domain.DomainErrorToError(response.JSONDefault, response.StatusCode())
}
return response.JSON200, nil
}

func (a *authorizationsApiImpl) CreateAuthorization(ctx context.Context, authorization *domain.Authorization) (*domain.Authorization, error) {
params := &domain.PostAuthorizationsParams{}
response, err := a.apiClient.PostAuthorizationsWithResponse(ctx, params, domain.PostAuthorizationsJSONRequestBody(*authorization))
if err != nil {
return nil, err
}
if response.JSONDefault != nil {
return nil, domain.DomainErrorToError(response.JSONDefault, response.StatusCode())
}
if response.JSON400 != nil {
return nil, domain.DomainErrorToError(response.JSON400, response.StatusCode())
}
return response.JSON201, nil
}

func (a *authorizationsApiImpl) CreateAuthorizationWithOrgId(ctx context.Context, orgId string, permissions []domain.Permission) (*domain.Authorization, error) {
status := domain.AuthorizationUpdateRequestStatusActive
auth := &domain.Authorization{
AuthorizationUpdateRequest: domain.AuthorizationUpdateRequest{Status: &status},
OrgID: &orgId,
Permissions: &permissions,
}
return a.CreateAuthorization(ctx, auth)
}

func (a *authorizationsApiImpl) UpdateAuthorizationStatus(ctx context.Context, authId string, status domain.AuthorizationUpdateRequestStatus) (*domain.Authorization, error) {
params := &domain.PatchAuthorizationsIDParams{}
body := &domain.PatchAuthorizationsIDJSONRequestBody{Status: &status}
response, err := a.apiClient.PatchAuthorizationsIDWithResponse(ctx, authId, params, *body)
if err != nil {
return nil, err
}
if response.JSONDefault != nil {
return nil, domain.DomainErrorToError(response.JSONDefault, response.StatusCode())
}
return response.JSON200, nil
}

func (a *authorizationsApiImpl) DeleteAuthorization(ctx context.Context, authId string) error {
params := &domain.DeleteAuthorizationsIDParams{}
response, err := a.apiClient.DeleteAuthorizationsIDWithResponse(ctx, authId, params)
if err != nil {
return err
}
if response.JSONDefault != nil {
return domain.DomainErrorToError(response.JSONDefault, response.StatusCode())
}
return nil
}
36 changes: 36 additions & 0 deletions api/organizations.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
package api

import (
"context"
"github.com/influxdata/influxdb-client-go/domain"
ihttp "github.com/influxdata/influxdb-client-go/internal/http"
)

type OrganizationsApi interface {
// FindOrganizationByName returns organization found using orgNme
FindOrganizationByName(ctx context.Context, orgName string) (*domain.Organization, error)
}

type organizationsApiImpl struct {
apiClient *domain.ClientWithResponses
}

func NewOrganizationsApi(service ihttp.Service) OrganizationsApi {

apiClient := domain.NewClientWithResponses(service)
return &organizationsApiImpl{
apiClient: apiClient,
}
}

func (o *organizationsApiImpl) FindOrganizationByName(ctx context.Context, orgName string) (*domain.Organization, error) {
params := &domain.GetOrgsParams{Org: &orgName}
response, err := o.apiClient.GetOrgsWithResponse(ctx, params)
if err != nil {
return nil, err
}
if response.JSONDefault != nil {
return nil, domain.DomainErrorToError(response.JSONDefault, response.StatusCode())
}
return &(*response.JSON200.Orgs)[0], nil
}
Loading