Initial support for JWT tokens in agents checks
parent
ed319c0291
commit
19285c3215
1
go.mod
1
go.mod
|
@ -3,6 +3,7 @@ module jilo-server
|
|||
go 1.23.2
|
||||
|
||||
require (
|
||||
github.com/golang-jwt/jwt/v5 v5.2.1 // indirect
|
||||
github.com/mattn/go-sqlite3 v1.14.24 // indirect
|
||||
gopkg.in/yaml.v2 v2.4.0 // indirect
|
||||
)
|
||||
|
|
2
go.sum
2
go.sum
|
@ -1,3 +1,5 @@
|
|||
github.com/golang-jwt/jwt/v5 v5.2.1 h1:OuVbFODueb089Lh128TAcimifWaLhJwVflnrgM17wHk=
|
||||
github.com/golang-jwt/jwt/v5 v5.2.1/go.mod h1:pqrtFR0X4osieyHYxtmOUWsAWrfe1Q5UVIyoH402zdk=
|
||||
github.com/mattn/go-sqlite3 v1.14.24 h1:tpSp2G2KyMnnQu99ngJ47EIkWVmliIizyZBfPrBWDRM=
|
||||
github.com/mattn/go-sqlite3 v1.14.24/go.mod h1:Uh1q+B4BYcTPb+yiD3kU8Ct7aC0hY9fxUwlHK0RXw+Y=
|
||||
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
|
||||
|
|
|
@ -4,14 +4,17 @@ servers:
|
|||
agents:
|
||||
agent1:
|
||||
endpoint: "https://meet.lindeas.com:8081/jvb"
|
||||
secret: "mysecretkey"
|
||||
check_period: 5
|
||||
agent2:
|
||||
endpoint: "https://meet.lindeas.com:8081/jicofo"
|
||||
secret: "mysecretkey"
|
||||
check_period: 5
|
||||
meet.example.com:
|
||||
agents:
|
||||
agent1:
|
||||
endpoint: "https://meet.example.com:8081/jvb"
|
||||
secret: "mysecret"
|
||||
check_period: 10
|
||||
agent2:
|
||||
endpoint: "https://meet.example.com:8081/jicofo"
|
||||
|
|
42
main.go
42
main.go
|
@ -10,6 +10,7 @@ import (
|
|||
"os"
|
||||
"time"
|
||||
|
||||
"github.com/golang-jwt/jwt/v5"
|
||||
_ "github.com/mattn/go-sqlite3"
|
||||
"gopkg.in/yaml.v2"
|
||||
)
|
||||
|
@ -17,6 +18,7 @@ import (
|
|||
// Structures
|
||||
type Agent struct {
|
||||
Endpoint string `yaml:"endpoint"`
|
||||
Secret string `yaml:"secret"`
|
||||
CheckPeriod int `yaml:"check_period"`
|
||||
}
|
||||
type Server struct {
|
||||
|
@ -101,11 +103,43 @@ func checkTableExists(db *sql.DB) bool {
|
|||
return err == nil && name == "endpoint_data"
|
||||
}
|
||||
|
||||
// JWT token generation
|
||||
func generateJWT(secret string) (string, error) {
|
||||
token := jwt.NewWithClaims(jwt.SigningMethodHS256, jwt.MapClaims{
|
||||
"iat": time.Now().Unix(),
|
||||
})
|
||||
|
||||
tokenString, err := token.SignedString([]byte(secret))
|
||||
if err != nil {
|
||||
return "", err
|
||||
}
|
||||
|
||||
return tokenString, nil
|
||||
}
|
||||
|
||||
// Check agent endpoint
|
||||
func checkEndpoint(endpoint string) (int, int64, string) {
|
||||
log.Println("Sending HTTP get request to Jilo agent:", endpoint)
|
||||
func checkEndpoint(agent Agent) (int, int64, string) {
|
||||
log.Println("Sending HTTP get request to Jilo agent:", agent.Endpoint)
|
||||
|
||||
// Generate the JWT token
|
||||
token, err := generateJWT(agent.Secret)
|
||||
if err != nil {
|
||||
log.Println("Failed to generate JWT token:", err)
|
||||
return 0, 0, ""
|
||||
}
|
||||
|
||||
// Create the http request
|
||||
req, err := http.NewRequest("GET", agent.Endpoint, nil)
|
||||
if err != nil {
|
||||
log.Println("Failed to create the HTTP request:", err)
|
||||
return 0, 0, ""
|
||||
}
|
||||
|
||||
// Set Authorization header
|
||||
req.Header.Set("Authorization", "Bearer "+token)
|
||||
|
||||
start := time.Now()
|
||||
resp, err := http.Get(endpoint)
|
||||
resp, err := http.DefaultClient.Do(req)
|
||||
if err != nil {
|
||||
log.Println("Failed to check the endpoint:", err)
|
||||
return 0, 0, ""
|
||||
|
@ -167,7 +201,7 @@ func main() {
|
|||
|
||||
for {
|
||||
log.Printf("Checking agent [%s - %s]: %s", serverName, agentName, agent.Endpoint)
|
||||
statusCode, responseTime, responseContent := checkEndpoint(agent.Endpoint)
|
||||
statusCode, responseTime, responseContent := checkEndpoint(agent)
|
||||
log.Printf("Agent [%s - %s]: Status code: %d, Response time: %d ms", serverName, agentName, statusCode, responseTime)
|
||||
|
||||
saveData(db, statusCode, responseTime, responseContent)
|
||||
|
|
Loading…
Reference in New Issue