Files
go-github/github/codespaces_orgs.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
}