github.com/google/go-github/v57@v57.0.0/github/admin_users.go (about)

     1  // Copyright 2019 The go-github AUTHORS. All rights reserved.
     2  //
     3  // Use of this source code is governed by a BSD-style
     4  // license that can be found in the LICENSE file.
     5  
     6  package github
     7  
     8  import (
     9  	"context"
    10  	"fmt"
    11  )
    12  
    13  // createUserRequest is a subset of User and is used internally
    14  // by CreateUser to pass only the known fields for the endpoint.
    15  type createUserRequest struct {
    16  	Login *string `json:"login,omitempty"`
    17  	Email *string `json:"email,omitempty"`
    18  }
    19  
    20  // CreateUser creates a new user in GitHub Enterprise.
    21  //
    22  // GitHub API docs: https://docs.github.com/enterprise-server@3.10/rest/enterprise-admin/users#create-a-user
    23  //
    24  //meta:operation POST /admin/users
    25  func (s *AdminService) CreateUser(ctx context.Context, login, email string) (*User, *Response, error) {
    26  	u := "admin/users"
    27  
    28  	userReq := &createUserRequest{
    29  		Login: &login,
    30  		Email: &email,
    31  	}
    32  
    33  	req, err := s.client.NewRequest("POST", u, userReq)
    34  	if err != nil {
    35  		return nil, nil, err
    36  	}
    37  
    38  	var user User
    39  	resp, err := s.client.Do(ctx, req, &user)
    40  	if err != nil {
    41  		return nil, resp, err
    42  	}
    43  
    44  	return &user, resp, nil
    45  }
    46  
    47  // DeleteUser deletes a user in GitHub Enterprise.
    48  //
    49  // GitHub API docs: https://docs.github.com/enterprise-server@3.10/rest/enterprise-admin/users#delete-a-user
    50  //
    51  //meta:operation DELETE /admin/users/{username}
    52  func (s *AdminService) DeleteUser(ctx context.Context, username string) (*Response, error) {
    53  	u := "admin/users/" + username
    54  
    55  	req, err := s.client.NewRequest("DELETE", u, nil)
    56  	if err != nil {
    57  		return nil, err
    58  	}
    59  
    60  	resp, err := s.client.Do(ctx, req, nil)
    61  	if err != nil {
    62  		return resp, err
    63  	}
    64  
    65  	return resp, nil
    66  }
    67  
    68  // ImpersonateUserOptions represents the scoping for the OAuth token.
    69  type ImpersonateUserOptions struct {
    70  	Scopes []string `json:"scopes,omitempty"`
    71  }
    72  
    73  // OAuthAPP represents the GitHub Site Administrator OAuth app.
    74  type OAuthAPP struct {
    75  	URL      *string `json:"url,omitempty"`
    76  	Name     *string `json:"name,omitempty"`
    77  	ClientID *string `json:"client_id,omitempty"`
    78  }
    79  
    80  func (s OAuthAPP) String() string {
    81  	return Stringify(s)
    82  }
    83  
    84  // UserAuthorization represents the impersonation response.
    85  type UserAuthorization struct {
    86  	ID             *int64     `json:"id,omitempty"`
    87  	URL            *string    `json:"url,omitempty"`
    88  	Scopes         []string   `json:"scopes,omitempty"`
    89  	Token          *string    `json:"token,omitempty"`
    90  	TokenLastEight *string    `json:"token_last_eight,omitempty"`
    91  	HashedToken    *string    `json:"hashed_token,omitempty"`
    92  	App            *OAuthAPP  `json:"app,omitempty"`
    93  	Note           *string    `json:"note,omitempty"`
    94  	NoteURL        *string    `json:"note_url,omitempty"`
    95  	UpdatedAt      *Timestamp `json:"updated_at,omitempty"`
    96  	CreatedAt      *Timestamp `json:"created_at,omitempty"`
    97  	Fingerprint    *string    `json:"fingerprint,omitempty"`
    98  }
    99  
   100  // CreateUserImpersonation creates an impersonation OAuth token.
   101  //
   102  // GitHub API docs: https://docs.github.com/enterprise-server@3.10/rest/enterprise-admin/users#create-an-impersonation-oauth-token
   103  //
   104  //meta:operation POST /admin/users/{username}/authorizations
   105  func (s *AdminService) CreateUserImpersonation(ctx context.Context, username string, opts *ImpersonateUserOptions) (*UserAuthorization, *Response, error) {
   106  	u := fmt.Sprintf("admin/users/%s/authorizations", username)
   107  
   108  	req, err := s.client.NewRequest("POST", u, opts)
   109  	if err != nil {
   110  		return nil, nil, err
   111  	}
   112  
   113  	a := new(UserAuthorization)
   114  	resp, err := s.client.Do(ctx, req, a)
   115  	if err != nil {
   116  		return nil, resp, err
   117  	}
   118  
   119  	return a, resp, nil
   120  }
   121  
   122  // DeleteUserImpersonation deletes an impersonation OAuth token.
   123  //
   124  // GitHub API docs: https://docs.github.com/enterprise-server@3.10/rest/enterprise-admin/users#delete-an-impersonation-oauth-token
   125  //
   126  //meta:operation DELETE /admin/users/{username}/authorizations
   127  func (s *AdminService) DeleteUserImpersonation(ctx context.Context, username string) (*Response, error) {
   128  	u := fmt.Sprintf("admin/users/%s/authorizations", username)
   129  
   130  	req, err := s.client.NewRequest("DELETE", u, nil)
   131  	if err != nil {
   132  		return nil, err
   133  	}
   134  
   135  	resp, err := s.client.Do(ctx, req, nil)
   136  	if err != nil {
   137  		return resp, err
   138  	}
   139  
   140  	return resp, nil
   141  }