| 
									
										
										
										
											2019-01-05 22:44:33 +00:00
										 |  |  | package bolt | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | import ( | 
					
						
							|  |  |  | 	"reflect" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	"github.com/asdine/storm" | 
					
						
							|  |  |  | 	"github.com/filebrowser/filebrowser/v2/errors" | 
					
						
							|  |  |  | 	"github.com/filebrowser/filebrowser/v2/users" | 
					
						
							|  |  |  | ) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | type usersBackend struct { | 
					
						
							|  |  |  | 	db *storm.DB | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-01-08 02:03:52 +00:00
										 |  |  | func (st usersBackend) GetBy(i interface{}) (user *users.User, err error) { | 
					
						
							|  |  |  | 	user = &users.User{} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	var arg string | 
					
						
							|  |  |  | 	switch i.(type) { | 
					
						
							|  |  |  | 	case uint: | 
					
						
							|  |  |  | 		arg = "ID" | 
					
						
							|  |  |  | 	case string: | 
					
						
							|  |  |  | 		arg = "Username" | 
					
						
							|  |  |  | 	default: | 
					
						
							|  |  |  | 		return nil, errors.ErrInvalidDataType | 
					
						
							| 
									
										
										
										
											2019-01-05 22:44:33 +00:00
										 |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-01-08 02:03:52 +00:00
										 |  |  | 	err = st.db.One(arg, i, user) | 
					
						
							| 
									
										
										
										
											2019-01-05 22:44:33 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	if err != nil { | 
					
						
							| 
									
										
										
										
											2019-01-08 02:03:52 +00:00
										 |  |  | 		if err == storm.ErrNotFound { | 
					
						
							|  |  |  | 			return nil, errors.ErrNotExist | 
					
						
							|  |  |  | 		} | 
					
						
							| 
									
										
										
										
											2019-01-05 22:44:33 +00:00
										 |  |  | 		return nil, err | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-01-08 02:03:52 +00:00
										 |  |  | 	return | 
					
						
							| 
									
										
										
										
											2019-01-05 22:44:33 +00:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | func (st usersBackend) Gets() ([]*users.User, error) { | 
					
						
							|  |  |  | 	users := []*users.User{} | 
					
						
							|  |  |  | 	err := st.db.All(&users) | 
					
						
							|  |  |  | 	if err == storm.ErrNotFound { | 
					
						
							|  |  |  | 		return nil, errors.ErrNotExist | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	if err != nil { | 
					
						
							|  |  |  | 		return users, err | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	return users, err | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | func (st usersBackend) Update(user *users.User, fields ...string) error { | 
					
						
							|  |  |  | 	if len(fields) == 0 { | 
					
						
							|  |  |  | 		return st.Save(user) | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	for _, field := range fields { | 
					
						
							|  |  |  | 		val := reflect.ValueOf(user).Elem().FieldByName(field).Interface() | 
					
						
							|  |  |  | 		if err := st.db.UpdateField(user, field, val); err != nil { | 
					
						
							|  |  |  | 			return err | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	return nil | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | func (st usersBackend) Save(user *users.User) error { | 
					
						
							|  |  |  | 	err := st.db.Save(user) | 
					
						
							|  |  |  | 	if err == storm.ErrAlreadyExists { | 
					
						
							|  |  |  | 		return errors.ErrExist | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 	return err | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | func (st usersBackend) DeleteByID(id uint) error { | 
					
						
							|  |  |  | 	return st.db.DeleteStruct(&users.User{ID: id}) | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | func (st usersBackend) DeleteByUsername(username string) error { | 
					
						
							| 
									
										
										
										
											2019-01-08 02:03:52 +00:00
										 |  |  | 	user, err := st.GetBy(username) | 
					
						
							| 
									
										
										
										
											2019-01-05 22:44:33 +00:00
										 |  |  | 	if err != nil { | 
					
						
							|  |  |  | 		return err | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	return st.db.DeleteStruct(user) | 
					
						
							|  |  |  | } |