| 
									
										
										
										
											2015-01-15 19:16:54 +08:00
										 |  |  | package api | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | import ( | 
					
						
							| 
									
										
										
										
											2015-02-10 22:36:51 +08:00
										 |  |  | 	"github.com/grafana/grafana/pkg/api/dtos" | 
					
						
							| 
									
										
										
										
											2015-02-05 17:37:13 +08:00
										 |  |  | 	"github.com/grafana/grafana/pkg/bus" | 
					
						
							| 
									
										
										
										
											2015-03-23 03:14:00 +08:00
										 |  |  | 	"github.com/grafana/grafana/pkg/metrics" | 
					
						
							| 
									
										
										
										
											2015-02-05 17:37:13 +08:00
										 |  |  | 	"github.com/grafana/grafana/pkg/middleware" | 
					
						
							|  |  |  | 	m "github.com/grafana/grafana/pkg/models" | 
					
						
							| 
									
										
										
										
											2015-02-23 18:24:22 +08:00
										 |  |  | 	"github.com/grafana/grafana/pkg/util" | 
					
						
							| 
									
										
										
										
											2015-01-15 19:16:54 +08:00
										 |  |  | ) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-02-10 22:36:51 +08:00
										 |  |  | func AdminCreateUser(c *middleware.Context, form dtos.AdminCreateUserForm) { | 
					
						
							|  |  |  | 	cmd := m.CreateUserCommand{ | 
					
						
							|  |  |  | 		Login:    form.Login, | 
					
						
							|  |  |  | 		Email:    form.Email, | 
					
						
							|  |  |  | 		Password: form.Password, | 
					
						
							|  |  |  | 		Name:     form.Name, | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	if len(cmd.Login) == 0 { | 
					
						
							|  |  |  | 		cmd.Login = cmd.Email | 
					
						
							|  |  |  | 		if len(cmd.Login) == 0 { | 
					
						
							|  |  |  | 			c.JsonApiErr(400, "Validation error, need specify either username or email", nil) | 
					
						
							|  |  |  | 			return | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	if len(cmd.Password) < 4 { | 
					
						
							|  |  |  | 		c.JsonApiErr(400, "Password is missing or too short", nil) | 
					
						
							|  |  |  | 		return | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	if err := bus.Dispatch(&cmd); err != nil { | 
					
						
							|  |  |  | 		c.JsonApiErr(500, "failed to create user", err) | 
					
						
							|  |  |  | 		return | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-03-23 03:14:00 +08:00
										 |  |  | 	metrics.M_Api_Admin_User_Create.Inc(1) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-11-16 23:28:38 +08:00
										 |  |  | 	user := cmd.Result | 
					
						
							| 
									
										
										
										
											2015-11-16 22:55:02 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-11-16 23:28:38 +08:00
										 |  |  | 	result := m.UserIdDTO{ | 
					
						
							|  |  |  | 		Message: "User created", | 
					
						
							|  |  |  | 		Id:      user.Id, | 
					
						
							|  |  |  | 	} | 
					
						
							| 
									
										
										
										
											2015-11-16 22:55:02 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-11-16 23:28:38 +08:00
										 |  |  | 	c.JSON(200, result) | 
					
						
							| 
									
										
										
										
											2015-02-10 22:36:51 +08:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-02-23 18:24:22 +08:00
										 |  |  | func AdminUpdateUserPassword(c *middleware.Context, form dtos.AdminUpdateUserPasswordForm) { | 
					
						
							|  |  |  | 	userId := c.ParamsInt64(":id") | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	if len(form.Password) < 4 { | 
					
						
							|  |  |  | 		c.JsonApiErr(400, "New password too short", nil) | 
					
						
							|  |  |  | 		return | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	userQuery := m.GetUserByIdQuery{Id: userId} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	if err := bus.Dispatch(&userQuery); err != nil { | 
					
						
							|  |  |  | 		c.JsonApiErr(500, "Could not read user from database", err) | 
					
						
							|  |  |  | 		return | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	passwordHashed := util.EncodePassword(form.Password, userQuery.Result.Salt) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	cmd := m.ChangeUserPasswordCommand{ | 
					
						
							|  |  |  | 		UserId:      userId, | 
					
						
							|  |  |  | 		NewPassword: passwordHashed, | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	if err := bus.Dispatch(&cmd); err != nil { | 
					
						
							|  |  |  | 		c.JsonApiErr(500, "Failed to update user password", err) | 
					
						
							|  |  |  | 		return | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	c.JsonOK("User password updated") | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-02-26 22:43:48 +08:00
										 |  |  | func AdminUpdateUserPermissions(c *middleware.Context, form dtos.AdminUpdateUserPermissionsForm) { | 
					
						
							|  |  |  | 	userId := c.ParamsInt64(":id") | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	cmd := m.UpdateUserPermissionsCommand{ | 
					
						
							|  |  |  | 		UserId:         userId, | 
					
						
							|  |  |  | 		IsGrafanaAdmin: form.IsGrafanaAdmin, | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	if err := bus.Dispatch(&cmd); err != nil { | 
					
						
							|  |  |  | 		c.JsonApiErr(500, "Failed to update user permissions", err) | 
					
						
							|  |  |  | 		return | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	c.JsonOK("User permissions updated") | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-02-11 23:47:22 +08:00
										 |  |  | func AdminDeleteUser(c *middleware.Context) { | 
					
						
							|  |  |  | 	userId := c.ParamsInt64(":id") | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	cmd := m.DeleteUserCommand{UserId: userId} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	if err := bus.Dispatch(&cmd); err != nil { | 
					
						
							|  |  |  | 		c.JsonApiErr(500, "Failed to delete user", err) | 
					
						
							|  |  |  | 		return | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-11-16 23:28:38 +08:00
										 |  |  | 	c.JsonOK("User deleted") | 
					
						
							| 
									
										
										
										
											2015-02-11 23:47:22 +08:00
										 |  |  | } |