From b30d4fe537ba354b49f8fc83fa8608cf508bd2c6 Mon Sep 17 00:00:00 2001 From: Juliusz Chroboczek Date: Wed, 2 Dec 2020 00:07:31 +0100 Subject: [PATCH] Add delay after login failure. --- group/group.go | 13 ++++++++----- rtpconn/webclient.go | 3 +++ webserver/webserver.go | 4 +++- 3 files changed, 14 insertions(+), 6 deletions(-) diff --git a/group/group.go b/group/group.go index 9e45b3f..e766aab 100644 --- a/group/group.go +++ b/group/group.go @@ -7,6 +7,7 @@ package group import ( "encoding/json" + "errors" "log" "os" "path" @@ -23,6 +24,8 @@ import ( var Directory string var UseMDNS bool +var ErrNotAuthorised = errors.New("not authorised") + type UserError string func (err UserError) Error() string { @@ -268,7 +271,7 @@ func Delete(name string) bool { defer groups.mu.Unlock() g := groups.groups[name] if g == nil { - return false; + return false } g.mu.Lock() @@ -642,22 +645,22 @@ func (desc *description) GetPermission(group string, c Challengeable) (ClientPer } return p, nil } - return p, UserError("not authorised") + return p, ErrNotAuthorised } if found, good := matchClient(group, c, desc.Presenter); found { if good { p.Present = true return p, nil } - return p, UserError("not authorised") + return p, ErrNotAuthorised } if found, good := matchClient(group, c, desc.Other); found { if good { return p, nil } - return p, UserError("not authorised") + return p, ErrNotAuthorised } - return p, UserError("not authorised") + return p, ErrNotAuthorised } type Public struct { diff --git a/rtpconn/webclient.go b/rtpconn/webclient.go index a600e78..c65b2a8 100644 --- a/rtpconn/webclient.go +++ b/rtpconn/webclient.go @@ -707,6 +707,9 @@ func StartClient(conn *websocket.Conn) (err error) { if err != nil { if os.IsNotExist(err) { err = group.UserError("group does not exist") + } else if err == group.ErrNotAuthorised { + err = group.UserError("not authorised") + time.Sleep(200 * time.Millisecond) } return } diff --git a/webserver/webserver.go b/webserver/webserver.go index 7bc4244..75731c1 100644 --- a/webserver/webserver.go +++ b/webserver/webserver.go @@ -559,8 +559,10 @@ func checkGroupPermissions(w http.ResponseWriter, r *http.Request, groupname str } p, err := desc.GetPermission(groupname, httpClient{user, pass}) - if err != nil || !p.Record { + if err == group.ErrNotAuthorised { + time.Sleep(200 * time.Millisecond) + } return false }