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 }