4
0

create_admin.go 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  1. // SPDX-FileCopyrightText: Copyright The Miniflux Authors. All rights reserved.
  2. // SPDX-License-Identifier: Apache-2.0
  3. package cli // import "miniflux.app/v2/internal/cli"
  4. import (
  5. "log/slog"
  6. "miniflux.app/v2/internal/config"
  7. "miniflux.app/v2/internal/model"
  8. "miniflux.app/v2/internal/storage"
  9. "miniflux.app/v2/internal/validator"
  10. )
  11. func createAdminUserFromEnvironmentVariables(store *storage.Storage) {
  12. createAdminUser(store, config.Opts.AdminUsername(), config.Opts.AdminPassword())
  13. }
  14. func createAdminUserFromInteractiveTerminal(store *storage.Storage) {
  15. username, password := askCredentials()
  16. createAdminUser(store, username, password)
  17. }
  18. func createAdminUser(store *storage.Storage, username, password string) {
  19. userCreationRequest := &model.UserCreationRequest{
  20. Username: username,
  21. Password: password,
  22. IsAdmin: true,
  23. }
  24. if store.UserExists(userCreationRequest.Username) {
  25. slog.Info("Skipping admin user creation because it already exists",
  26. slog.String("username", userCreationRequest.Username),
  27. )
  28. return
  29. }
  30. if validationErr := validator.ValidateUserCreationWithPassword(store, userCreationRequest); validationErr != nil {
  31. printErrorAndExit(validationErr.Error())
  32. }
  33. if user, err := store.CreateUser(userCreationRequest); err != nil {
  34. printErrorAndExit(err)
  35. } else {
  36. slog.Info("Created new admin user",
  37. slog.String("username", user.Username),
  38. slog.Int64("user_id", user.ID),
  39. )
  40. }
  41. }