From 77d0cc89bbdbb13e2cbf2e098a09cbbd6f124149 Mon Sep 17 00:00:00 2001 From: yuzuki999 Date: Thu, 9 Jun 2022 21:00:46 +0800 Subject: [PATCH] fix User check error --- api/user.go | 10 ++++------ app/mydispatcher/default.go | 21 ++++++++++++++------- 2 files changed, 18 insertions(+), 13 deletions(-) diff --git a/api/user.go b/api/user.go index 51aeeda..ff94f65 100644 --- a/api/user.go +++ b/api/user.go @@ -70,17 +70,15 @@ func (c *Client) GetUserList() (UserList *[]UserInfo, err error) { return nil, fmt.Errorf("unmarshal userlist error: %s", err) } l := len(userList.Data) - checkNum := userList.Data[l-1].UID + - userList.Data[l/2-1].UID + - userList.Data[0].UID + checkNum := userList.Data[l-1].UID + userList.Data[l/2-1].UID + + userList.Data[l/3-1].UID + userList.Data[l/4-1].UID + + userList.Data[l/5-1].UID + userList.Data[0].UID if c.UserListCheckNum != 0 { if c.UserListCheckNum == checkNum { return nil, nil } } - c.UserListCheckNum = userList.Data[l-1].UID + - userList.Data[l/2-1].UID + - userList.Data[0].UID + c.UserListCheckNum = checkNum return &userList.Data, nil } diff --git a/app/mydispatcher/default.go b/app/mydispatcher/default.go index 9105f1a..2be85ca 100644 --- a/app/mydispatcher/default.go +++ b/app/mydispatcher/default.go @@ -320,7 +320,7 @@ func (d *DefaultDispatcher) Dispatch(ctx context.Context, destination net.Destin } switch { case !sniffingRequest.Enabled: - go d.routedDispatch(ctx, outbound, destination) + go d.routedDispatch(ctx, outbound, destination, "") case destination.Network != net.Network_TCP: // Only metadata sniff will be used for non tcp connection result, err := sniffer(ctx, nil, true) @@ -337,7 +337,7 @@ func (d *DefaultDispatcher) Dispatch(ctx context.Context, destination net.Destin } } } - go d.routedDispatch(ctx, outbound, destination) + go d.routedDispatch(ctx, outbound, destination, result.Protocol()) default: go func() { cReader := &cachedReader{ @@ -358,7 +358,7 @@ func (d *DefaultDispatcher) Dispatch(ctx context.Context, destination net.Destin ob.Target = destination } } - d.routedDispatch(ctx, outbound, destination) + d.routedDispatch(ctx, outbound, destination, result.Protocol()) }() } return inbound, nil @@ -381,7 +381,7 @@ func (d *DefaultDispatcher) DispatchLink(ctx context.Context, destination net.De sniffingRequest := content.SniffingRequest switch { case !sniffingRequest.Enabled: - go d.routedDispatch(ctx, outbound, destination) + go d.routedDispatch(ctx, outbound, destination, "") case destination.Network != net.Network_TCP: // Only metadata sniff will be used for non tcp connection result, err := sniffer(ctx, nil, true) @@ -398,7 +398,7 @@ func (d *DefaultDispatcher) DispatchLink(ctx context.Context, destination net.De } } } - go d.routedDispatch(ctx, outbound, destination) + go d.routedDispatch(ctx, outbound, destination, result.Protocol()) default: go func() { cReader := &cachedReader{ @@ -419,7 +419,7 @@ func (d *DefaultDispatcher) DispatchLink(ctx context.Context, destination net.De ob.Target = destination } } - d.routedDispatch(ctx, outbound, destination) + d.routedDispatch(ctx, outbound, destination, result.Protocol()) }() } return nil @@ -471,7 +471,7 @@ func sniffer(ctx context.Context, cReader *cachedReader, metadataOnly bool) (Sni return contentResult, contentErr } -func (d *DefaultDispatcher) routedDispatch(ctx context.Context, link *transport.Link, destination net.Destination) { +func (d *DefaultDispatcher) routedDispatch(ctx context.Context, link *transport.Link, destination net.Destination, protocol string) { ob := session.OutboundFromContext(ctx) if hosts, ok := d.dns.(dns.HostsLookup); ok && destination.Address.Family().IsDomain() { proxied := hosts.LookupHosts(ob.Target.String()) @@ -491,6 +491,13 @@ func (d *DefaultDispatcher) routedDispatch(ctx context.Context, link *transport. // Check if domain and protocol hit the rule sessionInbound := session.InboundFromContext(ctx) // Whether the inbound connection contains a user + /*if protocol == "bittorrent" { + newError(fmt.Sprintf("User %s access %s reject by protocol rule", sessionInbound.User.Email, destination.String())).AtError().WriteToLog() + newError("destination is reject by protocol rule") + common.Close(link.Writer) + common.Interrupt(link.Reader) + return + }*/ if sessionInbound.User != nil { if d.RuleManager.Detect(sessionInbound.Tag, destination.String(), sessionInbound.User.Email) { newError(fmt.Sprintf("User %s access %s reject by rule", sessionInbound.User.Email, destination.String())).AtError().WriteToLog()