People: Added thirdparty/signup method
This commit is contained in:
parent
69fb52026f
commit
741c3a17ab
@ -8,6 +8,7 @@ using System.Linq;
|
|||||||
using System.Net;
|
using System.Net;
|
||||||
using System.Net.Mail;
|
using System.Net.Mail;
|
||||||
using System.Security;
|
using System.Security;
|
||||||
|
using System.Threading;
|
||||||
|
|
||||||
using ASC.Api.Core;
|
using ASC.Api.Core;
|
||||||
using ASC.Common;
|
using ASC.Common;
|
||||||
@ -83,8 +84,10 @@ namespace ASC.Employee.Core.Controllers
|
|||||||
private EmployeeWraperFullHelper EmployeeWraperFullHelper { get; }
|
private EmployeeWraperFullHelper EmployeeWraperFullHelper { get; }
|
||||||
private EmployeeWraperHelper EmployeeWraperHelper { get; }
|
private EmployeeWraperHelper EmployeeWraperHelper { get; }
|
||||||
private UserFormatter UserFormatter { get; }
|
private UserFormatter UserFormatter { get; }
|
||||||
public PasswordHasher PasswordHasher { get; }
|
private PasswordHasher PasswordHasher { get; }
|
||||||
public ILog Log { get; }
|
private UserHelpTourHelper UserHelpTourHelper { get; }
|
||||||
|
private PersonalSettingsHelper PersonalSettingsHelper { get; }
|
||||||
|
private ILog Log { get; }
|
||||||
|
|
||||||
public PeopleController(
|
public PeopleController(
|
||||||
MessageService messageService,
|
MessageService messageService,
|
||||||
@ -119,7 +122,9 @@ namespace ASC.Employee.Core.Controllers
|
|||||||
EmployeeWraperFullHelper employeeWraperFullHelper,
|
EmployeeWraperFullHelper employeeWraperFullHelper,
|
||||||
EmployeeWraperHelper employeeWraperHelper,
|
EmployeeWraperHelper employeeWraperHelper,
|
||||||
UserFormatter userFormatter,
|
UserFormatter userFormatter,
|
||||||
PasswordHasher passwordHasher)
|
PasswordHasher passwordHasher,
|
||||||
|
UserHelpTourHelper userHelpTourHelper,
|
||||||
|
PersonalSettingsHelper personalSettingsHelper)
|
||||||
{
|
{
|
||||||
Log = option.Get("ASC.Api");
|
Log = option.Get("ASC.Api");
|
||||||
Log.Debug("Test");
|
Log.Debug("Test");
|
||||||
@ -155,6 +160,8 @@ namespace ASC.Employee.Core.Controllers
|
|||||||
EmployeeWraperHelper = employeeWraperHelper;
|
EmployeeWraperHelper = employeeWraperHelper;
|
||||||
UserFormatter = userFormatter;
|
UserFormatter = userFormatter;
|
||||||
PasswordHasher = passwordHasher;
|
PasswordHasher = passwordHasher;
|
||||||
|
UserHelpTourHelper = userHelpTourHelper;
|
||||||
|
PersonalSettingsHelper = personalSettingsHelper;
|
||||||
}
|
}
|
||||||
|
|
||||||
[Read("info")]
|
[Read("info")]
|
||||||
@ -451,7 +458,7 @@ namespace ASC.Employee.Core.Controllers
|
|||||||
? true
|
? true
|
||||||
: ("female".Equals(memberModel.Sex, StringComparison.OrdinalIgnoreCase) ? (bool?)false : null);
|
: ("female".Equals(memberModel.Sex, StringComparison.OrdinalIgnoreCase) ? (bool?)false : null);
|
||||||
|
|
||||||
user.BirthDate = memberModel.Birthday != null && memberModel.Birthday != DateTime.MinValue ? TenantUtil.DateTimeFromUtc(Convert.ToDateTime(memberModel.Birthday)) : (DateTime?)null;
|
user.BirthDate = memberModel.Birthday != null && memberModel.Birthday != DateTime.MinValue ? TenantUtil.DateTimeFromUtc(Convert.ToDateTime(memberModel.Birthday)) : null;
|
||||||
user.WorkFromDate = memberModel.Worksfrom != null && memberModel.Worksfrom != DateTime.MinValue ? TenantUtil.DateTimeFromUtc(Convert.ToDateTime(memberModel.Worksfrom)) : DateTime.UtcNow.Date;
|
user.WorkFromDate = memberModel.Worksfrom != null && memberModel.Worksfrom != DateTime.MinValue ? TenantUtil.DateTimeFromUtc(Convert.ToDateTime(memberModel.Worksfrom)) : DateTime.UtcNow.Date;
|
||||||
|
|
||||||
UpdateContacts(memberModel.Contacts, user);
|
UpdateContacts(memberModel.Contacts, user);
|
||||||
@ -520,7 +527,7 @@ namespace ASC.Employee.Core.Controllers
|
|||||||
? true
|
? true
|
||||||
: ("female".Equals(memberModel.Sex, StringComparison.OrdinalIgnoreCase) ? (bool?)false : null);
|
: ("female".Equals(memberModel.Sex, StringComparison.OrdinalIgnoreCase) ? (bool?)false : null);
|
||||||
|
|
||||||
user.BirthDate = memberModel.Birthday != null ? TenantUtil.DateTimeFromUtc(Convert.ToDateTime(memberModel.Birthday)) : (DateTime?)null;
|
user.BirthDate = memberModel.Birthday != null ? TenantUtil.DateTimeFromUtc(Convert.ToDateTime(memberModel.Birthday)) : null;
|
||||||
user.WorkFromDate = memberModel.Worksfrom != null ? TenantUtil.DateTimeFromUtc(Convert.ToDateTime(memberModel.Worksfrom)) : DateTime.UtcNow.Date;
|
user.WorkFromDate = memberModel.Worksfrom != null ? TenantUtil.DateTimeFromUtc(Convert.ToDateTime(memberModel.Worksfrom)) : DateTime.UtcNow.Date;
|
||||||
|
|
||||||
UpdateContacts(memberModel.Contacts, user);
|
UpdateContacts(memberModel.Contacts, user);
|
||||||
@ -665,7 +672,7 @@ namespace ASC.Employee.Core.Controllers
|
|||||||
if (memberModel.Disable.HasValue)
|
if (memberModel.Disable.HasValue)
|
||||||
{
|
{
|
||||||
user.Status = memberModel.Disable.Value ? EmployeeStatus.Terminated : EmployeeStatus.Active;
|
user.Status = memberModel.Disable.Value ? EmployeeStatus.Terminated : EmployeeStatus.Active;
|
||||||
user.TerminatedDate = memberModel.Disable.Value ? DateTime.UtcNow : (DateTime?)null;
|
user.TerminatedDate = memberModel.Disable.Value ? DateTime.UtcNow : null;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (self && !isAdmin)
|
if (self && !isAdmin)
|
||||||
@ -1515,6 +1522,147 @@ namespace ASC.Employee.Core.Controllers
|
|||||||
MessageService.Send(MessageAction.UserUnlinkedSocialAccount, GetMeaningfulProviderName(provider));
|
MessageService.Send(MessageAction.UserUnlinkedSocialAccount, GetMeaningfulProviderName(provider));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
[AllowAnonymous]
|
||||||
|
[Create("thirdparty/signup")]
|
||||||
|
public void SignupAccountFromBody([FromBody] LinkAccountModel model)
|
||||||
|
{
|
||||||
|
LinkAccount(model);
|
||||||
|
}
|
||||||
|
|
||||||
|
[AllowAnonymous]
|
||||||
|
[Update("thirdparty/linkaccount")]
|
||||||
|
[Consumes("application/x-www-form-urlencoded")]
|
||||||
|
public void SignupAccountFromForm([FromForm] LinkAccountModel model)
|
||||||
|
{
|
||||||
|
LinkAccount(model);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void SignupAccount(SignupAccountModel model)
|
||||||
|
{
|
||||||
|
var employeeType = model.EmplType ?? EmployeeType.User;
|
||||||
|
var passwordHash = model.PasswordHash;
|
||||||
|
var mustChangePassword = false;
|
||||||
|
|
||||||
|
if (string.IsNullOrEmpty(passwordHash))
|
||||||
|
{
|
||||||
|
passwordHash = UserManagerWrapper.GeneratePassword();
|
||||||
|
mustChangePassword = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
var thirdPartyProfile = new LoginProfile(Signature, InstanceCrypto, model.SerializedProfile);
|
||||||
|
var newUser = CreateNewUser(GetFirstName(model, thirdPartyProfile), GetLastName(model, thirdPartyProfile), GetEmailAddress(model, thirdPartyProfile), passwordHash, employeeType, false);
|
||||||
|
|
||||||
|
var messageAction = employeeType == EmployeeType.User ? MessageAction.UserCreatedViaInvite : MessageAction.GuestCreatedViaInvite;
|
||||||
|
MessageService.Send(MessageInitiator.System, messageAction, MessageTarget.Create(newUser.ID), newUser.DisplayUserName(false, DisplayUserSettingsHelper));
|
||||||
|
|
||||||
|
var userID = newUser.ID;
|
||||||
|
if (!string.IsNullOrEmpty(thirdPartyProfile.Avatar))
|
||||||
|
{
|
||||||
|
SaveContactImage(userID, thirdPartyProfile.Avatar);
|
||||||
|
}
|
||||||
|
|
||||||
|
GetLinker().AddLink(userID.ToString(), thirdPartyProfile);
|
||||||
|
|
||||||
|
var user = UserManager.GetUsers(userID);
|
||||||
|
var cookiesKey = SecurityContext.AuthenticateMe(user.Email, passwordHash);
|
||||||
|
CookiesManager.SetCookies(CookiesType.AuthKey, cookiesKey);
|
||||||
|
MessageService.Send(MessageAction.LoginSuccess);
|
||||||
|
StudioNotifyService.UserHasJoin();
|
||||||
|
|
||||||
|
if (mustChangePassword)
|
||||||
|
{
|
||||||
|
StudioNotifyService.UserPasswordChange(user);
|
||||||
|
}
|
||||||
|
|
||||||
|
UserHelpTourHelper.IsNewUser = true;
|
||||||
|
if (CoreBaseSettings.Personal)
|
||||||
|
PersonalSettingsHelper.IsNewUser = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
protected string GetEmailAddress(SignupAccountModel model)
|
||||||
|
{
|
||||||
|
if (!string.IsNullOrEmpty(model.Email))
|
||||||
|
return model.Email.Trim();
|
||||||
|
|
||||||
|
return string.Empty;
|
||||||
|
}
|
||||||
|
|
||||||
|
private string GetEmailAddress(SignupAccountModel model, LoginProfile account)
|
||||||
|
{
|
||||||
|
var value = GetEmailAddress(model);
|
||||||
|
return string.IsNullOrEmpty(value) ? account.EMail : value;
|
||||||
|
}
|
||||||
|
|
||||||
|
protected string GetFirstName(SignupAccountModel model)
|
||||||
|
{
|
||||||
|
var value = string.Empty;
|
||||||
|
if (!string.IsNullOrEmpty(model.FirstName)) value = model.FirstName.Trim();
|
||||||
|
return HtmlUtil.GetText(value);
|
||||||
|
}
|
||||||
|
|
||||||
|
private string GetFirstName(SignupAccountModel model, LoginProfile account)
|
||||||
|
{
|
||||||
|
var value = GetFirstName(model);
|
||||||
|
return string.IsNullOrEmpty(value) ? account.FirstName : value;
|
||||||
|
}
|
||||||
|
|
||||||
|
protected string GetLastName(SignupAccountModel model)
|
||||||
|
{
|
||||||
|
var value = string.Empty;
|
||||||
|
if (!string.IsNullOrEmpty(model.LastName)) value = model.LastName.Trim();
|
||||||
|
return HtmlUtil.GetText(value);
|
||||||
|
}
|
||||||
|
|
||||||
|
private string GetLastName(SignupAccountModel model, LoginProfile account)
|
||||||
|
{
|
||||||
|
var value = GetLastName(model);
|
||||||
|
return string.IsNullOrEmpty(value) ? account.LastName : value;
|
||||||
|
}
|
||||||
|
|
||||||
|
private UserInfo CreateNewUser(string firstName, string lastName, string email, string passwordHash, EmployeeType employeeType, bool fromInviteLink)
|
||||||
|
{
|
||||||
|
var isVisitor = employeeType == EmployeeType.Visitor;
|
||||||
|
|
||||||
|
if (SetupInfo.IsSecretEmail(email))
|
||||||
|
{
|
||||||
|
fromInviteLink = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
var userInfo = new UserInfo
|
||||||
|
{
|
||||||
|
FirstName = string.IsNullOrEmpty(firstName) ? UserControlsCommonResource.UnknownFirstName : firstName,
|
||||||
|
LastName = string.IsNullOrEmpty(lastName) ? UserControlsCommonResource.UnknownLastName : lastName,
|
||||||
|
Email = email,
|
||||||
|
};
|
||||||
|
|
||||||
|
if (CoreBaseSettings.Personal)
|
||||||
|
{
|
||||||
|
userInfo.ActivationStatus = EmployeeActivationStatus.Activated;
|
||||||
|
userInfo.CultureName = CoreBaseSettings.CustomMode ? "ru-RU" : Thread.CurrentThread.CurrentUICulture.Name;
|
||||||
|
}
|
||||||
|
|
||||||
|
return UserManagerWrapper.AddUser(userInfo, passwordHash, true, true, isVisitor, fromInviteLink);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void SaveContactImage(Guid userID, string url)
|
||||||
|
{
|
||||||
|
using (var memstream = new MemoryStream())
|
||||||
|
{
|
||||||
|
var req = WebRequest.Create(url);
|
||||||
|
using (var response = req.GetResponse())
|
||||||
|
using (var stream = response.GetResponseStream())
|
||||||
|
{
|
||||||
|
var buffer = new byte[512];
|
||||||
|
int bytesRead;
|
||||||
|
while ((bytesRead = stream.Read(buffer, 0, buffer.Length)) > 0)
|
||||||
|
memstream.Write(buffer, 0, bytesRead);
|
||||||
|
var bytes = memstream.ToArray();
|
||||||
|
|
||||||
|
UserPhotoManager.SaveOrUpdatePhoto(userID, bytes);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private AccountLinker GetLinker()
|
private AccountLinker GetLinker()
|
||||||
{
|
{
|
||||||
return AccountLinker.Get("webstudio");
|
return AccountLinker.Get("webstudio");
|
||||||
|
@ -1,7 +1,18 @@
|
|||||||
namespace ASC.People.Models
|
using ASC.Core.Users;
|
||||||
|
|
||||||
|
namespace ASC.People.Models
|
||||||
{
|
{
|
||||||
public class LinkAccountModel
|
public class LinkAccountModel
|
||||||
{
|
{
|
||||||
public string SerializedProfile{get;set;}
|
public string SerializedProfile { get; set; }
|
||||||
|
}
|
||||||
|
|
||||||
|
public class SignupAccountModel: LinkAccountModel
|
||||||
|
{
|
||||||
|
public EmployeeType? EmplType { get; set; }
|
||||||
|
public string FirstName { get; set; }
|
||||||
|
public string LastName { get; set; }
|
||||||
|
public string Email { get; set; }
|
||||||
|
public string PasswordHash { get; set; }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user