mirror of
https://github.com/lightninglabs/aperture.git
synced 2025-12-17 00:54:20 +01:00
auth: LsatAuthenticator -> L402Authenticator sed -i 's/LsatAuthenticator/L402Authenticator/g' aperture.go auth/authenticator.go auth/authenticator_test.go rename package lsat to l402 git mv lsat/ l402 sed 's@aperture/lsat@aperture/l402@g' -i `git grep -l aperture/lsat` sed -i 's@package lsat@package l402@' `git grep -l 'package lsat'` sed -i 's@lsat\.@l402.@g' -i `git grep -l 'lsat\.'` sed 's@l402.Id@lsat.Id@' -i mint/mint_test.go replace lsat with l402 in the code sed 's@lsat@l402@' -i mint/mint_test.go sed 's@Lsat@L402@' -i l402/client_interceptor.go sed 's@lsatstore@l402store@' -i l402/store_test.go replace LSAT to L402 in comments sed '/\/\//s@LSAT@L402@g' -i `git grep -l '//.*LSAT'` replace LSAT -> L402 in the code, skip when a string starts with it sed 's@\([^"/]\)LSAT@\1L402@g' -i `git grep -l LSAT`
115 lines
3.0 KiB
Go
115 lines
3.0 KiB
Go
package aperture
|
|
|
|
import (
|
|
"context"
|
|
"time"
|
|
|
|
"github.com/lightninglabs/aperture/l402"
|
|
"github.com/lightninglabs/aperture/mint"
|
|
"github.com/lightninglabs/aperture/proxy"
|
|
)
|
|
|
|
// staticServiceLimiter provides static restrictions for services.
|
|
//
|
|
// TODO(wilmer): use etcd instead.
|
|
type staticServiceLimiter struct {
|
|
capabilities map[l402.Service]l402.Caveat
|
|
constraints map[l402.Service][]l402.Caveat
|
|
timeouts map[l402.Service]l402.Caveat
|
|
}
|
|
|
|
// A compile-time constraint to ensure staticServiceLimiter implements
|
|
// mint.ServiceLimiter.
|
|
var _ mint.ServiceLimiter = (*staticServiceLimiter)(nil)
|
|
|
|
// newStaticServiceLimiter instantiates a new static service limiter backed by
|
|
// the given restrictions.
|
|
func newStaticServiceLimiter(
|
|
proxyServices []*proxy.Service) *staticServiceLimiter {
|
|
|
|
capabilities := make(map[l402.Service]l402.Caveat)
|
|
constraints := make(map[l402.Service][]l402.Caveat)
|
|
timeouts := make(map[l402.Service]l402.Caveat)
|
|
|
|
for _, proxyService := range proxyServices {
|
|
s := l402.Service{
|
|
Name: proxyService.Name,
|
|
Tier: l402.BaseTier,
|
|
Price: proxyService.Price,
|
|
}
|
|
|
|
if proxyService.Timeout > 0 {
|
|
timeouts[s] = l402.NewTimeoutCaveat(
|
|
proxyService.Name,
|
|
proxyService.Timeout,
|
|
time.Now,
|
|
)
|
|
}
|
|
|
|
capabilities[s] = l402.NewCapabilitiesCaveat(
|
|
proxyService.Name, proxyService.Capabilities,
|
|
)
|
|
for cond, value := range proxyService.Constraints {
|
|
caveat := l402.Caveat{Condition: cond, Value: value}
|
|
constraints[s] = append(constraints[s], caveat)
|
|
}
|
|
}
|
|
|
|
return &staticServiceLimiter{
|
|
capabilities: capabilities,
|
|
constraints: constraints,
|
|
timeouts: timeouts,
|
|
}
|
|
}
|
|
|
|
// ServiceCapabilities returns the capabilities caveats for each service. This
|
|
// determines which capabilities of each service can be accessed.
|
|
func (l *staticServiceLimiter) ServiceCapabilities(ctx context.Context,
|
|
services ...l402.Service) ([]l402.Caveat, error) {
|
|
|
|
res := make([]l402.Caveat, 0, len(services))
|
|
for _, service := range services {
|
|
capabilities, ok := l.capabilities[service]
|
|
if !ok {
|
|
continue
|
|
}
|
|
res = append(res, capabilities)
|
|
}
|
|
|
|
return res, nil
|
|
}
|
|
|
|
// ServiceConstraints returns the constraints for each service. This enforces
|
|
// additional constraints on a particular service/service capability.
|
|
func (l *staticServiceLimiter) ServiceConstraints(ctx context.Context,
|
|
services ...l402.Service) ([]l402.Caveat, error) {
|
|
|
|
res := make([]l402.Caveat, 0, len(services))
|
|
for _, service := range services {
|
|
constraints, ok := l.constraints[service]
|
|
if !ok {
|
|
continue
|
|
}
|
|
res = append(res, constraints...)
|
|
}
|
|
|
|
return res, nil
|
|
}
|
|
|
|
// ServiceTimeouts returns the timeout caveat for each service. This enforces
|
|
// an expiration time for service access if enabled.
|
|
func (l *staticServiceLimiter) ServiceTimeouts(ctx context.Context,
|
|
services ...l402.Service) ([]l402.Caveat, error) {
|
|
|
|
res := make([]l402.Caveat, 0, len(services))
|
|
for _, service := range services {
|
|
timeout, ok := l.timeouts[service]
|
|
if !ok {
|
|
continue
|
|
}
|
|
res = append(res, timeout)
|
|
}
|
|
|
|
return res, nil
|
|
}
|