| 
									
										
										
										
											2023-02-09 19:18:06 +00:00
										 |  |  | package service | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | import ( | 
					
						
							|  |  |  | 	"errors" | 
					
						
							| 
									
										
										
										
											2024-03-10 21:31:24 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-02-09 19:18:06 +00:00
										 |  |  | 	"x-ui/database" | 
					
						
							|  |  |  | 	"x-ui/database/model" | 
					
						
							|  |  |  | 	"x-ui/logger" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	"gorm.io/gorm" | 
					
						
							|  |  |  | ) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-03-10 21:31:24 +00:00
										 |  |  | type UserService struct{} | 
					
						
							| 
									
										
										
										
											2023-02-09 19:18:06 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | func (s *UserService) GetFirstUser() (*model.User, error) { | 
					
						
							|  |  |  | 	db := database.GetDB() | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	user := &model.User{} | 
					
						
							|  |  |  | 	err := db.Model(model.User{}). | 
					
						
							|  |  |  | 		First(user). | 
					
						
							|  |  |  | 		Error | 
					
						
							|  |  |  | 	if err != nil { | 
					
						
							|  |  |  | 		return nil, err | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 	return user, nil | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-04-21 15:30:14 +00:00
										 |  |  | func (s *UserService) CheckUser(username string, password string, secret string) *model.User { | 
					
						
							| 
									
										
										
										
											2023-02-09 19:18:06 +00:00
										 |  |  | 	db := database.GetDB() | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	user := &model.User{} | 
					
						
							|  |  |  | 	err := db.Model(model.User{}). | 
					
						
							| 
									
										
										
										
											2023-04-21 15:30:14 +00:00
										 |  |  | 		Where("username = ? and password = ? and login_secret = ?", username, password, secret). | 
					
						
							| 
									
										
										
										
											2023-02-09 19:18:06 +00:00
										 |  |  | 		First(user). | 
					
						
							|  |  |  | 		Error | 
					
						
							|  |  |  | 	if err == gorm.ErrRecordNotFound { | 
					
						
							|  |  |  | 		return nil | 
					
						
							|  |  |  | 	} else if err != nil { | 
					
						
							|  |  |  | 		logger.Warning("check user err:", err) | 
					
						
							|  |  |  | 		return nil | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 	return user | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | func (s *UserService) UpdateUser(id int, username string, password string) error { | 
					
						
							|  |  |  | 	db := database.GetDB() | 
					
						
							|  |  |  | 	return db.Model(model.User{}). | 
					
						
							|  |  |  | 		Where("id = ?", id). | 
					
						
							| 
									
										
										
										
											2023-02-20 17:29:55 +00:00
										 |  |  | 		Updates(map[string]interface{}{"username": username, "password": password}). | 
					
						
							| 
									
										
										
										
											2023-02-09 19:18:06 +00:00
										 |  |  | 		Error | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-04-21 15:30:14 +00:00
										 |  |  | func (s *UserService) UpdateUserSecret(id int, secret string) error { | 
					
						
							|  |  |  | 	db := database.GetDB() | 
					
						
							|  |  |  | 	return db.Model(model.User{}). | 
					
						
							|  |  |  | 		Where("id = ?", id). | 
					
						
							|  |  |  | 		Update("login_secret", secret). | 
					
						
							|  |  |  | 		Error | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | func (s *UserService) RemoveUserSecret() error { | 
					
						
							|  |  |  | 	db := database.GetDB() | 
					
						
							|  |  |  | 	return db.Model(model.User{}). | 
					
						
							|  |  |  | 		Where("1 = 1"). | 
					
						
							|  |  |  | 		Update("login_secret", ""). | 
					
						
							|  |  |  | 		Error | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | func (s *UserService) GetUserSecret(id int) *model.User { | 
					
						
							|  |  |  | 	db := database.GetDB() | 
					
						
							|  |  |  | 	user := &model.User{} | 
					
						
							|  |  |  | 	err := db.Model(model.User{}). | 
					
						
							|  |  |  | 		Where("id = ?", id). | 
					
						
							|  |  |  | 		First(user). | 
					
						
							|  |  |  | 		Error | 
					
						
							|  |  |  | 	if err == gorm.ErrRecordNotFound { | 
					
						
							|  |  |  | 		return nil | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 	return user | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-03-12 17:15:44 +00:00
										 |  |  | func (s *UserService) CheckSecretExistence() (bool, error) { | 
					
						
							|  |  |  | 	db := database.GetDB() | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	var count int64 | 
					
						
							|  |  |  | 	err := db.Model(model.User{}). | 
					
						
							|  |  |  | 		Where("login_secret IS NOT NULL"). | 
					
						
							|  |  |  | 		Count(&count). | 
					
						
							|  |  |  | 		Error | 
					
						
							|  |  |  | 	if err != nil { | 
					
						
							|  |  |  | 		return false, err | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	return count > 0, nil | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-02-09 19:18:06 +00:00
										 |  |  | func (s *UserService) UpdateFirstUser(username string, password string) error { | 
					
						
							|  |  |  | 	if username == "" { | 
					
						
							|  |  |  | 		return errors.New("username can not be empty") | 
					
						
							|  |  |  | 	} else if password == "" { | 
					
						
							|  |  |  | 		return errors.New("password can not be empty") | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 	db := database.GetDB() | 
					
						
							|  |  |  | 	user := &model.User{} | 
					
						
							|  |  |  | 	err := db.Model(model.User{}).First(user).Error | 
					
						
							|  |  |  | 	if database.IsNotFound(err) { | 
					
						
							|  |  |  | 		user.Username = username | 
					
						
							|  |  |  | 		user.Password = password | 
					
						
							|  |  |  | 		return db.Model(model.User{}).Create(user).Error | 
					
						
							|  |  |  | 	} else if err != nil { | 
					
						
							|  |  |  | 		return err | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 	user.Username = username | 
					
						
							|  |  |  | 	user.Password = password | 
					
						
							|  |  |  | 	return db.Save(user).Error | 
					
						
							|  |  |  | } |