41 lines
1.1 KiB
Go
41 lines
1.1 KiB
Go
package auggie
|
|
|
|
import (
|
|
"context"
|
|
"time"
|
|
|
|
"github.com/aoagents/agent-orchestrator/backend/internal/adapters/agent/authprobe"
|
|
"github.com/aoagents/agent-orchestrator/backend/internal/ports"
|
|
)
|
|
|
|
var _ ports.AgentAuthChecker = (*Plugin)(nil)
|
|
|
|
// AuthStatus returns the plugin's local authentication status.
|
|
func (p *Plugin) AuthStatus(ctx context.Context) (ports.AgentAuthStatus, error) {
|
|
binary, err := p.ResolveBinary(ctx)
|
|
if err != nil {
|
|
return ports.AgentAuthStatusUnknown, err
|
|
}
|
|
return auggieAccountAuthStatus(ctx, binary)
|
|
}
|
|
|
|
func auggieAccountAuthStatus(ctx context.Context, binary string) (ports.AgentAuthStatus, error) {
|
|
if binary == "" {
|
|
return ports.AgentAuthStatusUnknown, nil
|
|
}
|
|
probeCtx, cancel := context.WithTimeout(ctx, 4*time.Second)
|
|
defer cancel()
|
|
|
|
out, err := authprobe.CmdRunner(probeCtx, binary, "account", "status")
|
|
if probeCtx.Err() != nil {
|
|
return ports.AgentAuthStatusUnknown, probeCtx.Err()
|
|
}
|
|
if status := authprobe.StatusFromText(string(out)); status != ports.AgentAuthStatusUnknown {
|
|
return status, nil
|
|
}
|
|
if err == nil {
|
|
return ports.AgentAuthStatusAuthorized, nil
|
|
}
|
|
return ports.AgentAuthStatusUnknown, nil
|
|
}
|