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

     1  // Copyright 2022 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  // SSHSigningKey represents a public SSH key used to sign git commits.
    14  type SSHSigningKey struct {
    15  	ID        *int64     `json:"id,omitempty"`
    16  	Key       *string    `json:"key,omitempty"`
    17  	Title     *string    `json:"title,omitempty"`
    18  	CreatedAt *Timestamp `json:"created_at,omitempty"`
    19  }
    20  
    21  func (k SSHSigningKey) String() string {
    22  	return Stringify(k)
    23  }
    24  
    25  // ListSSHSigningKeys lists the SSH signing keys for a user. Passing an empty
    26  // username string will fetch SSH signing keys for the authenticated user.
    27  //
    28  // GitHub API docs: https://docs.github.com/rest/users/ssh-signing-keys#list-ssh-signing-keys-for-a-user
    29  // GitHub API docs: https://docs.github.com/rest/users/ssh-signing-keys#list-ssh-signing-keys-for-the-authenticated-user
    30  //
    31  //meta:operation GET /user/ssh_signing_keys
    32  //meta:operation GET /users/{username}/ssh_signing_keys
    33  func (s *UsersService) ListSSHSigningKeys(ctx context.Context, user string, opts *ListOptions) ([]*SSHSigningKey, *Response, error) {
    34  	var u string
    35  	if user != "" {
    36  		u = fmt.Sprintf("users/%v/ssh_signing_keys", user)
    37  	} else {
    38  		u = "user/ssh_signing_keys"
    39  	}
    40  	u, err := addOptions(u, opts)
    41  	if err != nil {
    42  		return nil, nil, err
    43  	}
    44  
    45  	req, err := s.client.NewRequest("GET", u, nil)
    46  	if err != nil {
    47  		return nil, nil, err
    48  	}
    49  
    50  	var keys []*SSHSigningKey
    51  	resp, err := s.client.Do(ctx, req, &keys)
    52  	if err != nil {
    53  		return nil, resp, err
    54  	}
    55  
    56  	return keys, resp, nil
    57  }
    58  
    59  // GetSSHSigningKey fetches a single SSH signing key for the authenticated user.
    60  //
    61  // GitHub API docs: https://docs.github.com/rest/users/ssh-signing-keys#get-an-ssh-signing-key-for-the-authenticated-user
    62  //
    63  //meta:operation GET /user/ssh_signing_keys/{ssh_signing_key_id}
    64  func (s *UsersService) GetSSHSigningKey(ctx context.Context, id int64) (*SSHSigningKey, *Response, error) {
    65  	u := fmt.Sprintf("user/ssh_signing_keys/%v", id)
    66  
    67  	req, err := s.client.NewRequest("GET", u, nil)
    68  	if err != nil {
    69  		return nil, nil, err
    70  	}
    71  
    72  	key := new(SSHSigningKey)
    73  	resp, err := s.client.Do(ctx, req, key)
    74  	if err != nil {
    75  		return nil, resp, err
    76  	}
    77  
    78  	return key, resp, nil
    79  }
    80  
    81  // CreateSSHSigningKey adds a SSH signing key for the authenticated user.
    82  //
    83  // GitHub API docs: https://docs.github.com/rest/users/ssh-signing-keys#create-a-ssh-signing-key-for-the-authenticated-user
    84  //
    85  //meta:operation POST /user/ssh_signing_keys
    86  func (s *UsersService) CreateSSHSigningKey(ctx context.Context, key *Key) (*SSHSigningKey, *Response, error) {
    87  	u := "user/ssh_signing_keys"
    88  
    89  	req, err := s.client.NewRequest("POST", u, key)
    90  	if err != nil {
    91  		return nil, nil, err
    92  	}
    93  
    94  	k := new(SSHSigningKey)
    95  	resp, err := s.client.Do(ctx, req, k)
    96  	if err != nil {
    97  		return nil, resp, err
    98  	}
    99  
   100  	return k, resp, nil
   101  }
   102  
   103  // DeleteSSHSigningKey deletes a SSH signing key for the authenticated user.
   104  //
   105  // GitHub API docs: https://docs.github.com/rest/users/ssh-signing-keys#delete-an-ssh-signing-key-for-the-authenticated-user
   106  //
   107  //meta:operation DELETE /user/ssh_signing_keys/{ssh_signing_key_id}
   108  func (s *UsersService) DeleteSSHSigningKey(ctx context.Context, id int64) (*Response, error) {
   109  	u := fmt.Sprintf("user/ssh_signing_keys/%v", id)
   110  
   111  	req, err := s.client.NewRequest("DELETE", u, nil)
   112  	if err != nil {
   113  		return nil, err
   114  	}
   115  
   116  	return s.client.Do(ctx, req, nil)
   117  }