1234567891011121314151617181920212223242526272829303132333435363738394041 |
- package socks5
- import (
- "golang.org/x/net/context"
- )
- // RuleSet is used to provide custom rules to allow or prohibit actions
- type RuleSet interface {
- Allow(ctx context.Context, req *Request) (context.Context, bool)
- }
- // PermitAll returns a RuleSet which allows all types of connections
- func PermitAll() RuleSet {
- return &PermitCommand{true, true, true}
- }
- // PermitNone returns a RuleSet which disallows all types of connections
- func PermitNone() RuleSet {
- return &PermitCommand{false, false, false}
- }
- // PermitCommand is an implementation of the RuleSet which
- // enables filtering supported commands
- type PermitCommand struct {
- EnableConnect bool
- EnableBind bool
- EnableAssociate bool
- }
- func (p *PermitCommand) Allow(ctx context.Context, req *Request) (context.Context, bool) {
- switch req.Command {
- case ConnectCommand:
- return ctx, p.EnableConnect
- case BindCommand:
- return ctx, p.EnableBind
- case AssociateCommand:
- return ctx, p.EnableAssociate
- }
- return ctx, false
- }
|