2018-10-30 07:20:13 +01:00
// Copyright 2018 The Gitea Authors. All rights reserved.
2022-11-27 13:20:29 -05:00
// SPDX-License-Identifier: MIT
2018-10-30 07:20:13 +01:00
package private
import (
2021-07-14 15:43:13 +01:00
"context"
2018-10-30 07:20:13 +01:00
"fmt"
2021-09-22 13:38:34 +08:00
"io"
2019-12-17 01:49:07 +00:00
"net/http"
2018-10-30 07:20:13 +01:00
"code.gitea.io/gitea/modules/setting"
)
2019-06-01 16:00:21 +01:00
// UpdatePublicKeyInRepo update public key and if necessary deploy key updates
2021-07-14 15:43:13 +01:00
func UpdatePublicKeyInRepo ( ctx context . Context , keyID , repoID int64 ) error {
2018-10-30 07:20:13 +01:00
// Ask for running deliver hook and test pull request tasks.
2019-06-01 16:00:21 +01:00
reqURL := setting . LocalURL + fmt . Sprintf ( "api/internal/ssh/%d/update/%d" , keyID , repoID )
2021-07-14 15:43:13 +01:00
resp , err := newInternalRequest ( ctx , reqURL , "POST" ) . Response ( )
2018-10-30 07:20:13 +01:00
if err != nil {
return err
}
defer resp . Body . Close ( )
// All 2XX status codes are accepted and others will return an error
if resp . StatusCode / 100 != 2 {
return fmt . Errorf ( "Failed to update public key: %s" , decodeJSONError ( resp ) . Err )
}
return nil
}
2019-12-17 01:49:07 +00:00
// AuthorizedPublicKeyByContent searches content as prefix (leak e-mail part)
// and returns public key found.
2021-07-14 15:43:13 +01:00
func AuthorizedPublicKeyByContent ( ctx context . Context , content string ) ( string , error ) {
2019-12-17 01:49:07 +00:00
// Ask for running deliver hook and test pull request tasks.
2020-03-30 19:52:45 +01:00
reqURL := setting . LocalURL + "api/internal/ssh/authorized_keys"
2021-07-14 15:43:13 +01:00
req := newInternalRequest ( ctx , reqURL , "POST" )
2019-12-17 01:49:07 +00:00
req . Param ( "content" , content )
resp , err := req . Response ( )
if err != nil {
return "" , err
}
defer resp . Body . Close ( )
// All 2XX status codes are accepted and others will return an error
if resp . StatusCode != http . StatusOK {
return "" , fmt . Errorf ( "Failed to update public key: %s" , decodeJSONError ( resp ) . Err )
}
2021-09-22 13:38:34 +08:00
bs , err := io . ReadAll ( resp . Body )
2019-12-17 01:49:07 +00:00
return string ( bs ) , err
}