eintopf.info@v0.13.16/service/user/migration.go (about)

     1  // Copyright (C) 2022 The Eintopf authors
     2  //
     3  // This program is free software: you can redistribute it and/or modify
     4  // it under the terms of the GNU Affero General Public License as
     5  // published by the Free Software Foundation, either version 3 of the
     6  // License, or (at your option) any later version.
     7  //
     8  // This program is distributed in the hope that it will be useful,
     9  // but WITHOUT ANY WARRANTY; without even the implied warranty of
    10  // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    11  // GNU Affero General Public License for more details.
    12  //
    13  // You should have received a copy of the GNU Affero General Public License
    14  // along with this program.  If not, see <https://www.gnu.org/licenses/>.
    15  
    16  package user
    17  
    18  import (
    19  	"context"
    20  
    21  	"eintopf.info/internal/crud"
    22  	"eintopf.info/service/auth"
    23  )
    24  
    25  // CreateAdminAccount creates a new admin account, if none exists with the given
    26  // email address.
    27  func CreateAdminAccount(s Service, email, password string) error {
    28  	ctx := auth.ContextWithRole(context.Background(), auth.RoleAdmin)
    29  	users, _, err := s.Find(ctx, &crud.FindParams[FindFilters]{
    30  		Filters: &FindFilters{Email: &email},
    31  	})
    32  	if err != nil {
    33  		return err
    34  	}
    35  	if len(users) > 0 {
    36  		return nil
    37  	}
    38  
    39  	_, err = s.Create(ctx, &NewUser{
    40  		Email:    email,
    41  		Nickname: email,
    42  		Password: password,
    43  		Role:     auth.RoleAdmin,
    44  	})
    45  	return err
    46  }