// adminServiceServer implements mciasv1.AdminServiceServer. // Health and GetPublicKey are public RPCs that bypass auth. package grpcserver import ( "context" "encoding/base64" "google.golang.org/grpc/codes" "google.golang.org/grpc/status" mciasv1 "git.wntrmute.dev/kyle/mcias/gen/mcias/v1" ) type adminServiceServer struct { mciasv1.UnimplementedAdminServiceServer s *Server } // Health returns {"status":"ok"} to signal the server is operational. func (a *adminServiceServer) Health(_ context.Context, _ *mciasv1.HealthRequest) (*mciasv1.HealthResponse, error) { return &mciasv1.HealthResponse{Status: "ok"}, nil } // GetPublicKey returns the Ed25519 public key as JWK field values. // The "x" field is the raw 32-byte public key base64url-encoded without padding, // matching the REST /v1/keys/public response format. func (a *adminServiceServer) GetPublicKey(_ context.Context, _ *mciasv1.GetPublicKeyRequest) (*mciasv1.GetPublicKeyResponse, error) { if len(a.s.pubKey) == 0 { return nil, status.Error(codes.Internal, "public key not available") } // Encode as base64url without padding — identical to the REST handler. x := base64.RawURLEncoding.EncodeToString(a.s.pubKey) return &mciasv1.GetPublicKeyResponse{ Kty: "OKP", Crv: "Ed25519", Use: "sig", Alg: "EdDSA", X: x, }, nil }