mirror of
https://github.com/google/go-github.git
synced 2026-10-29 00:44:52 +08:00
180 lines
6.0 KiB
Go
180 lines
6.0 KiB
Go
// Copyright 2025 The go-github AUTHORS. All rights reserved.
|
|
//
|
|
// Use of this source code is governed by a BSD-style
|
|
// license that can be found in the LICENSE file.
|
|
|
|
package github
|
|
|
|
import (
|
|
"context"
|
|
"fmt"
|
|
)
|
|
|
|
// CodespacesOrgAccessControlRequest represent request for SetOrgAccessControl.
|
|
type CodespacesOrgAccessControlRequest struct {
|
|
// Visibility represent which users can access codespaces in the organization.
|
|
// Can be one of: disabled, selected_members, all_members, all_members_and_outside_collaborators.
|
|
Visibility string `json:"visibility"`
|
|
// SelectedUsernames represent the usernames of the organization members who should have access to codespaces in the organization.
|
|
// Required when visibility is selected_members.
|
|
SelectedUsernames []string `json:"selected_usernames,omitzero"`
|
|
}
|
|
|
|
// ListInOrg lists the codespaces associated to a specified organization.
|
|
//
|
|
// GitHub API docs: https://docs.github.com/rest/codespaces/organizations?apiVersion=2022-11-28#list-codespaces-for-the-organization
|
|
//
|
|
//meta:operation GET /orgs/{org}/codespaces
|
|
func (s *CodespacesService) ListInOrg(ctx context.Context, org string, opts *ListOptions) (*ListCodespaces, *Response, error) {
|
|
u := fmt.Sprintf("orgs/%v/codespaces", org)
|
|
u, err := addOptions(u, opts)
|
|
if err != nil {
|
|
return nil, nil, err
|
|
}
|
|
|
|
req, err := s.client.NewRequest(ctx, "GET", u, nil)
|
|
if err != nil {
|
|
return nil, nil, err
|
|
}
|
|
|
|
var codespaces *ListCodespaces
|
|
resp, err := s.client.Do(req, &codespaces)
|
|
if err != nil {
|
|
return nil, resp, err
|
|
}
|
|
|
|
return codespaces, resp, nil
|
|
}
|
|
|
|
// SetOrgAccessControl sets which users can access codespaces in an organization.
|
|
//
|
|
// Deprecated: This endpoint has been deprecated by GitHub.
|
|
//
|
|
// GitHub API docs: https://docs.github.com/rest/codespaces/organizations?apiVersion=2022-11-28#manage-access-control-for-organization-codespaces
|
|
//
|
|
//meta:operation PUT /orgs/{org}/codespaces/access
|
|
func (s *CodespacesService) SetOrgAccessControl(ctx context.Context, org string, body CodespacesOrgAccessControlRequest) (*Response, error) {
|
|
u := fmt.Sprintf("orgs/%v/codespaces/access", org)
|
|
req, err := s.client.NewRequest(ctx, "PUT", u, body)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
resp, err := s.client.Do(req, nil)
|
|
if err != nil {
|
|
return resp, err
|
|
}
|
|
|
|
return resp, nil
|
|
}
|
|
|
|
// AddUsersToOrgAccess adds users to Codespaces access for an organization.
|
|
//
|
|
// Deprecated: This endpoint has been deprecated by GitHub.
|
|
//
|
|
// GitHub API docs: https://docs.github.com/rest/codespaces/organizations?apiVersion=2022-11-28#add-users-to-codespaces-access-for-an-organization
|
|
//
|
|
//meta:operation POST /orgs/{org}/codespaces/access/selected_users
|
|
func (s *CodespacesService) AddUsersToOrgAccess(ctx context.Context, org string, usernames []string) (*Response, error) {
|
|
u := fmt.Sprintf("orgs/%v/codespaces/access/selected_users", org)
|
|
req, err := s.client.NewRequest(ctx, "POST", u, map[string][]string{"selected_usernames": usernames})
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
resp, err := s.client.Do(req, nil)
|
|
if err != nil {
|
|
return resp, err
|
|
}
|
|
|
|
return resp, nil
|
|
}
|
|
|
|
// RemoveUsersFromOrgAccess removes users from Codespaces access for an organization.
|
|
//
|
|
// Deprecated: This endpoint has been deprecated by GitHub.
|
|
//
|
|
// GitHub API docs: https://docs.github.com/rest/codespaces/organizations?apiVersion=2022-11-28#remove-users-from-codespaces-access-for-an-organization
|
|
//
|
|
//meta:operation DELETE /orgs/{org}/codespaces/access/selected_users
|
|
func (s *CodespacesService) RemoveUsersFromOrgAccess(ctx context.Context, org string, usernames []string) (*Response, error) {
|
|
u := fmt.Sprintf("orgs/%v/codespaces/access/selected_users", org)
|
|
req, err := s.client.NewRequest(ctx, "DELETE", u, map[string][]string{"selected_usernames": usernames})
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
resp, err := s.client.Do(req, nil)
|
|
if err != nil {
|
|
return resp, err
|
|
}
|
|
|
|
return resp, nil
|
|
}
|
|
|
|
// ListUserCodespacesInOrg lists the codespaces that a member of an organization has for repositories in that organization.
|
|
//
|
|
// GitHub API docs: https://docs.github.com/rest/codespaces/organizations?apiVersion=2022-11-28#list-codespaces-for-a-user-in-organization
|
|
//
|
|
//meta:operation GET /orgs/{org}/members/{username}/codespaces
|
|
func (s *CodespacesService) ListUserCodespacesInOrg(ctx context.Context, org, username string, opts *ListOptions) (*ListCodespaces, *Response, error) {
|
|
u := fmt.Sprintf("orgs/%v/members/%v/codespaces", org, username)
|
|
u, err := addOptions(u, opts)
|
|
if err != nil {
|
|
return nil, nil, err
|
|
}
|
|
|
|
req, err := s.client.NewRequest(ctx, "GET", u, nil)
|
|
if err != nil {
|
|
return nil, nil, err
|
|
}
|
|
|
|
var codespaces *ListCodespaces
|
|
resp, err := s.client.Do(req, &codespaces)
|
|
if err != nil {
|
|
return nil, resp, err
|
|
}
|
|
|
|
return codespaces, resp, nil
|
|
}
|
|
|
|
// DeleteUserCodespaceInOrg deletes a user's codespace from the organization.
|
|
//
|
|
// GitHub API docs: https://docs.github.com/rest/codespaces/organizations?apiVersion=2022-11-28#delete-a-codespace-from-the-organization
|
|
//
|
|
//meta:operation DELETE /orgs/{org}/members/{username}/codespaces/{codespace_name}
|
|
func (s *CodespacesService) DeleteUserCodespaceInOrg(ctx context.Context, org, username, codespaceName string) (*Response, error) {
|
|
u := fmt.Sprintf("orgs/%v/members/%v/codespaces/%v", org, username, codespaceName)
|
|
req, err := s.client.NewRequest(ctx, "DELETE", u, nil)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
resp, err := s.client.Do(req, nil)
|
|
if err != nil {
|
|
return resp, err
|
|
}
|
|
|
|
return resp, nil
|
|
}
|
|
|
|
// StopUserCodespaceInOrg stops a codespace for an organization user.
|
|
//
|
|
// GitHub API docs: https://docs.github.com/rest/codespaces/organizations?apiVersion=2022-11-28#stop-a-codespace-for-an-organization-user
|
|
//
|
|
//meta:operation POST /orgs/{org}/members/{username}/codespaces/{codespace_name}/stop
|
|
func (s *CodespacesService) StopUserCodespaceInOrg(ctx context.Context, org, username, codespaceName string) (*Response, error) {
|
|
u := fmt.Sprintf("orgs/%v/members/%v/codespaces/%v/stop", org, username, codespaceName)
|
|
req, err := s.client.NewRequest(ctx, "POST", u, nil)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
resp, err := s.client.Do(req, nil)
|
|
if err != nil {
|
|
return resp, err
|
|
}
|
|
|
|
return resp, nil
|
|
}
|