mirror of
https://github.com/psviderski/uncloud.git
synced 2026-10-06 21:29:02 +00:00
49 lines
1.3 KiB
Go
49 lines
1.3 KiB
Go
package caddyconfig
|
|
|
|
import (
|
|
"context"
|
|
"errors"
|
|
"os"
|
|
|
|
"google.golang.org/grpc/codes"
|
|
"google.golang.org/grpc/status"
|
|
"google.golang.org/protobuf/types/known/emptypb"
|
|
"google.golang.org/protobuf/types/known/timestamppb"
|
|
|
|
"github.com/psviderski/uncloud/api/pb"
|
|
)
|
|
|
|
// Server implements the gRPC Caddy service.
|
|
type Server struct {
|
|
pb.UnimplementedCaddyServer
|
|
service *Service
|
|
}
|
|
|
|
func NewServer(service *Service) *Server {
|
|
return &Server{service: service}
|
|
}
|
|
|
|
// GetConfig retrieves the saved Caddy configuration and the latest reconciliation error from the machine.
|
|
func (s *Server) GetConfig(ctx context.Context, _ *emptypb.Empty) (*pb.GetCaddyConfigResponse, error) {
|
|
caddyfile, modifiedAt, err := s.service.Caddyfile()
|
|
if err != nil {
|
|
if errors.Is(err, os.ErrNotExist) {
|
|
if lastErr := s.service.LastReconciliationError(); lastErr != nil {
|
|
return nil, status.Errorf(codes.NotFound, "%v; last Caddy config load failed: %v", err, lastErr)
|
|
}
|
|
return nil, status.Error(codes.NotFound, err.Error())
|
|
}
|
|
return nil, status.Error(codes.Internal, err.Error())
|
|
}
|
|
|
|
recErr := ""
|
|
if lastErr := s.service.LastReconciliationError(); lastErr != nil {
|
|
recErr = lastErr.Error()
|
|
}
|
|
return &pb.GetCaddyConfigResponse{
|
|
Caddyfile: caddyfile,
|
|
ModifiedAt: timestamppb.New(modifiedAt),
|
|
LastReconciliationError: recErr,
|
|
}, nil
|
|
}
|