2018-10-30 09:20:13 +03:00
// Copyright 2018 The Gitea Authors. All rights reserved.
2022-11-27 21:20:29 +03:00
// SPDX-License-Identifier: MIT
2018-10-30 09:20:13 +03:00
package private
import (
2021-07-14 17:43:13 +03:00
"context"
2018-10-30 09:20:13 +03:00
"fmt"
2021-09-22 08:38:34 +03:00
"io"
2019-12-17 04:49:07 +03:00
"net/http"
2018-10-30 09:20:13 +03:00
"code.gitea.io/gitea/modules/setting"
)
2019-06-01 18:00:21 +03:00
// UpdatePublicKeyInRepo update public key and if necessary deploy key updates
2021-07-14 17:43:13 +03:00
func UpdatePublicKeyInRepo ( ctx context . Context , keyID , repoID int64 ) error {
2018-10-30 09:20:13 +03:00
// Ask for running deliver hook and test pull request tasks.
2019-06-01 18:00:21 +03:00
reqURL := setting . LocalURL + fmt . Sprintf ( "api/internal/ssh/%d/update/%d" , keyID , repoID )
2021-07-14 17:43:13 +03:00
resp , err := newInternalRequest ( ctx , reqURL , "POST" ) . Response ( )
2018-10-30 09:20:13 +03: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 04:49:07 +03:00
// AuthorizedPublicKeyByContent searches content as prefix (leak e-mail part)
// and returns public key found.
2021-07-14 17:43:13 +03:00
func AuthorizedPublicKeyByContent ( ctx context . Context , content string ) ( string , error ) {
2019-12-17 04:49:07 +03:00
// Ask for running deliver hook and test pull request tasks.
2020-03-30 21:52:45 +03:00
reqURL := setting . LocalURL + "api/internal/ssh/authorized_keys"
2021-07-14 17:43:13 +03:00
req := newInternalRequest ( ctx , reqURL , "POST" )
2019-12-17 04:49:07 +03: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 08:38:34 +03:00
bs , err := io . ReadAll ( resp . Body )
2019-12-17 04:49:07 +03:00
return string ( bs ) , err
}