47 lines
1.4 KiB
Go
47 lines
1.4 KiB
Go
package pb
|
|
|
|
import (
|
|
"context"
|
|
"google.golang.org/grpc"
|
|
"google.golang.org/grpc/codes"
|
|
"google.golang.org/grpc/status"
|
|
)
|
|
|
|
var publicMethodMaps = map[string]bool{
|
|
// each method that is public will be added here
|
|
}
|
|
|
|
func NewSpartanAuthClient() {
|
|
|
|
}
|
|
|
|
// Implements UnaryServerInterceptor for authentication
|
|
func SpartanAuthPeachUnaryServerInterceptor(ctx context.Context, req any, info *grpc.UnaryServerInfo, handler grpc.UnaryHandler) (resp any, err error) {
|
|
// we will have a function that checks the token and a switch statement that checks if the method is public or not
|
|
|
|
if ok := publicMethodMaps[info.FullMethod]; ok {
|
|
return handler(ctx, req)
|
|
}
|
|
|
|
// check the token
|
|
// if the token is valid, return handler(ctx, req)
|
|
// if the token is missing or invalid, return an unauthenticated error
|
|
if token, ok := ctx.Value("token").(string); ok {
|
|
if ok, err := IntrospectToken(ctx, token); ok {
|
|
return handler(ctx, req)
|
|
} else {
|
|
if err != nil {
|
|
return nil, status.Errorf(codes.Internal, "error introspecting token: %v", err)
|
|
}
|
|
return nil, status.Errorf(codes.Unauthenticated, "invalid token")
|
|
}
|
|
}
|
|
|
|
return nil, status.Errorf(codes.Unauthenticated, "missing or invalid token")
|
|
}
|
|
|
|
func IntrospectToken(ctx context.Context, token string) (bool, error) {
|
|
// this function will call the introspection endpoint with the token and return the result
|
|
return false, nil
|
|
}
|