2017-05-04 08:42:02 +03:00
// Copyright 2017 The Gitea Authors. All rights reserved.
// Use of this source code is governed by a MIT-style
// license that can be found in the LICENSE file.
2017-04-19 06:45:01 +03:00
package private
import (
"crypto/tls"
"encoding/json"
"fmt"
2017-08-03 18:32:13 +03:00
"net"
2017-04-19 06:45:01 +03:00
"net/http"
"code.gitea.io/gitea/modules/httplib"
"code.gitea.io/gitea/modules/log"
"code.gitea.io/gitea/modules/setting"
)
func newRequest ( url , method string ) * httplib . Request {
return httplib . NewRequest ( url , method ) . Header ( "Authorization" ,
fmt . Sprintf ( "Bearer %s" , setting . InternalToken ) )
}
// Response internal request response
type Response struct {
Err string ` json:"err" `
}
func decodeJSONError ( resp * http . Response ) * Response {
var res Response
err := json . NewDecoder ( resp . Body ) . Decode ( & res )
if err != nil {
res . Err = err . Error ( )
}
return & res
}
2017-08-03 18:32:13 +03:00
func newInternalRequest ( url , method string ) * httplib . Request {
req := newRequest ( url , method ) . SetTLSClientConfig ( & tls . Config {
InsecureSkipVerify : true ,
} )
if setting . Protocol == setting . UnixSocket {
req . SetTransport ( & http . Transport {
Dial : func ( _ , _ string ) ( net . Conn , error ) {
return net . Dial ( "unix" , setting . HTTPAddr )
} ,
} )
}
return req
}
2017-04-19 06:45:01 +03:00
// UpdatePublicKeyUpdated update publick key updates
func UpdatePublicKeyUpdated ( keyID int64 ) error {
// Ask for running deliver hook and test pull request tasks.
reqURL := setting . LocalURL + fmt . Sprintf ( "api/internal/ssh/%d/update" , keyID )
log . GitLogger . Trace ( "UpdatePublicKeyUpdated: %s" , reqURL )
2017-08-03 18:32:13 +03:00
resp , err := newInternalRequest ( reqURL , "POST" ) . Response ( )
2017-04-19 06:45:01 +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
}