feat: authenticate users and agents requests
This commit is contained in:
@ -5,6 +5,7 @@ import (
|
||||
"time"
|
||||
|
||||
"forge.cadoles.com/Cadoles/emissary/internal/agent/metadata"
|
||||
"forge.cadoles.com/Cadoles/emissary/internal/auth/agent"
|
||||
"forge.cadoles.com/Cadoles/emissary/internal/client"
|
||||
"forge.cadoles.com/Cadoles/emissary/internal/jwk"
|
||||
"github.com/pkg/errors"
|
||||
@ -15,7 +16,7 @@ import (
|
||||
type Agent struct {
|
||||
thumbprint string
|
||||
privateKey jwk.Key
|
||||
client *client.Client
|
||||
serverURL string
|
||||
controllers []Controller
|
||||
interval time.Duration
|
||||
collectors []metadata.Collector
|
||||
@ -29,7 +30,15 @@ func (a *Agent) Run(ctx context.Context) error {
|
||||
ticker := time.NewTicker(a.interval)
|
||||
defer ticker.Stop()
|
||||
|
||||
ctx = withClient(ctx, a.client)
|
||||
logger.Info(ctx, "generating token")
|
||||
token, err := agent.GenerateToken(a.privateKey, a.thumbprint)
|
||||
if err != nil {
|
||||
return errors.WithStack(err)
|
||||
}
|
||||
|
||||
client := client.New(a.serverURL, client.WithToken(token))
|
||||
|
||||
ctx = withClient(ctx, client)
|
||||
|
||||
for {
|
||||
select {
|
||||
@ -37,7 +46,7 @@ func (a *Agent) Run(ctx context.Context) error {
|
||||
|
||||
logger.Debug(ctx, "registering agent")
|
||||
|
||||
if err := a.registerAgent(ctx, state); err != nil {
|
||||
if err := a.registerAgent(ctx, client, state); err != nil {
|
||||
logger.Error(ctx, "could not register agent", logger.E(errors.WithStack(err)))
|
||||
|
||||
continue
|
||||
@ -76,7 +85,7 @@ func (a *Agent) Reconcile(ctx context.Context, state *State) error {
|
||||
return nil
|
||||
}
|
||||
|
||||
func (a *Agent) registerAgent(ctx context.Context, state *State) error {
|
||||
func (a *Agent) registerAgent(ctx context.Context, client *client.Client, state *State) error {
|
||||
meta, err := a.collectMetadata(ctx)
|
||||
if err != nil {
|
||||
return errors.WithStack(err)
|
||||
@ -84,7 +93,7 @@ func (a *Agent) registerAgent(ctx context.Context, state *State) error {
|
||||
|
||||
sorted := metadata.Sort(meta)
|
||||
|
||||
agent, err := a.client.RegisterAgent(ctx, a.privateKey, a.thumbprint, sorted)
|
||||
agent, err := client.RegisterAgent(ctx, a.privateKey, a.thumbprint, sorted)
|
||||
if err != nil {
|
||||
return errors.WithStack(err)
|
||||
}
|
||||
@ -129,12 +138,10 @@ func New(serverURL string, privateKey jwk.Key, thumbprint string, funcs ...Optio
|
||||
fn(opt)
|
||||
}
|
||||
|
||||
client := client.New(serverURL)
|
||||
|
||||
return &Agent{
|
||||
serverURL: serverURL,
|
||||
privateKey: privateKey,
|
||||
thumbprint: thumbprint,
|
||||
client: client,
|
||||
controllers: opt.Controllers,
|
||||
interval: opt.Interval,
|
||||
collectors: opt.Collectors,
|
||||
|
Reference in New Issue
Block a user