From 7f27745d27af1412aa70f39df9aa1bbdbcd01bfc Mon Sep 17 00:00:00 2001 From: Shannon Date: Mon, 29 May 2017 09:36:07 +0200 Subject: [PATCH] starting to get the invite email with token working --- src/Umbraco.Web/Editors/UsersController.cs | 16 +++++++++++++++- .../Models/Mapping/UserModelMapper.cs | 7 ++++--- .../WebApi/UmbracoAuthorizedApiController.cs | 8 ++++++++ 3 files changed, 27 insertions(+), 4 deletions(-) diff --git a/src/Umbraco.Web/Editors/UsersController.cs b/src/Umbraco.Web/Editors/UsersController.cs index 9de3faefe8..6bfcd5bdbe 100644 --- a/src/Umbraco.Web/Editors/UsersController.cs +++ b/src/Umbraco.Web/Editors/UsersController.cs @@ -9,18 +9,22 @@ using System.Web; using System.Web.Http; using AutoMapper; using ClientDependency.Core; +using Microsoft.AspNet.Identity; using Umbraco.Core; using Umbraco.Core.Configuration; using Umbraco.Core.IO; using Umbraco.Core.Models; +using Umbraco.Core.Models.Identity; using Umbraco.Core.Models.Membership; using Umbraco.Core.Persistence.DatabaseModelDefinitions; +using Umbraco.Core.Security; using Umbraco.Core.Services; using Umbraco.Web.Models.ContentEditing; using Umbraco.Web.Mvc; using Umbraco.Web.WebApi; using Umbraco.Web.WebApi.Filters; using Constants = Umbraco.Core.Constants; +using IUser = Umbraco.Core.Models.Membership.IUser; namespace Umbraco.Web.Editors { @@ -47,6 +51,8 @@ namespace Umbraco.Web.Editors { } + + /// /// Returns a list of the sizes of gravatar urls for the user or null if the gravatar server cannot be reached /// @@ -229,7 +235,7 @@ namespace Umbraco.Web.Editors /// /// This will email the user an invite and generate a token that will be validated in the email /// - public UserDisplay PostInviteUser(UserInvite userSave) + public async Task PostInviteUser(UserInvite userSave) { if (userSave == null) throw new ArgumentNullException("userSave"); @@ -256,6 +262,14 @@ namespace Umbraco.Web.Editors Services.UserService.Save(user); + //TODO: Send an email! + await UserManager.EmailService.SendAsync(new IdentityMessage + { + Body = "You have been invited to the Umbraco Back Office!", + Destination = userSave., + Subject = "You have been invited to the Umbraco Back Office!" + }); + return Mapper.Map(user); } diff --git a/src/Umbraco.Web/Models/Mapping/UserModelMapper.cs b/src/Umbraco.Web/Models/Mapping/UserModelMapper.cs index bd940a9c57..cbcb7ab634 100644 --- a/src/Umbraco.Web/Models/Mapping/UserModelMapper.cs +++ b/src/Umbraco.Web/Models/Mapping/UserModelMapper.cs @@ -48,14 +48,15 @@ namespace Umbraco.Web.Models.Mapping }); config.CreateMap() - .ConstructUsing(invite => new User(invite.Name, invite.Email, invite.Email, Guid.NewGuid().ToString("N"))) + .ConstructUsing(invite => new User(invite.Name, invite.Email, invite.Email, Guid.NewGuid().ToString("N"))) + //generate a token for the invite + .ForMember(user => user.SecurityStamp, expression => expression.MapFrom(x => (DateTime.Now + x.Email).ToSHA1())) .ForMember(user => user.Id, expression => expression.Ignore()) .ForMember(user => user.Avatar, expression => expression.Ignore()) .ForMember(user => user.SessionTimeout, expression => expression.Ignore()) .ForMember(user => user.StartContentIds, expression => expression.Ignore()) .ForMember(user => user.StartMediaIds, expression => expression.Ignore()) - .ForMember(user => user.Language, expression => expression.Ignore()) - .ForMember(user => user.SecurityStamp, expression => expression.Ignore()) + .ForMember(user => user.Language, expression => expression.Ignore()) .ForMember(user => user.ProviderUserKey, expression => expression.Ignore()) .ForMember(user => user.Username, expression => expression.Ignore()) .ForMember(user => user.RawPasswordValue, expression => expression.Ignore()) diff --git a/src/Umbraco.Web/WebApi/UmbracoAuthorizedApiController.cs b/src/Umbraco.Web/WebApi/UmbracoAuthorizedApiController.cs index 9577e840e1..8328cfa393 100644 --- a/src/Umbraco.Web/WebApi/UmbracoAuthorizedApiController.cs +++ b/src/Umbraco.Web/WebApi/UmbracoAuthorizedApiController.cs @@ -5,6 +5,8 @@ using Umbraco.Core.Configuration; using Umbraco.Web.Security; using Umbraco.Web.WebApi.Filters; using umbraco.BusinessLogic; +using Umbraco.Core.Models.Identity; +using Umbraco.Core.Security; namespace Umbraco.Web.WebApi { @@ -34,6 +36,12 @@ namespace Umbraco.Web.WebApi { } + private BackOfficeUserManager _userManager; + protected BackOfficeUserManager UserManager + { + get { return _userManager ?? (_userManager = TryGetOwinContext().Result.GetBackOfficeUserManager()); } + } + private bool _userisValidated = false; ///