Skip to content

Commit 1a51bcd

Browse files
committed
feat(user): make username case insensitive by default
- username is now case insensitive by default - use option `--user-match-case` to make username case sensitive
1 parent 69bc0eb commit 1a51bcd

File tree

8 files changed

+170
-68
lines changed

8 files changed

+170
-68
lines changed

README.md

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -85,7 +85,7 @@ ghfs --listen-plain 80 --listen-tls 443 -c /cert/server1.pem -k /cert/server1.ke
8585

8686
## Usage
8787
```
88-
server [options]
88+
ghfs [options]
8989
9090
-l|--listen <ip|port|:port|ip:port|socket> ...
9191
IP and port the server listens on, e.g. ":80" or "127.0.0.1:80".
@@ -209,6 +209,8 @@ server [options]
209209
--user-sha256 [<username>]:<sha256-password> ...
210210
--user-sha512 [<username>]:<sha512-password> ...
211211
Specify users for Basic Auth, with encoded password.
212+
--user-match-case
213+
Username is case sensitive.
212214
213215
-c|--cert <file>
214216
Specify TLS certificate file.

README.zh-CN.md

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -84,7 +84,7 @@ ghfs --listen-plain 80 --listen-tls 443 -c /cert/server1.pem -k /cert/server1.ke
8484

8585
## 使用方法
8686
```
87-
server [选项]
87+
ghfs [选项]
8888
8989
-l|--listen <IP|端口|:端口|IP:端口|socket> ...
9090
指定服务器要侦听的IP和端口,例如“:80”或“127.0.0.1:80”。
@@ -207,6 +207,8 @@ server [选项]
207207
--user-sha256 [<用户名>]:<sha256密码> ...
208208
--user-sha512 [<用户名>]:<sha512密码> ...
209209
指定http基本验证的用户,对密码使用特定的编码。
210+
--user-match-case
211+
用户名区分大小写。
210212
211213
-c|--cert <证书文件>
212214
指定TLS证书文件。

src/param/cli.go

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -116,6 +116,9 @@ func init() {
116116
err = options.AddFlagValues("userssha512", "--user-sha512", "", nil, "user info: <username>:<sha512-password>")
117117
serverErrHandler.CheckFatal(err)
118118

119+
err = options.AddFlag("usermatchcase", "--user-match-case", "GHFS_USER_MATCH_CASE", "username should be case sensitive")
120+
serverErrHandler.CheckFatal(err)
121+
119122
err = options.AddFlagsValue("key", []string{"-k", "--key"}, "GHFS_KEY", "", "TLS certificate key path")
120123
serverErrHandler.CheckFatal(err)
121124

@@ -252,6 +255,7 @@ func doParseCli() []*Param {
252255
param.GlobalArchive = result.HasKey("globalarchive")
253256
param.GlobalCors = result.HasKey("globalcors")
254257
param.GlobalAuth = result.HasKey("globalauth")
258+
param.UserMatchCase = result.HasKey("usermatchcase")
255259
param.HostNames, _ = result.GetStrings("hostnames")
256260
param.Theme, _ = result.GetString("theme")
257261
param.ThemeDir, _ = result.GetString("themedir")

src/param/main.go

Lines changed: 10 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -41,15 +41,16 @@ type Param struct {
4141
CorsUrls []string
4242
CorsDirs []string
4343

44-
GlobalAuth bool
45-
AuthUrls []string
46-
AuthDirs []string
47-
UsersPlain []*user
48-
UsersBase64 []*user
49-
UsersMd5 []*user
50-
UsersSha1 []*user
51-
UsersSha256 []*user
52-
UsersSha512 []*user
44+
GlobalAuth bool
45+
AuthUrls []string
46+
AuthDirs []string
47+
UsersPlain []*user
48+
UsersBase64 []*user
49+
UsersMd5 []*user
50+
UsersSha1 []*user
51+
UsersSha256 []*user
52+
UsersSha512 []*user
53+
UserMatchCase bool
5354

5455
Certificate *tls.Certificate
5556
Listens []string

src/user/list.go

Lines changed: 27 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -1,97 +1,82 @@
11
package user
22

33
import (
4-
"errors"
4+
"../util"
55
)
66

77
type List struct {
8-
users []user
8+
users []user
9+
namesEqualFunc util.StrEqualFunc
910
}
1011

11-
var errUserExists = errors.New("username already exist")
12-
1312
func (list *List) findIndex(username string) int {
1413
for i := range list.users {
15-
if list.users[i].getName() == username {
14+
if list.namesEqualFunc(list.users[i].getName(), username) {
1615
return i
1716
}
1817
}
1918
return -1
2019
}
2120

22-
func (list *List) AddPlain(username, password string) error {
23-
if list.findIndex(username) >= 0 {
24-
return errUserExists
21+
func (list *List) addUser(user user) {
22+
username := user.getName()
23+
index := list.findIndex(username)
24+
if index < 0 {
25+
list.users = append(list.users, user)
26+
} else {
27+
list.users[index] = user
2528
}
29+
}
2630

31+
func (list *List) AddPlain(username, password string) error {
2732
user := newPlainUser(username, password)
28-
list.users = append(list.users, user)
33+
list.addUser(user)
2934
return nil
3035
}
3136

3237
func (list *List) AddBase64(username, password string) error {
33-
if list.findIndex(username) >= 0 {
34-
return errUserExists
35-
}
36-
3738
user := newBase64User(username, password)
38-
list.users = append(list.users, user)
39+
list.addUser(user)
3940
return nil
4041
}
4142

4243
func (list *List) AddMd5(username, password string) error {
43-
if list.findIndex(username) >= 0 {
44-
return errUserExists
45-
}
46-
4744
user, err := newMd5User(username, password)
4845
if err != nil {
4946
return err
5047
}
5148

52-
list.users = append(list.users, user)
49+
list.addUser(user)
5350
return nil
5451
}
5552

5653
func (list *List) AddSha1(username, password string) error {
57-
if list.findIndex(username) >= 0 {
58-
return errUserExists
59-
}
60-
6154
user, err := newSha1User(username, password)
6255
if err != nil {
6356
return err
6457
}
6558

66-
list.users = append(list.users, user)
59+
list.addUser(user)
6760
return nil
6861
}
6962

7063
func (list *List) AddSha256(username, password string) error {
71-
if list.findIndex(username) >= 0 {
72-
return errUserExists
73-
}
74-
7564
user, err := newSha256User(username, password)
7665
if err != nil {
7766
return err
7867
}
7968

80-
list.users = append(list.users, user)
69+
list.addUser(user)
8170
return nil
8271
}
8372

8473
func (list *List) AddSha512(username, password string) error {
85-
if list.findIndex(username) >= 0 {
86-
return errUserExists
87-
}
88-
8974
user, err := newSha512User(username, password)
9075
if err != nil {
9176
return err
9277
}
9378

94-
list.users = append(list.users, user)
79+
list.addUser(user)
9580
return nil
9681
}
9782

@@ -104,6 +89,12 @@ func (list *List) Auth(username, password string) bool {
10489
return list.users[index].auth(password)
10590
}
10691

107-
func NewList() *List {
108-
return &List{}
92+
func NewList(nameCaseSensitive bool) *List {
93+
var namesEqualFunc util.StrEqualFunc
94+
if nameCaseSensitive {
95+
namesEqualFunc = util.IsStrEqualAccurate
96+
} else {
97+
namesEqualFunc = util.IsStrEqualNoCase
98+
}
99+
return &List{namesEqualFunc: namesEqualFunc}
109100
}

0 commit comments

Comments
 (0)