From e49eca75023cb3d53baf3f06ac71b9394d05bbb5 Mon Sep 17 00:00:00 2001 From: Theo S Schult <tss24@inf.ufpr.br> Date: Thu, 20 Feb 2025 14:09:03 -0300 Subject: [PATCH] Sorcery to unify genLogin* functions --- cmd/user/create.go | 107 +++++++++++---------------------------------- 1 file changed, 26 insertions(+), 81 deletions(-) diff --git a/cmd/user/create.go b/cmd/user/create.go index 94faae8..438505c 100644 --- a/cmd/user/create.go +++ b/cmd/user/create.go @@ -231,42 +231,47 @@ func genGecos(u model.User) model.User { return u } -// basically takes the initials and the grr year. -// if variance increases we take next letter of -// 1st name, then next letter of 2nd name, etc... -func genLoginIni(name string, grr string, variance int) string { +// 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) - if len(parts) == 0 { - return "_" + if len(parts) <= 1 { + if ltype != "ini" || len(parts) == 0 { + return "_" + } + } + + if ltype == "first" { + login, parts, fix = parts[0], parts[1:], 0 + variance++ + } + + if ltype == "last" { + solo, parts = parts[len(parts)-1], parts[:len(parts)-1] } + x := variance / len(parts) y := variance % len(parts) for i := range parts { if y != 0 { - login += parts[i][:x+2] + login += parts[i][:x+1+fix] y-- } else { - login += parts[i][:x+1] + login += parts[i][:x+fix] } } - return login + grr[2:4] -} + if ltype == "ini" { login += grr[2:4] } + if ltype == "last" { login += solo } -// parent function for generating a login automatically -func genLogin(name string, grr string, ltype string, variance int) string { - var login string - switch ltype { - case "", "ini": - login = genLoginIni(name, grr, variance) - case "first": - login = genLoginFirst(name, variance) - case "last": - login = genLoginLast(name, variance) - } return login } @@ -286,66 +291,6 @@ func formatName(name string) []string { return parts } -// basically takes 1st name and the initial of the 2nd. -// if variance increases we take more initials, and if -// it keeps going we put more letters in each name -func genLoginFirst(name string, variance int) string { - parts := formatName(name) - - if len(parts) == 0 { - return "_" - } - - // Separate first name - first, parts := parts[0], parts[1:] - login := first - - variance++ - x := variance / len(parts) - y := variance % len(parts) - - for i := range parts { - if y != 0 { - login += parts[i][:x+1] - y-- - } else { - login += parts[i][:x] - } - } - - return login -} - -// basically takes initials up to last name and then appends it. -// if variance increases we put more letters in each name -func genLoginLast(name string, variance int) string { - login := "" - parts := formatName(name) - - if len(parts) <= 1 { - return "_" - } - - // Separate last name - last, parts := parts[len(parts)-1], parts[:len(parts)-1] - - x := variance / len(parts) - y := variance % len(parts) - - for i := range parts { - if y != 0 { - login += parts[i][:x+2] - y-- - } else { - login += parts[i][:x+1] - } - } - - login += last - - return login -} - func genUniqueUID(name, grr, ltype string, users []model.User) (string, error) { var uid string used, variance := true, 0 -- GitLab