Skip to content
GitLab
Explore
Sign in
Primary navigation
Search or go to…
Project
U
useradm
Manage
Activity
Members
Labels
Plan
Issues
Issue boards
Milestones
Wiki
Code
Merge requests
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Snippets
Build
Pipelines
Jobs
Pipeline schedules
Artifacts
Deploy
Releases
Package registry
Model registry
Operate
Environments
Terraform modules
Monitor
Incidents
Analyze
Value stream analytics
Contributor analytics
CI/CD analytics
Repository analytics
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
Community forum
Contribute to GitLab
Provide feedback
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
Root
useradm
Commits
e9762f8b
Commit
e9762f8b
authored
4 months ago
by
Fernando K
Browse files
Options
Downloads
Patches
Plain Diff
Revamp genLogin and add tests
parent
e303dcc1
Branches
Branches containing commit
No related tags found
1 merge request
!2
Revamp genLogin and add tests
Changes
2
Show whitespace changes
Inline
Side-by-side
Showing
2 changed files
cmd/user/create.go
+76
-38
76 additions, 38 deletions
cmd/user/create.go
cmd/user/create_test.go
+110
-0
110 additions, 0 deletions
cmd/user/create_test.go
with
186 additions
and
38 deletions
cmd/user/create.go
+
76
−
38
View file @
e9762f8b
...
...
@@ -214,47 +214,64 @@ func genGecos(u model.User) model.User {
return
u
}
// honestly... i had 3 functions that had a similar algorithm
// and one that only redirected the flow. so i took it as a
// challenge to merge them into one :D this it the result.
// don't even bother trying to understand it, just go back
// a few commits and read there
func
genLogin
(
name
,
grr
,
ltype
string
,
variance
int
)
string
{
fix
:=
1
login
:=
""
var
solo
string
parts
:=
formatName
(
name
)
type
LoginType
int
if
len
(
parts
)
<=
1
{
if
lt
ype
!
=
"ini"
||
len
(
parts
)
==
0
{
return
"_"
}
}
const
(
Initials
LoginT
ype
=
iota
FirstName
LastName
)
if
ltype
==
"first"
{
login
,
parts
,
fix
=
parts
[
0
],
parts
[
1
:
],
0
variance
++
func
genLogin
(
name
string
,
grr
string
,
ltype
LoginType
,
variance
int
)
string
{
parts
:=
formatName
(
name
)
if
len
(
parts
)
==
0
{
return
"_"
}
if
ltype
==
"last"
{
solo
,
parts
=
parts
[
len
(
parts
)
-
1
],
parts
[
:
len
(
parts
)
-
1
]
part_prefix_len
:=
make
([]
int
,
len
(
parts
))
if
ltype
==
Initials
{
// a primeira letra de cada parte deve aparecer
for
i
:=
0
;
i
<
len
(
parts
);
i
++
{
part_prefix_len
[
i
]
=
1
}
x
:=
variance
/
len
(
parts
)
y
:=
variance
%
len
(
parts
)
for
i
:=
range
parts
{
if
y
!=
0
{
login
+=
parts
[
i
][
:
x
+
1
+
fix
]
y
--
}
else
if
ltype
==
FirstName
{
// a primeira parte inteira deve aparecer
part_prefix_len
[
0
]
=
len
(
parts
[
0
])
}
else
{
login
+=
parts
[
i
][
:
x
+
fix
]
// a primeira letra de cada parte deve aparecer
for
i
:=
0
;
i
<
len
(
parts
);
i
++
{
part_prefix_len
[
i
]
=
1
}
// assim com a parte final do nome
part_prefix_len
[
len
(
parts
)
-
1
]
=
len
(
parts
[
len
(
parts
)
-
1
])
}
part_prefix_ix
:=
0
for
i
:=
0
;
i
<
variance
;
i
++
{
ok
:=
false
for
k
:=
0
;
k
<
len
(
parts
)
&&
!
ok
;
k
++
{
if
part_prefix_len
[
part_prefix_ix
]
<
len
(
parts
[
part_prefix_ix
])
{
part_prefix_len
[
part_prefix_ix
]
++
ok
=
true
}
part_prefix_ix
=
(
part_prefix_ix
+
1
)
%
len
(
parts
)
}
if
!
ok
{
// acabou o que fazer, vamos abandonar porque não vai mudar mais nada
break
}
}
if
ltype
==
"ini"
{
login
+=
grr
[
2
:
4
]
}
if
ltype
==
"last"
{
login
+=
solo
}
login
:=
""
for
i
:=
0
;
i
<
len
(
parts
);
i
++
{
login
+=
parts
[
i
][
:
part_prefix_len
[
i
]]
}
if
login
==
""
{
return
"_"
}
if
ltype
==
Initials
{
login
+=
grr
[
2
:
4
]
}
return
login
}
...
...
@@ -274,10 +291,18 @@ func formatName(name string) []string {
return
parts
}
func
genUniqueUID
(
name
,
grr
,
ltype
string
,
users
[]
model
.
User
)
(
string
,
error
)
{
func
genUniqueUID
(
name
,
grr
string
,
ltype
String
string
,
users
[]
model
.
User
)
(
string
,
error
)
{
var
uid
string
used
,
variance
:=
true
,
0
for
used
{
var
ltype
LoginType
if
ltypeString
==
"ini"
{
ltype
=
Initials
}
else
if
ltypeString
==
"first"
{
ltype
=
FirstName
}
else
{
ltype
=
LastName
}
uid
=
genLogin
(
name
,
grr
,
ltype
,
variance
)
// already taken or alias for it exists :(
...
...
@@ -517,6 +542,14 @@ func validateStatus(status string) error {
return
nil
}
func
validateLtype
(
ltype
string
)
error
{
if
ltype
!=
"ini"
&&
ltype
!=
"first"
&&
ltype
!=
"last"
{
err
:=
fmt
.
Errorf
(
"Login type can only be
\"
ini
\"
,
\"
first
\"
or
\"
last
\"
"
)
return
err
}
return
nil
}
func
validateGRR
(
grr
string
)
error
{
// OK if empty, only "ini" login type requires it and we check :)
if
grr
==
"_"
{
return
nil
}
...
...
@@ -580,6 +613,11 @@ func validateInputs(opts model.Opts) error {
err
=
validateStatus
(
opts
.
Status
)
if
err
!=
nil
{
return
err
}
err
=
validateLtype
(
opts
.
Ltype
)
if
err
!=
nil
{
return
err
}
// it’s OK if UID is empty here, we generate it later :)
if
opts
.
UID
!=
""
{
err
:=
validateUID
(
opts
.
UID
)
...
...
This diff is collapsed.
Click to expand it.
cmd/user/create_test.go
0 → 100644
+
110
−
0
View file @
e9762f8b
package
user
import
(
"reflect"
"testing"
)
func
assertEqual
(
t
*
testing
.
T
,
a
any
,
b
any
)
{
if
!
reflect
.
DeepEqual
(
a
,
b
)
{
t
.
Fatalf
(
"%s != %s"
,
a
,
b
)
}
}
func
TestGenLogin
(
t
*
testing
.
T
)
{
assertEqual
(
t
,
genLogin
(
""
,
"20241982"
,
Initials
,
0
),
"_"
)
assertEqual
(
t
,
genLogin
(
""
,
"20241982"
,
Initials
,
1
),
"_"
)
assertEqual
(
t
,
genLogin
(
""
,
"20241982"
,
Initials
,
2
),
"_"
)
assertEqual
(
t
,
genLogin
(
""
,
"20241982"
,
Initials
,
3
),
"_"
)
assertEqual
(
t
,
genLogin
(
""
,
"20241982"
,
FirstName
,
0
),
"_"
)
assertEqual
(
t
,
genLogin
(
""
,
"20241982"
,
FirstName
,
1
),
"_"
)
assertEqual
(
t
,
genLogin
(
""
,
"20241982"
,
FirstName
,
2
),
"_"
)
assertEqual
(
t
,
genLogin
(
""
,
"20241982"
,
FirstName
,
3
),
"_"
)
assertEqual
(
t
,
genLogin
(
""
,
"20241982"
,
LastName
,
0
),
"_"
)
assertEqual
(
t
,
genLogin
(
""
,
"20241982"
,
LastName
,
1
),
"_"
)
assertEqual
(
t
,
genLogin
(
""
,
"20241982"
,
LastName
,
2
),
"_"
)
assertEqual
(
t
,
genLogin
(
""
,
"20241982"
,
LastName
,
3
),
"_"
)
assertEqual
(
t
,
genLogin
(
"de"
,
"20241982"
,
Initials
,
0
),
"_"
)
assertEqual
(
t
,
genLogin
(
"de"
,
"20241982"
,
Initials
,
1
),
"_"
)
assertEqual
(
t
,
genLogin
(
"de"
,
"20241982"
,
Initials
,
2
),
"_"
)
assertEqual
(
t
,
genLogin
(
"de"
,
"20241982"
,
Initials
,
3
),
"_"
)
assertEqual
(
t
,
genLogin
(
"de"
,
"20241982"
,
FirstName
,
0
),
"_"
)
assertEqual
(
t
,
genLogin
(
"de"
,
"20241982"
,
FirstName
,
1
),
"_"
)
assertEqual
(
t
,
genLogin
(
"de"
,
"20241982"
,
FirstName
,
2
),
"_"
)
assertEqual
(
t
,
genLogin
(
"de"
,
"20241982"
,
FirstName
,
3
),
"_"
)
assertEqual
(
t
,
genLogin
(
"de"
,
"20241982"
,
LastName
,
0
),
"_"
)
assertEqual
(
t
,
genLogin
(
"de"
,
"20241982"
,
LastName
,
1
),
"_"
)
assertEqual
(
t
,
genLogin
(
"de"
,
"20241982"
,
LastName
,
2
),
"_"
)
assertEqual
(
t
,
genLogin
(
"de"
,
"20241982"
,
LastName
,
3
),
"_"
)
assertEqual
(
t
,
genLogin
(
"da de"
,
"20241982"
,
Initials
,
0
),
"_"
)
assertEqual
(
t
,
genLogin
(
"da de"
,
"20241982"
,
Initials
,
1
),
"_"
)
assertEqual
(
t
,
genLogin
(
"da de"
,
"20241982"
,
Initials
,
2
),
"_"
)
assertEqual
(
t
,
genLogin
(
"da de"
,
"20241982"
,
Initials
,
3
),
"_"
)
assertEqual
(
t
,
genLogin
(
"da de"
,
"20241982"
,
FirstName
,
0
),
"_"
)
assertEqual
(
t
,
genLogin
(
"da de"
,
"20241982"
,
FirstName
,
1
),
"_"
)
assertEqual
(
t
,
genLogin
(
"da de"
,
"20241982"
,
FirstName
,
2
),
"_"
)
assertEqual
(
t
,
genLogin
(
"da de"
,
"20241982"
,
FirstName
,
3
),
"_"
)
assertEqual
(
t
,
genLogin
(
"da de"
,
"20241982"
,
LastName
,
0
),
"_"
)
assertEqual
(
t
,
genLogin
(
"da de"
,
"20241982"
,
LastName
,
1
),
"_"
)
assertEqual
(
t
,
genLogin
(
"da de"
,
"20241982"
,
LastName
,
2
),
"_"
)
assertEqual
(
t
,
genLogin
(
"da de"
,
"20241982"
,
LastName
,
3
),
"_"
)
assertEqual
(
t
,
genLogin
(
"Fabiano"
,
"20241982"
,
Initials
,
0
),
"f24"
)
assertEqual
(
t
,
genLogin
(
"Fabiano"
,
"20241982"
,
Initials
,
1
),
"fa24"
)
assertEqual
(
t
,
genLogin
(
"Fabiano"
,
"20241982"
,
Initials
,
2
),
"fab24"
)
assertEqual
(
t
,
genLogin
(
"Fabiano"
,
"20241982"
,
Initials
,
3
),
"fabi24"
)
assertEqual
(
t
,
genLogin
(
"Fabiano"
,
"20241982"
,
FirstName
,
0
),
"fabiano"
)
assertEqual
(
t
,
genLogin
(
"Fabiano"
,
"20241982"
,
FirstName
,
1
),
"fabiano"
)
assertEqual
(
t
,
genLogin
(
"Fabiano"
,
"20241982"
,
FirstName
,
2
),
"fabiano"
)
assertEqual
(
t
,
genLogin
(
"Fabiano"
,
"20241982"
,
FirstName
,
3
),
"fabiano"
)
assertEqual
(
t
,
genLogin
(
"Fabiano"
,
"20241982"
,
LastName
,
0
),
"fabiano"
)
assertEqual
(
t
,
genLogin
(
"Fabiano"
,
"20241982"
,
LastName
,
1
),
"fabiano"
)
assertEqual
(
t
,
genLogin
(
"Fabiano"
,
"20241982"
,
LastName
,
2
),
"fabiano"
)
assertEqual
(
t
,
genLogin
(
"Fabiano"
,
"20241982"
,
LastName
,
3
),
"fabiano"
)
assertEqual
(
t
,
genLogin
(
"Fabiano Antunes Pereira de Souza"
,
"20241982"
,
Initials
,
0
),
"faps24"
)
assertEqual
(
t
,
genLogin
(
"Fabiano Antunes Pereira de Souza"
,
"20241982"
,
Initials
,
1
),
"faaps24"
)
assertEqual
(
t
,
genLogin
(
"Fabiano Antunes Pereira de Souza"
,
"20241982"
,
Initials
,
2
),
"faanps24"
)
assertEqual
(
t
,
genLogin
(
"Fabiano Antunes Pereira de Souza"
,
"20241982"
,
Initials
,
3
),
"faanpes24"
)
assertEqual
(
t
,
genLogin
(
"Fabiano Antunes Pereira de Souza"
,
"20241982"
,
Initials
,
14
),
"fabiaantunperesouz24"
)
assertEqual
(
t
,
genLogin
(
"Fabiano Antunes Pereira de Souza"
,
"20241982"
,
Initials
,
18
),
"fabianantunepereisouza24"
)
assertEqual
(
t
,
genLogin
(
"Fabiano Antunes Pereira de Souza"
,
"20241982"
,
Initials
,
19
),
"fabianantunepereirsouza24"
)
assertEqual
(
t
,
genLogin
(
"Fabiano Antunes Pereira de Souza"
,
"20241982"
,
Initials
,
20
),
"fabianoantunepereirsouza24"
)
assertEqual
(
t
,
genLogin
(
"Fabiano Antunes Pereira de Souza"
,
"20241982"
,
Initials
,
21
),
"fabianoantunespereirsouza24"
)
assertEqual
(
t
,
genLogin
(
"Fabiano Antunes Pereira de Souza"
,
"20241982"
,
Initials
,
22
),
"fabianoantunespereirasouza24"
)
assertEqual
(
t
,
genLogin
(
"Fabiano Antunes Pereira de Souza"
,
"20241982"
,
Initials
,
40
),
"fabianoantunespereirasouza24"
)
assertEqual
(
t
,
genLogin
(
"Fabiano Antunes Pereira de Souza"
,
"20241982"
,
Initials
,
50
),
"fabianoantunespereirasouza24"
)
assertEqual
(
t
,
genLogin
(
"Fabiano Antunes Pereira de Souza"
,
"20241982"
,
FirstName
,
0
),
"fabiano"
)
assertEqual
(
t
,
genLogin
(
"Fabiano Antunes Pereira de Souza"
,
"20241982"
,
FirstName
,
1
),
"fabianoa"
)
assertEqual
(
t
,
genLogin
(
"Fabiano Antunes Pereira de Souza"
,
"20241982"
,
FirstName
,
2
),
"fabianoap"
)
assertEqual
(
t
,
genLogin
(
"Fabiano Antunes Pereira de Souza"
,
"20241982"
,
FirstName
,
3
),
"fabianoaps"
)
assertEqual
(
t
,
genLogin
(
"Fabiano Antunes Pereira de Souza"
,
"20241982"
,
FirstName
,
4
),
"fabianoanps"
)
assertEqual
(
t
,
genLogin
(
"Fabiano Antunes Pereira de Souza"
,
"20241982"
,
FirstName
,
16
),
"fabianoantunepereisouza"
)
assertEqual
(
t
,
genLogin
(
"Fabiano Antunes Pereira de Souza"
,
"20241982"
,
FirstName
,
17
),
"fabianoantunepereirsouza"
)
assertEqual
(
t
,
genLogin
(
"Fabiano Antunes Pereira de Souza"
,
"20241982"
,
FirstName
,
18
),
"fabianoantunespereirsouza"
)
assertEqual
(
t
,
genLogin
(
"Fabiano Antunes Pereira de Souza"
,
"20241982"
,
FirstName
,
19
),
"fabianoantunespereirasouza"
)
assertEqual
(
t
,
genLogin
(
"Fabiano Antunes Pereira de Souza"
,
"20241982"
,
FirstName
,
20
),
"fabianoantunespereirasouza"
)
assertEqual
(
t
,
genLogin
(
"Fabiano Antunes Pereira de Souza"
,
"20241982"
,
FirstName
,
50
),
"fabianoantunespereirasouza"
)
assertEqual
(
t
,
genLogin
(
"Fabiano Antunes Pereira de Souza"
,
"20241982"
,
LastName
,
0
),
"fapsouza"
)
assertEqual
(
t
,
genLogin
(
"Fabiano Antunes Pereira de Souza"
,
"20241982"
,
LastName
,
1
),
"faapsouza"
)
assertEqual
(
t
,
genLogin
(
"Fabiano Antunes Pereira de Souza"
,
"20241982"
,
LastName
,
2
),
"faanpsouza"
)
assertEqual
(
t
,
genLogin
(
"Fabiano Antunes Pereira de Souza"
,
"20241982"
,
LastName
,
3
),
"faanpesouza"
)
assertEqual
(
t
,
genLogin
(
"Fabiano Antunes Pereira de Souza"
,
"20241982"
,
LastName
,
15
),
"fabianantunepereirsouza"
)
assertEqual
(
t
,
genLogin
(
"Fabiano Antunes Pereira de Souza"
,
"20241982"
,
LastName
,
16
),
"fabianoantunepereirsouza"
)
assertEqual
(
t
,
genLogin
(
"Fabiano Antunes Pereira de Souza"
,
"20241982"
,
LastName
,
17
),
"fabianoantunespereirsouza"
)
assertEqual
(
t
,
genLogin
(
"Fabiano Antunes Pereira de Souza"
,
"20241982"
,
LastName
,
18
),
"fabianoantunespereirasouza"
)
assertEqual
(
t
,
genLogin
(
"Fabiano Antunes Pereira de Souza"
,
"20241982"
,
LastName
,
19
),
"fabianoantunespereirasouza"
)
assertEqual
(
t
,
genLogin
(
"Fabiano Antunes Pereira de Souza"
,
"20241982"
,
LastName
,
100
),
"fabianoantunespereirasouza"
)
}
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment