diff --git a/pkg/api/api.go b/pkg/api/api.go index e3cfe9e6788..a2957ce44ae 100644 --- a/pkg/api/api.go +++ b/pkg/api/api.go @@ -22,7 +22,7 @@ func Register(r *macaron.Macaron) { r.Post("/login", bind(dtos.LoginCommand{}), wrap(LoginPost)) r.Get("/login/:name", OAuthLogin) r.Get("/login", LoginView) - r.Get("/signup/invited", Index) + r.Get("/invite", Index) // authed views r.Get("/profile/", reqSignedIn, Index) @@ -43,6 +43,9 @@ func Register(r *macaron.Macaron) { r.Get("/signup", Index) r.Post("/api/user/signup", bind(m.CreateUserCommand{}), wrap(SignUp)) + // invited + r.Get("/api/user/invite/:code", wrap(GetInviteInfoByCode)) + // reset password r.Get("/user/password/send-reset-email", Index) r.Get("/user/password/reset", Index) diff --git a/pkg/api/dtos/invite.go b/pkg/api/dtos/invite.go index 8a857e7fc8d..c9bc5b3bd6b 100644 --- a/pkg/api/dtos/invite.go +++ b/pkg/api/dtos/invite.go @@ -8,3 +8,9 @@ type AddInviteForm struct { Role m.RoleType `json:"role" binding:"Required"` SkipEmails bool `json:"skipEmails"` } + +type InviteInfo struct { + Email string `json:"email"` + Name string `json:"name"` + Username string `json:"username"` +} diff --git a/pkg/api/org_invite.go b/pkg/api/org_invite.go index dd3431aa2d3..e1baa97d329 100644 --- a/pkg/api/org_invite.go +++ b/pkg/api/org_invite.go @@ -96,3 +96,22 @@ func RevokeInvite(c *middleware.Context) Response { return ApiSuccess("Invite revoked") } + +func GetInviteInfoByCode(c *middleware.Context) Response { + query := m.GetTempUsersByCodeQuery{Code: c.Params(":code")} + + if err := bus.Dispatch(&query); err != nil { + if err == m.ErrTempUserNotFound { + return ApiError(404, "Invite not found", nil) + } + return ApiError(500, "Failed to get invite", err) + } + + info := dtos.InviteInfo{ + Email: query.Result.Email, + Name: query.Result.Name, + Username: query.Result.Email, + } + + return Json(200, &info) +} diff --git a/pkg/models/temp_user.go b/pkg/models/temp_user.go index f2c6173dd4c..04db0053827 100644 --- a/pkg/models/temp_user.go +++ b/pkg/models/temp_user.go @@ -68,6 +68,12 @@ type GetTempUsersForOrgQuery struct { Result []*TempUserDTO } +type GetTempUsersByCodeQuery struct { + Code string + + Result *TempUser +} + type TempUserDTO struct { Id int64 `json:"id"` Name string `json:"name"` diff --git a/pkg/services/sqlstore/temp_user.go b/pkg/services/sqlstore/temp_user.go index e8928f2c356..dde4bb286d4 100644 --- a/pkg/services/sqlstore/temp_user.go +++ b/pkg/services/sqlstore/temp_user.go @@ -12,6 +12,7 @@ func init() { bus.AddHandler("sql", CreateTempUser) bus.AddHandler("sql", GetTempUsersForOrg) bus.AddHandler("sql", UpdateTempUserStatus) + bus.AddHandler("sql", GetTempUsersByCode) } func UpdateTempUserStatus(cmd *m.UpdateTempUserStatusCommand) error { @@ -68,3 +69,17 @@ func GetTempUsersForOrg(query *m.GetTempUsersForOrgQuery) error { err := sess.Find(&query.Result) return err } + +func GetTempUsersByCode(query *m.GetTempUsersByCodeQuery) error { + var user m.TempUser + has, err := x.Table("temp_user").Where("code=?", query.Code).Get(&user) + + if err != nil { + return err + } else if has == false { + return m.ErrTempUserNotFound + } + + query.Result = &user + return err +} diff --git a/public/app/controllers/invitedCtrl.js b/public/app/controllers/invitedCtrl.js index 7fe7dde7054..d5bfa22895a 100644 --- a/public/app/controllers/invitedCtrl.js +++ b/public/app/controllers/invitedCtrl.js @@ -6,11 +6,24 @@ function (angular) { var module = angular.module('grafana.controllers'); - module.controller('InvitedCtrl', function($scope, contextSrv) { + module.controller('InvitedCtrl', function($scope, $routeParams, contextSrv, backendSrv) { contextSrv.sidemenu = false; + $scope.user = {}; + $scope.init = function() { + backendSrv.get('/api/user/invite/' + $routeParams.code).then(function(invite) { + $scope.user.name = invite.name; + $scope.user.email = invite.email; + $scope.user.username = invite.email; + $scope.user.inviteId = invite.id; + + $scope.greeting = invite.name || invite.email; + }); + }; + + $scope.submit = function() { }; $scope.init(); diff --git a/public/app/partials/signup_invited.html b/public/app/partials/signup_invited.html index 9c5a3ef571f..6c896b3f249 100644 --- a/public/app/partials/signup_invited.html +++ b/public/app/partials/signup_invited.html @@ -9,65 +9,83 @@ -
+
+

+ Hi, {{greeting}}, Welcome to Grafana party. +

-