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.Mail;
|
||||
using System.Security;
|
||||
using System.Threading;
|
||||
|
||||
using ASC.Api.Core;
|
||||
using ASC.Common;
|
||||
@ -83,8 +84,10 @@ namespace ASC.Employee.Core.Controllers
|
||||
private EmployeeWraperFullHelper EmployeeWraperFullHelper { get; }
|
||||
private EmployeeWraperHelper EmployeeWraperHelper { get; }
|
||||
private UserFormatter UserFormatter { get; }
|
||||
public PasswordHasher PasswordHasher { get; }
|
||||
public ILog Log { get; }
|
||||
private PasswordHasher PasswordHasher { get; }
|
||||
private UserHelpTourHelper UserHelpTourHelper { get; }
|
||||
private PersonalSettingsHelper PersonalSettingsHelper { get; }
|
||||
private ILog Log { get; }
|
||||
|
||||
public PeopleController(
|
||||
MessageService messageService,
|
||||
@ -119,7 +122,9 @@ namespace ASC.Employee.Core.Controllers
|
||||
EmployeeWraperFullHelper employeeWraperFullHelper,
|
||||
EmployeeWraperHelper employeeWraperHelper,
|
||||
UserFormatter userFormatter,
|
||||
PasswordHasher passwordHasher)
|
||||
PasswordHasher passwordHasher,
|
||||
UserHelpTourHelper userHelpTourHelper,
|
||||
PersonalSettingsHelper personalSettingsHelper)
|
||||
{
|
||||
Log = option.Get("ASC.Api");
|
||||
Log.Debug("Test");
|
||||
@ -155,6 +160,8 @@ namespace ASC.Employee.Core.Controllers
|
||||
EmployeeWraperHelper = employeeWraperHelper;
|
||||
UserFormatter = userFormatter;
|
||||
PasswordHasher = passwordHasher;
|
||||
UserHelpTourHelper = userHelpTourHelper;
|
||||
PersonalSettingsHelper = personalSettingsHelper;
|
||||
}
|
||||
|
||||
[Read("info")]
|
||||
@ -451,7 +458,7 @@ namespace ASC.Employee.Core.Controllers
|
||||
? true
|
||||
: ("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;
|
||||
|
||||
UpdateContacts(memberModel.Contacts, user);
|
||||
@ -520,7 +527,7 @@ namespace ASC.Employee.Core.Controllers
|
||||
? true
|
||||
: ("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;
|
||||
|
||||
UpdateContacts(memberModel.Contacts, user);
|
||||
@ -665,7 +672,7 @@ namespace ASC.Employee.Core.Controllers
|
||||
if (memberModel.Disable.HasValue)
|
||||
{
|
||||
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)
|
||||
@ -1515,6 +1522,147 @@ namespace ASC.Employee.Core.Controllers
|
||||
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()
|
||||
{
|
||||
return AccountLinker.Get("webstudio");
|
||||
|
@ -1,7 +1,18 @@
|
||||
namespace ASC.People.Models
|
||||
using ASC.Core.Users;
|
||||
|
||||
namespace ASC.People.Models
|
||||
{
|
||||
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