diff --git a/.gitignore b/.gitignore index 9448f65..ba8c8c9 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,4 @@ *.secret *.png *.env -*.db \ No newline at end of file +**/*.db \ No newline at end of file diff --git a/handlers.go b/handlers.go index 8e1ac66..232961e 100644 --- a/handlers.go +++ b/handlers.go @@ -19,7 +19,7 @@ func HandleRegisterApp(w http.ResponseWriter, r *http.Request) { http.Error(w, "Some of the required parameters is missing", http.StatusBadRequest) } - totp.RegisterApp(requestBody.AppName, requestBody.AccountName) + totp.RegisterApp(requestBody.AppName, requestBody.AccountName, requestBody.Secret) response := typings.ControllerResponse{Data: "App Registered"} w.Header().Set("Content-Type", "application/json") diff --git a/totp/totp.go b/totp/totp.go index a40a178..bdca7bb 100644 --- a/totp/totp.go +++ b/totp/totp.go @@ -17,18 +17,24 @@ func GetSecret(appName string) (string, error) { return strings.TrimSpace(secret), nil } -func RegisterApp(appName, accountName string) { - key, err := totp.Generate(totp.GenerateOpts{ - Issuer: appName, - AccountName: accountName, - }) - if err != nil { - log.Fatal("Error generating key:", err) +func RegisterApp(appName, accountName, secret string) { + var secretKey string + if secret == "" { + key, err := totp.Generate(totp.GenerateOpts{ + Issuer: appName, + AccountName: accountName, + }) + if err != nil { + log.Fatal("Error generating key:", err) + } + secretKey = key.Secret() + } else { + secretKey = secret } // Save secret to database db := dbhandler.InitDB() - dbhandler.StoreSecret(db, accountName, appName, key.Secret()) + dbhandler.StoreSecret(db, accountName, appName, secretKey) fmt.Printf("App %s registered.\n", appName) } diff --git a/typings/types.go b/typings/types.go index 2c48044..c09b0a0 100644 --- a/typings/types.go +++ b/typings/types.go @@ -3,6 +3,7 @@ package typings type RegisterRequest struct { AppName string `json:"appName"` AccountName string `json:"accountName"` + Secret string `json:"secret"` } type GenerateRequest struct {