Browse Source

feat(invite): can now add org user with sername again, #2353

Torkel Ödegaard 10 years ago
parent
commit
e53c1e39d3
3 changed files with 16 additions and 19 deletions
  1. 4 4
      pkg/api/dtos/invite.go
  2. 9 11
      pkg/api/org_invite.go
  3. 3 4
      public/app/features/org/partials/invite.html

+ 4 - 4
pkg/api/dtos/invite.go

@@ -3,10 +3,10 @@ package dtos
 import m "github.com/grafana/grafana/pkg/models"
 
 type AddInviteForm struct {
-	Email      string     `json:"email" binding:"Required"`
-	Name       string     `json:"name"`
-	Role       m.RoleType `json:"role" binding:"Required"`
-	SkipEmails bool       `json:"skipEmails"`
+	LoginOrEmail string     `json:"loginOrEmail" binding:"Required"`
+	Name         string     `json:"name"`
+	Role         m.RoleType `json:"role" binding:"Required"`
+	SkipEmails   bool       `json:"skipEmails"`
 }
 
 type InviteInfo struct {

+ 9 - 11
pkg/api/org_invite.go

@@ -31,12 +31,9 @@ func AddOrgInvite(c *middleware.Context, inviteDto dtos.AddInviteForm) Response
 	if !inviteDto.Role.IsValid() {
 		return ApiError(400, "Invalid role specified", nil)
 	}
-	if !util.IsEmail(inviteDto.Email) {
-		return ApiError(400, "Invalid email specified", nil)
-	}
 
 	// first try get existing user
-	userQuery := m.GetUserByLoginQuery{LoginOrEmail: inviteDto.Email}
+	userQuery := m.GetUserByLoginQuery{LoginOrEmail: inviteDto.LoginOrEmail}
 	if err := bus.Dispatch(&userQuery); err != nil {
 		if err != m.ErrUserNotFound {
 			return ApiError(500, "Failed to query db for existing user check", err)
@@ -46,17 +43,17 @@ func AddOrgInvite(c *middleware.Context, inviteDto dtos.AddInviteForm) Response
 		createOrgUserCmd := m.AddOrgUserCommand{OrgId: c.OrgId, UserId: userQuery.Result.Id, Role: inviteDto.Role}
 		if err := bus.Dispatch(&createOrgUserCmd); err != nil {
 			if err == m.ErrOrgUserAlreadyAdded {
-				return ApiError(412, fmt.Sprintf("User %s is already added to organization", inviteDto.Email), err)
+				return ApiError(412, fmt.Sprintf("User %s is already added to organization", inviteDto.LoginOrEmail), err)
 			}
 			return ApiError(500, "Error while trying to create org user", err)
 		} else {
-			return ApiSuccess("Existing Grafana user added to org " + c.OrgName)
+			return ApiSuccess(fmt.Sprintf("Existing Grafana user %s added to org %s", userQuery.Result.NameOrFallback(), c.OrgName))
 		}
 	}
 
 	cmd := m.CreateTempUserCommand{}
 	cmd.OrgId = c.OrgId
-	cmd.Email = inviteDto.Email
+	cmd.Email = inviteDto.LoginOrEmail
 	cmd.Name = inviteDto.Name
 	cmd.Status = m.TmpUserInvitePending
 	cmd.InvitedByUserId = c.UserId
@@ -69,9 +66,9 @@ func AddOrgInvite(c *middleware.Context, inviteDto dtos.AddInviteForm) Response
 	}
 
 	// send invite email
-	if !inviteDto.SkipEmails {
+	if !inviteDto.SkipEmails && util.IsEmail(inviteDto.LoginOrEmail) {
 		emailCmd := m.SendEmailCommand{
-			To:       []string{inviteDto.Email},
+			To:       []string{inviteDto.LoginOrEmail},
 			Template: "new_user_invite.html",
 			Data: map[string]interface{}{
 				"NameOrEmail": util.StringsFallback2(cmd.Name, cmd.Email),
@@ -85,10 +82,11 @@ func AddOrgInvite(c *middleware.Context, inviteDto dtos.AddInviteForm) Response
 		if err := bus.Dispatch(&emailCmd); err != nil {
 			return ApiError(500, "Failed to send email invite", err)
 		}
-		return ApiSuccess(fmt.Sprintf("Sent invite to %s", inviteDto.Email))
+
+		return ApiSuccess(fmt.Sprintf("Sent invite to %s", inviteDto.LoginOrEmail))
 	}
 
-	return ApiSuccess(fmt.Sprintf("Created invite for %s", inviteDto.Email))
+	return ApiSuccess(fmt.Sprintf("Created invite for %s", inviteDto.LoginOrEmail))
 }
 
 func RevokeInvite(c *middleware.Context) Response {

+ 3 - 4
public/app/features/org/partials/invite.html

@@ -5,11 +5,11 @@
 	</a>
 
 	<h3>
-		Invite New Users
+		Invite Users
 	</h3>
 
 	<div class="modal-tagline">
-		Invite new or add existing Grafana users to the organization
+		Send invite or add existing Grafana users to the organization
 		<span class="highlight-word">{{contextSrv.user.orgName}}</span>
 	</div>
 
@@ -25,8 +25,7 @@
 							Email or Username
 						</li>
 						<li>
-							<input type="email" ng-model="invite.email" required
-							class="input-large tight-form-input" placeholder="email@test.com">
+							<input type="text" ng-model="invite.loginOrEmail" required class="input-large tight-form-input" placeholder="email@test.com">
 						</li>
 						<li class="tight-form-item">
 							Name