Personal: added register method
This commit is contained in:
parent
d32f555706
commit
6233ab55a3
@ -13,6 +13,7 @@ using System.Threading;
|
||||
using System.Web;
|
||||
|
||||
using ASC.Api.Core;
|
||||
using ASC.Api.Utils;
|
||||
using ASC.Common;
|
||||
using ASC.Common.Logging;
|
||||
using ASC.Common.Utils;
|
||||
@ -95,6 +96,7 @@ namespace ASC.Employee.Core.Controllers
|
||||
private MobileDetector MobileDetector { get; }
|
||||
private ProviderManager ProviderManager { get; }
|
||||
private Constants Constants { get; }
|
||||
private Recaptcha Recaptcha { get; }
|
||||
private ILog Log { get; }
|
||||
|
||||
public PeopleController(
|
||||
@ -136,7 +138,8 @@ namespace ASC.Employee.Core.Controllers
|
||||
CommonLinkUtility commonLinkUtility,
|
||||
MobileDetector mobileDetector,
|
||||
ProviderManager providerManager,
|
||||
Constants constants
|
||||
Constants constants,
|
||||
Recaptcha recaptcha
|
||||
)
|
||||
{
|
||||
Log = option.Get("ASC.Api");
|
||||
@ -178,6 +181,7 @@ namespace ASC.Employee.Core.Controllers
|
||||
MobileDetector = mobileDetector;
|
||||
ProviderManager = providerManager;
|
||||
Constants = constants;
|
||||
Recaptcha = recaptcha;
|
||||
}
|
||||
|
||||
[Read("info")]
|
||||
@ -421,9 +425,91 @@ namespace ASC.Employee.Core.Controllers
|
||||
return users;
|
||||
}
|
||||
|
||||
[AllowAnonymous]
|
||||
[Create(@"register")]
|
||||
public string RegisterUserOnPersonal(RegisterPersonalUserModel model)
|
||||
{
|
||||
if (!CoreBaseSettings.Personal) throw new MethodAccessException("Method is only available on personal.onlyoffice.com");
|
||||
|
||||
try
|
||||
{
|
||||
if (CoreBaseSettings.CustomMode) model.Lang = "ru-RU";
|
||||
|
||||
var cultureInfo = SetupInfo.GetPersonalCulture(model.Lang).Value;
|
||||
|
||||
if (cultureInfo != null)
|
||||
{
|
||||
Thread.CurrentThread.CurrentUICulture = cultureInfo;
|
||||
}
|
||||
|
||||
model.Email.ThrowIfNull(new ArgumentException(Resource.ErrorEmailEmpty, "email"));
|
||||
|
||||
if (!model.Email.TestEmailRegex()) throw new ArgumentException(Resource.ErrorNotCorrectEmail, "email");
|
||||
|
||||
if (!SetupInfo.IsSecretEmail(model.Email)
|
||||
&& !string.IsNullOrEmpty(SetupInfo.RecaptchaPublicKey) && !string.IsNullOrEmpty(SetupInfo.RecaptchaPrivateKey))
|
||||
{
|
||||
var ip = Request.Headers["X-Forwarded-For"].ToString() ?? Request.GetUserHostAddress();
|
||||
|
||||
if (string.IsNullOrEmpty(model.RecaptchaResponse)
|
||||
|| !Recaptcha.ValidateRecaptcha(model.RecaptchaResponse, ip))
|
||||
{
|
||||
throw new RecaptchaException(Resource.RecaptchaInvalid);
|
||||
}
|
||||
}
|
||||
|
||||
var newUserInfo = UserManager.GetUserByEmail(model.Email);
|
||||
|
||||
if (UserManager.UserExists(newUserInfo.ID))
|
||||
{
|
||||
if (!SetupInfo.IsSecretEmail(model.Email) || SecurityContext.IsAuthenticated)
|
||||
{
|
||||
throw new Exception(CustomNamingPeople.Substitute<Resource>("ErrorEmailAlreadyExists"));
|
||||
}
|
||||
|
||||
try
|
||||
{
|
||||
SecurityContext.AuthenticateMe(ASC.Core.Configuration.Constants.CoreSystem);
|
||||
UserManager.DeleteUser(newUserInfo.ID);
|
||||
}
|
||||
finally
|
||||
{
|
||||
SecurityContext.Logout();
|
||||
}
|
||||
}
|
||||
if (!model.Spam)
|
||||
{
|
||||
try
|
||||
{
|
||||
//TODO
|
||||
//const string _databaseID = "com";
|
||||
//using (var db = DbManager.FromHttpContext(_databaseID))
|
||||
//{
|
||||
// db.ExecuteNonQuery(new SqlInsert("template_unsubscribe", false)
|
||||
// .InColumnValue("email", email.ToLowerInvariant())
|
||||
// .InColumnValue("reason", "personal")
|
||||
// );
|
||||
// Log.Debug(String.Format("Write to template_unsubscribe {0}", email.ToLowerInvariant()));
|
||||
//}
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
Log.Debug(String.Format("ERROR write to template_unsubscribe {0}, email:{1}", ex.Message, model.Email.ToLowerInvariant()));
|
||||
}
|
||||
}
|
||||
|
||||
StudioNotifyService.SendInvitePersonal(model.Email);
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
return ex.Message;
|
||||
}
|
||||
return string.Empty;
|
||||
}
|
||||
|
||||
[Create]
|
||||
[Authorize(AuthenticationSchemes = "confirm", Roles = "LinkInvite,Everyone")]
|
||||
public EmployeeWraperFull AddMemberFromBody([FromBody]MemberModel memberModel)
|
||||
public EmployeeWraperFull AddMemberFromBody([FromBody] MemberModel memberModel)
|
||||
{
|
||||
return AddMember(memberModel);
|
||||
}
|
||||
@ -431,7 +517,7 @@ namespace ASC.Employee.Core.Controllers
|
||||
[Create]
|
||||
[Authorize(AuthenticationSchemes = "confirm", Roles = "LinkInvite,Everyone")]
|
||||
[Consumes("application/x-www-form-urlencoded")]
|
||||
public EmployeeWraperFull AddMemberFromForm([FromForm]MemberModel memberModel)
|
||||
public EmployeeWraperFull AddMemberFromForm([FromForm] MemberModel memberModel)
|
||||
{
|
||||
return AddMember(memberModel);
|
||||
}
|
||||
@ -495,7 +581,7 @@ namespace ASC.Employee.Core.Controllers
|
||||
}
|
||||
|
||||
[Create("active")]
|
||||
public EmployeeWraperFull AddMemberAsActivatedFromBody([FromBody]MemberModel memberModel)
|
||||
public EmployeeWraperFull AddMemberAsActivatedFromBody([FromBody] MemberModel memberModel)
|
||||
{
|
||||
return AddMemberAsActivated(memberModel);
|
||||
}
|
||||
@ -563,7 +649,7 @@ namespace ASC.Employee.Core.Controllers
|
||||
}
|
||||
|
||||
[Update("{userid}/culture")]
|
||||
public EmployeeWraperFull UpdateMemberCultureFromBody(string userid, [FromBody]UpdateMemberModel memberModel)
|
||||
public EmployeeWraperFull UpdateMemberCultureFromBody(string userid, [FromBody] UpdateMemberModel memberModel)
|
||||
{
|
||||
return UpdateMemberCulture(userid, memberModel);
|
||||
}
|
||||
@ -611,7 +697,7 @@ namespace ASC.Employee.Core.Controllers
|
||||
}
|
||||
|
||||
[Update("{userid}")]
|
||||
public EmployeeWraperFull UpdateMemberFromBody(string userid, [FromBody]UpdateMemberModel memberModel)
|
||||
public EmployeeWraperFull UpdateMemberFromBody(string userid, [FromBody] UpdateMemberModel memberModel)
|
||||
{
|
||||
return UpdateMember(userid, memberModel);
|
||||
}
|
||||
@ -802,7 +888,7 @@ namespace ASC.Employee.Core.Controllers
|
||||
}
|
||||
|
||||
[Update("{userid}/contacts")]
|
||||
public EmployeeWraperFull UpdateMemberContactsFromBody(string userid, [FromBody]UpdateMemberModel memberModel)
|
||||
public EmployeeWraperFull UpdateMemberContactsFromBody(string userid, [FromBody] UpdateMemberModel memberModel)
|
||||
{
|
||||
return UpdateMemberContacts(userid, memberModel);
|
||||
}
|
||||
@ -827,7 +913,7 @@ namespace ASC.Employee.Core.Controllers
|
||||
}
|
||||
|
||||
[Create("{userid}/contacts")]
|
||||
public EmployeeWraperFull SetMemberContactsFromBody(string userid, [FromBody]UpdateMemberModel memberModel)
|
||||
public EmployeeWraperFull SetMemberContactsFromBody(string userid, [FromBody] UpdateMemberModel memberModel)
|
||||
{
|
||||
return SetMemberContacts(userid, memberModel);
|
||||
}
|
||||
@ -839,7 +925,7 @@ namespace ASC.Employee.Core.Controllers
|
||||
return SetMemberContacts(userid, memberModel);
|
||||
}
|
||||
|
||||
private EmployeeWraperFull SetMemberContacts(string userid,UpdateMemberModel memberModel)
|
||||
private EmployeeWraperFull SetMemberContacts(string userid, UpdateMemberModel memberModel)
|
||||
{
|
||||
var user = GetUserInfo(userid);
|
||||
|
||||
@ -852,14 +938,14 @@ namespace ASC.Employee.Core.Controllers
|
||||
}
|
||||
|
||||
[Delete("{userid}/contacts")]
|
||||
public EmployeeWraperFull DeleteMemberContactsFromBody(string userid, [FromBody]UpdateMemberModel memberModel)
|
||||
public EmployeeWraperFull DeleteMemberContactsFromBody(string userid, [FromBody] UpdateMemberModel memberModel)
|
||||
{
|
||||
return DeleteMemberContacts(userid, memberModel);
|
||||
}
|
||||
|
||||
[Delete("{userid}/contacts")]
|
||||
[Consumes("application/x-www-form-urlencoded")]
|
||||
public EmployeeWraperFull DeleteMemberContactsFromForm(string userid, [FromForm]UpdateMemberModel memberModel)
|
||||
public EmployeeWraperFull DeleteMemberContactsFromForm(string userid, [FromForm] UpdateMemberModel memberModel)
|
||||
{
|
||||
return DeleteMemberContacts(userid, memberModel);
|
||||
}
|
||||
@ -984,7 +1070,7 @@ namespace ASC.Employee.Core.Controllers
|
||||
}
|
||||
|
||||
[Update("{userid}/photo")]
|
||||
public ThumbnailsDataWrapper UpdateMemberPhotoFromBody(string userid, [FromBody]UpdateMemberModel model)
|
||||
public ThumbnailsDataWrapper UpdateMemberPhotoFromBody(string userid, [FromBody] UpdateMemberModel model)
|
||||
{
|
||||
return UpdateMemberPhoto(userid, model);
|
||||
}
|
||||
@ -1034,7 +1120,7 @@ namespace ASC.Employee.Core.Controllers
|
||||
|
||||
|
||||
[Create("{userid}/photo/thumbnails")]
|
||||
public ThumbnailsDataWrapper CreateMemberPhotoThumbnailsFromBody(string userid, [FromBody]ThumbnailsModel thumbnailsModel)
|
||||
public ThumbnailsDataWrapper CreateMemberPhotoThumbnailsFromBody(string userid, [FromBody] ThumbnailsModel thumbnailsModel)
|
||||
{
|
||||
return CreateMemberPhotoThumbnails(userid, thumbnailsModel);
|
||||
}
|
||||
@ -1081,7 +1167,7 @@ namespace ASC.Employee.Core.Controllers
|
||||
|
||||
[AllowAnonymous]
|
||||
[Create("password", false)]
|
||||
public object SendUserPasswordFromBody([FromBody]MemberModel memberModel)
|
||||
public object SendUserPasswordFromBody([FromBody] MemberModel memberModel)
|
||||
{
|
||||
return SendUserPassword(memberModel);
|
||||
}
|
||||
@ -1107,7 +1193,7 @@ namespace ASC.Employee.Core.Controllers
|
||||
|
||||
[Update("{userid}/password")]
|
||||
[Authorize(AuthenticationSchemes = "confirm", Roles = "PasswordChange,EmailChange,Activation,EmailActivation,Everyone")]
|
||||
public EmployeeWraperFull ChangeUserPasswordFromBody(Guid userid, [FromBody]MemberModel memberModel)
|
||||
public EmployeeWraperFull ChangeUserPasswordFromBody(Guid userid, [FromBody] MemberModel memberModel)
|
||||
{
|
||||
return ChangeUserPassword(userid, memberModel);
|
||||
}
|
||||
@ -1168,7 +1254,7 @@ namespace ASC.Employee.Core.Controllers
|
||||
|
||||
|
||||
[Create("email", false)]
|
||||
public object SendEmailChangeInstructionsFromBody([FromBody]UpdateMemberModel model)
|
||||
public object SendEmailChangeInstructionsFromBody([FromBody] UpdateMemberModel model)
|
||||
{
|
||||
return SendEmailChangeInstructions(model);
|
||||
}
|
||||
@ -1245,7 +1331,7 @@ namespace ASC.Employee.Core.Controllers
|
||||
|
||||
[Update("activationstatus/{activationstatus}")]
|
||||
[Authorize(AuthenticationSchemes = "confirm", Roles = "Activation,Everyone")]
|
||||
public IEnumerable<EmployeeWraperFull> UpdateEmployeeActivationStatusFromBody(EmployeeActivationStatus activationstatus, [FromBody]UpdateMembersModel model)
|
||||
public IEnumerable<EmployeeWraperFull> UpdateEmployeeActivationStatusFromBody(EmployeeActivationStatus activationstatus, [FromBody] UpdateMembersModel model)
|
||||
{
|
||||
return UpdateEmployeeActivationStatus(activationstatus, model);
|
||||
}
|
||||
@ -1278,7 +1364,7 @@ namespace ASC.Employee.Core.Controllers
|
||||
}
|
||||
|
||||
[Update("type/{type}")]
|
||||
public IEnumerable<EmployeeWraperFull> UpdateUserTypeFromBody(EmployeeType type, [FromBody]UpdateMembersModel model)
|
||||
public IEnumerable<EmployeeWraperFull> UpdateUserTypeFromBody(EmployeeType type, [FromBody] UpdateMembersModel model)
|
||||
{
|
||||
return UpdateUserType(type, model);
|
||||
}
|
||||
@ -1330,7 +1416,7 @@ namespace ASC.Employee.Core.Controllers
|
||||
}
|
||||
|
||||
[Update("status/{status}")]
|
||||
public IEnumerable<EmployeeWraperFull> UpdateUserStatusFromBody(EmployeeStatus status, [FromBody]UpdateMembersModel model)
|
||||
public IEnumerable<EmployeeWraperFull> UpdateUserStatusFromBody(EmployeeStatus status, [FromBody] UpdateMembersModel model)
|
||||
{
|
||||
return UpdateUserStatus(status, model);
|
||||
}
|
||||
@ -1384,7 +1470,7 @@ namespace ASC.Employee.Core.Controllers
|
||||
|
||||
|
||||
[Update("invite")]
|
||||
public IEnumerable<EmployeeWraperFull> ResendUserInvitesFromBody([FromBody]UpdateMembersModel model)
|
||||
public IEnumerable<EmployeeWraperFull> ResendUserInvitesFromBody([FromBody] UpdateMembersModel model)
|
||||
{
|
||||
return ResendUserInvites(model);
|
||||
}
|
||||
@ -1448,7 +1534,7 @@ namespace ASC.Employee.Core.Controllers
|
||||
}
|
||||
|
||||
[Update("delete", Order = -1)]
|
||||
public IEnumerable<EmployeeWraperFull> RemoveUsersFromBody([FromBody]UpdateMembersModel model)
|
||||
public IEnumerable<EmployeeWraperFull> RemoveUsersFromBody([FromBody] UpdateMembersModel model)
|
||||
{
|
||||
return RemoveUsers(model);
|
||||
}
|
||||
@ -1547,14 +1633,14 @@ namespace ASC.Employee.Core.Controllers
|
||||
|
||||
|
||||
[Update("thirdparty/linkaccount")]
|
||||
public void LinkAccountFromBody([FromBody]LinkAccountModel model)
|
||||
public void LinkAccountFromBody([FromBody] LinkAccountModel model)
|
||||
{
|
||||
LinkAccount(model);
|
||||
}
|
||||
|
||||
[Update("thirdparty/linkaccount")]
|
||||
[Consumes("application/x-www-form-urlencoded")]
|
||||
public void LinkAccountFromForm([FromForm]LinkAccountModel model)
|
||||
public void LinkAccountFromForm([FromForm] LinkAccountModel model)
|
||||
{
|
||||
LinkAccount(model);
|
||||
}
|
||||
@ -1827,7 +1913,7 @@ namespace ASC.Employee.Core.Controllers
|
||||
}
|
||||
|
||||
[Update(@"reassign/terminate")]
|
||||
public void TerminateReassignFromBody([FromBody]TerminateModel model)
|
||||
public void TerminateReassignFromBody([FromBody] TerminateModel model)
|
||||
{
|
||||
PermissionContext.DemandPermissions(Constants.Action_EditUser);
|
||||
|
||||
@ -1836,7 +1922,7 @@ namespace ASC.Employee.Core.Controllers
|
||||
|
||||
[Update(@"reassign/terminate")]
|
||||
[Consumes("application/x-www-form-urlencoded")]
|
||||
public void TerminateReassignFromForm([FromForm]TerminateModel model)
|
||||
public void TerminateReassignFromForm([FromForm] TerminateModel model)
|
||||
{
|
||||
PermissionContext.DemandPermissions(Constants.Action_EditUser);
|
||||
|
||||
@ -1844,14 +1930,14 @@ namespace ASC.Employee.Core.Controllers
|
||||
}
|
||||
|
||||
[Create(@"reassign/start")]
|
||||
public ReassignProgressItem StartReassignFromBody([FromBody]StartReassignModel model)
|
||||
public ReassignProgressItem StartReassignFromBody([FromBody] StartReassignModel model)
|
||||
{
|
||||
return StartReassign(model);
|
||||
}
|
||||
|
||||
[Create(@"reassign/start")]
|
||||
[Consumes("application/x-www-form-urlencoded")]
|
||||
public ReassignProgressItem StartReassignFromForm([FromForm]StartReassignModel model)
|
||||
public ReassignProgressItem StartReassignFromForm([FromForm] StartReassignModel model)
|
||||
{
|
||||
return StartReassign(model);
|
||||
}
|
||||
@ -1906,7 +1992,7 @@ namespace ASC.Employee.Core.Controllers
|
||||
}
|
||||
|
||||
[Update(@"remove/terminate")]
|
||||
public void TerminateRemoveFromBody([FromBody]TerminateModel model)
|
||||
public void TerminateRemoveFromBody([FromBody] TerminateModel model)
|
||||
{
|
||||
PermissionContext.DemandPermissions(Constants.Action_EditUser);
|
||||
|
||||
@ -1915,7 +2001,7 @@ namespace ASC.Employee.Core.Controllers
|
||||
|
||||
[Update(@"remove/terminate")]
|
||||
[Consumes("application/x-www-form-urlencoded")]
|
||||
public void TerminateRemoveFromForm([FromForm]TerminateModel model)
|
||||
public void TerminateRemoveFromForm([FromForm] TerminateModel model)
|
||||
{
|
||||
PermissionContext.DemandPermissions(Constants.Action_EditUser);
|
||||
|
||||
@ -1923,14 +2009,14 @@ namespace ASC.Employee.Core.Controllers
|
||||
}
|
||||
|
||||
[Create(@"remove/start")]
|
||||
public RemoveProgressItem StartRemoveFromBody([FromBody]TerminateModel model)
|
||||
public RemoveProgressItem StartRemoveFromBody([FromBody] TerminateModel model)
|
||||
{
|
||||
return StartRemove(model);
|
||||
}
|
||||
|
||||
[Create(@"remove/start")]
|
||||
[Consumes("application/x-www-form-urlencoded")]
|
||||
public RemoveProgressItem StartRemoveFromForm([FromForm]TerminateModel model)
|
||||
public RemoveProgressItem StartRemoveFromForm([FromForm] TerminateModel model)
|
||||
{
|
||||
return StartRemove(model);
|
||||
}
|
||||
|
@ -0,0 +1,10 @@
|
||||
namespace ASC.People.Models
|
||||
{
|
||||
public class RegisterPersonalUserModel
|
||||
{
|
||||
public string Email { get; set; }
|
||||
public string Lang { get; set; }
|
||||
public bool Spam { get; set; }
|
||||
public string RecaptchaResponse { get; set; }
|
||||
}
|
||||
}
|
495
web/ASC.Web.Core/PublicResources/Resource.Designer.cs
generated
495
web/ASC.Web.Core/PublicResources/Resource.Designer.cs
generated
File diff suppressed because it is too large
Load Diff
@ -53,10 +53,10 @@
|
||||
<value>2.0</value>
|
||||
</resheader>
|
||||
<resheader name="reader">
|
||||
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=5.0.6.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=5.0.9.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<resheader name="writer">
|
||||
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=5.0.6.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=5.0.9.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<data name="ActivateMobilePhoneEmptyCode" xml:space="preserve">
|
||||
<value>Das Feld mit dem Prüfcode darf nicht leer sein</value>
|
||||
@ -210,7 +210,7 @@
|
||||
<value>Facebook-Schlüssel</value>
|
||||
</data>
|
||||
<data name="ConsumersFacebookDescription" xml:space="preserve">
|
||||
<value>Verbinden Sie die Anwendung, um sich ins Portal via Facebook anzumelden und Kontakte zu suchen.</value>
|
||||
<value>Verbinden Sie die Anwendung, um sich ins Portal via Facebook anzumelden.</value>
|
||||
</data>
|
||||
<data name="ConsumersFacebookInstruction" xml:space="preserve">
|
||||
<value>Wenn man die Anwendung des Facebook -Dienstes hinzufügt, kann man sein Facebook-Konto mit der Profilseite verknüpfen. So meldet man sich ins ONLYOFFICE™ Portal mit eigenen Facebook-Login-Daten an. Sie können auch ein Facebook-Konto des Kontakts im CRM-Modul finden und mit "Person / Firma bearbeiten" verknüpfen.
|
||||
@ -698,6 +698,9 @@
|
||||
<data name="ReassignDataRemoveUserError" xml:space="preserve">
|
||||
<value>Die Neuzuweisung der Daten für {0} ist nicht abgeschlossen.</value>
|
||||
</data>
|
||||
<data name="RecaptchaInvalid" xml:space="preserve">
|
||||
<value>Ungültiges Recaptcha</value>
|
||||
</data>
|
||||
<data name="SgServerRegion" xml:space="preserve">
|
||||
<value>Asien-Pazifik (Singapur)</value>
|
||||
</data>
|
||||
|
@ -53,10 +53,10 @@
|
||||
<value>2.0</value>
|
||||
</resheader>
|
||||
<resheader name="reader">
|
||||
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=5.0.6.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=5.0.9.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<resheader name="writer">
|
||||
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=5.0.6.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=5.0.9.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<data name="ActivateMobilePhoneEmptyCode" xml:space="preserve">
|
||||
<value>Campo de código de validación no puede estar vacío</value>
|
||||
@ -209,7 +209,7 @@
|
||||
<value>Clave de Facebook</value>
|
||||
</data>
|
||||
<data name="ConsumersFacebookDescription" xml:space="preserve">
|
||||
<value>Conectar la aplicación para acceder al portal usando la cuenta Facebook y buscar contactos.</value>
|
||||
<value>Conectar la aplicación para acceder al portal usando la cuenta Facebook.</value>
|
||||
</data>
|
||||
<data name="ConsumersFacebookInstruction" xml:space="preserve">
|
||||
<value>Si Usted añade la aplicación del servicio Facebook, Usted podrá conectar el acceso al portal ONLYOFFICE™ en la página de su perfil con ayuda de la cuenta Facebook. También Usted podrá encontrar y enlazar la cuenta de Facebook en la página de 'Editar persona/empresa' en el módulo CRM.</value>
|
||||
@ -661,6 +661,9 @@
|
||||
<data name="ReassignDataRemoveUserError" xml:space="preserve">
|
||||
<value>El proceso de reasignación de datos para {0} no se ha completado.</value>
|
||||
</data>
|
||||
<data name="RecaptchaInvalid" xml:space="preserve">
|
||||
<value>Recaptcha inválido</value>
|
||||
</data>
|
||||
<data name="SgServerRegion" xml:space="preserve">
|
||||
<value>Asia Pacífico (Singapur)</value>
|
||||
</data>
|
||||
|
@ -53,10 +53,10 @@
|
||||
<value>2.0</value>
|
||||
</resheader>
|
||||
<resheader name="reader">
|
||||
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=5.0.6.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=5.0.9.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<resheader name="writer">
|
||||
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=5.0.6.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=5.0.9.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<data name="ActivateMobilePhoneEmptyCode" xml:space="preserve">
|
||||
<value>Le champ du code de validation ne peut pas être vide</value>
|
||||
@ -209,7 +209,7 @@
|
||||
<value>Clé de Facebook</value>
|
||||
</data>
|
||||
<data name="ConsumersFacebookDescription" xml:space="preserve">
|
||||
<value>Connecter l'application pour accèder au portail en utilisant le compte Facebook et la recherche des contacts.</value>
|
||||
<value>Connecter l'application pour accèder au portail en utilisant le compte Facebook.</value>
|
||||
</data>
|
||||
<data name="ConsumersFacebookInstruction" xml:space="preserve">
|
||||
<value>Si vous ajoutez une application du service Facebook, vous pouvez connecter votre compte Facebook sur votre page de profil en vue de l'utiliser pour accéder au portail ONLYOFFICE™. Cela vous permet également trouver un compte Facebook d’un contact dans le module CRM et le lier sur la page « Modifier personne/entreprise ».</value>
|
||||
@ -696,6 +696,9 @@
|
||||
<data name="ReassignDataRemoveUserError" xml:space="preserve">
|
||||
<value>Le processus de réaffectation des données pour {0} n'est pas terminé.</value>
|
||||
</data>
|
||||
<data name="RecaptchaInvalid" xml:space="preserve">
|
||||
<value>Recaptcha Invalide</value>
|
||||
</data>
|
||||
<data name="SgServerRegion" xml:space="preserve">
|
||||
<value>Asie-Pacifique (Singapour)</value>
|
||||
</data>
|
||||
|
@ -53,10 +53,10 @@
|
||||
<value>2.0</value>
|
||||
</resheader>
|
||||
<resheader name="reader">
|
||||
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=5.0.6.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=5.0.9.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<resheader name="writer">
|
||||
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=5.0.6.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=5.0.9.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<data name="ActivateMobilePhoneEmptyCode" xml:space="preserve">
|
||||
<value>Il campo Valida codice non può essere vuoto</value>
|
||||
@ -194,7 +194,7 @@
|
||||
<value>Chiave di Facebook</value>
|
||||
</data>
|
||||
<data name="ConsumersFacebookDescription" xml:space="preserve">
|
||||
<value>Collega l'applicazione per registrarsi al portale usando l'account Facebook e cercare contatti.</value>
|
||||
<value>Collega l'applicazione per registrarsi al portale usando l'account Facebook.</value>
|
||||
</data>
|
||||
<data name="ConsumersFacebookInstruction" xml:space="preserve">
|
||||
<value>Se aggiungi un'applicazione del servizio Facebook sarai in grado di collegare il tuo account Facebook al profilo così che tu possa entrare nel portale ONLYOFFICE® direttamente. Inoltre sarà possibile trovare il rispettivo profilo Facebook di un contatto nel modulo CRM e collegarlo alla pagina 'Modifica contatto/azienda'.</value>
|
||||
@ -653,6 +653,9 @@
|
||||
<data name="ReassignDataRemoveUserError" xml:space="preserve">
|
||||
<value>La riassegnazione dei dati in corso per {0} non è completa.</value>
|
||||
</data>
|
||||
<data name="RecaptchaInvalid" xml:space="preserve">
|
||||
<value>Recaptcha non valido</value>
|
||||
</data>
|
||||
<data name="SgServerRegion" xml:space="preserve">
|
||||
<value>Asia Pacifico (Singapore)</value>
|
||||
</data>
|
||||
|
@ -53,10 +53,10 @@
|
||||
<value>2.0</value>
|
||||
</resheader>
|
||||
<resheader name="reader">
|
||||
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=5.0.6.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=5.0.9.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<resheader name="writer">
|
||||
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=5.0.6.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=5.0.9.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<data name="ActivateMobilePhoneEmptyCode" xml:space="preserve">
|
||||
<value>Validation code field cannot be empty</value>
|
||||
@ -209,7 +209,7 @@
|
||||
<value>Facebook Key</value>
|
||||
</data>
|
||||
<data name="ConsumersFacebookDescription" xml:space="preserve">
|
||||
<value>Enable the application to sign in to the portal using a Facebook account and search for contacts.</value>
|
||||
<value>Enable the application to sign in to the portal using a Facebook account.</value>
|
||||
</data>
|
||||
<data name="ConsumersFacebookInstruction" xml:space="preserve">
|
||||
<value>If you add an application of the Facebook service you will be able to connect your Facebook account on your profile page so that you can sign in to the ONLYOFFICE™ portal using it. You will also be able to find a Facebook account of a contact in the CRM module and link it on the 'Edit person/company' page.</value>
|
||||
@ -694,6 +694,9 @@
|
||||
<data name="ReassignDataRemoveUserError" xml:space="preserve">
|
||||
<value>Data reassign process for {0} is not complete.</value>
|
||||
</data>
|
||||
<data name="RecaptchaInvalid" xml:space="preserve">
|
||||
<value>Invalid Recaptcha</value>
|
||||
</data>
|
||||
<data name="SgServerRegion" xml:space="preserve">
|
||||
<value>Asia Pacific (Singapore)</value>
|
||||
</data>
|
||||
|
@ -53,10 +53,10 @@
|
||||
<value>2.0</value>
|
||||
</resheader>
|
||||
<resheader name="reader">
|
||||
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=5.0.6.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=5.0.9.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<resheader name="writer">
|
||||
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=5.0.6.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=5.0.9.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<data name="ActivateMobilePhoneEmptyCode" xml:space="preserve">
|
||||
<value>Поле кода подтверждения не может быть пустым</value>
|
||||
@ -209,7 +209,7 @@
|
||||
<value>Ключ Facebook</value>
|
||||
</data>
|
||||
<data name="ConsumersFacebookDescription" xml:space="preserve">
|
||||
<value>Подключите приложение для входа на портал по учетной записи Facebook и поиска контактов.</value>
|
||||
<value>Подключите приложение для входа на портал по учетной записи Facebook.</value>
|
||||
</data>
|
||||
<data name="ConsumersFacebookInstruction" xml:space="preserve">
|
||||
<value>Добавив приложение сервиса Facebook, Вы сможете на странице своего профиля подключить вход на портал ONLYOFFICE™ с помощью аккаунта Facebook. Также Вы сможете на странице редактирования персоны или компании CRM находить и привязывать аккаунт Facebook.</value>
|
||||
@ -694,6 +694,9 @@
|
||||
<data name="ReassignDataRemoveUserError" xml:space="preserve">
|
||||
<value>Процесс передачи данных для {0} не завершен.</value>
|
||||
</data>
|
||||
<data name="RecaptchaInvalid" xml:space="preserve">
|
||||
<value>Неверный код Recaptcha</value>
|
||||
</data>
|
||||
<data name="SgServerRegion" xml:space="preserve">
|
||||
<value>АТР (Сингапур)</value>
|
||||
</data>
|
||||
|
72
web/ASC.Web.Core/Recaptcha.cs
Normal file
72
web/ASC.Web.Core/Recaptcha.cs
Normal file
@ -0,0 +1,72 @@
|
||||
using System;
|
||||
using System.IO;
|
||||
using System.Net;
|
||||
using System.Security.Authentication;
|
||||
|
||||
using ASC.Web.Studio.Core;
|
||||
|
||||
using Newtonsoft.Json.Linq;
|
||||
|
||||
namespace ASC.Web.Core
|
||||
{
|
||||
public class RecaptchaException : InvalidCredentialException
|
||||
{
|
||||
public RecaptchaException()
|
||||
{
|
||||
}
|
||||
|
||||
public RecaptchaException(string message)
|
||||
: base(message)
|
||||
{
|
||||
}
|
||||
}
|
||||
|
||||
public class Recaptcha
|
||||
{
|
||||
private SetupInfo SetupInfo { get; }
|
||||
|
||||
public Recaptcha(SetupInfo setupInfo)
|
||||
{
|
||||
SetupInfo = setupInfo;
|
||||
}
|
||||
|
||||
|
||||
public bool ValidateRecaptcha(string response, string ip)
|
||||
{
|
||||
try
|
||||
{
|
||||
var data = string.Format("secret={0}&remoteip={1}&response={2}", SetupInfo.RecaptchaPrivateKey, ip, response);
|
||||
|
||||
var webRequest = (HttpWebRequest)WebRequest.Create(SetupInfo.RecaptchaVerifyUrl);
|
||||
webRequest.Method = WebRequestMethods.Http.Post;
|
||||
webRequest.ContentType = "application/x-www-form-urlencoded";
|
||||
webRequest.ContentLength = data.Length;
|
||||
using (var writer = new StreamWriter(webRequest.GetRequestStream()))
|
||||
{
|
||||
writer.Write(data);
|
||||
}
|
||||
|
||||
using (var webResponse = webRequest.GetResponse())
|
||||
using (var reader = new StreamReader(webResponse.GetResponseStream()))
|
||||
{
|
||||
var resp = reader.ReadToEnd();
|
||||
var resObj = JObject.Parse(resp);
|
||||
|
||||
if (resObj["success"] != null && resObj.Value<bool>("success"))
|
||||
{
|
||||
return true;
|
||||
}
|
||||
if (resObj["error-codes"] != null && resObj["error-codes"].HasValues)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
catch (Exception)
|
||||
{
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
@ -53,7 +53,8 @@ namespace ASC.Web.Studio.Core
|
||||
public string MainLogoURL { get; private set; }
|
||||
public string MainLogoMailTmplURL { get; private set; }
|
||||
public List<CultureInfo> EnabledCultures { get; private set; }
|
||||
public List<CultureInfo> EnabledCulturesPersonal { get; private set; }
|
||||
public List<CultureInfo> EnabledCulturesPersonal { get; set; }
|
||||
public List<KeyValuePair<string, CultureInfo>> PersonalCultures { get; private set; }
|
||||
public decimal ExchangeRateRuble { get; private set; }
|
||||
public long MaxImageUploadSize { get; private set; }
|
||||
|
||||
@ -141,12 +142,15 @@ namespace ASC.Web.Studio.Core
|
||||
.Select(l => CultureInfo.GetCultureInfo(l.Trim()))
|
||||
.OrderBy(l => l.DisplayName)
|
||||
.ToList();
|
||||
EnabledCulturesPersonal = GetAppSettings("web.cultures.personal", GetAppSettings("web.cultures", "en-US"))
|
||||
|
||||
EnabledCulturesPersonal = GetAppSettings("web:cultures:personal", GetAppSettings("web:cultures", "en-US"))
|
||||
.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries)
|
||||
.Select(l => CultureInfo.GetCultureInfo(l.Trim()))
|
||||
.OrderBy(l => l.DisplayName)
|
||||
.ToList();
|
||||
|
||||
PersonalCultures = GetPersonalCultures();
|
||||
|
||||
ExchangeRateRuble = GetAppSettings("exchange-rate.ruble", 65);
|
||||
MaxImageUploadSize = GetAppSettings<long>("web:max-upload-size", 1024 * 1024);
|
||||
AvailableFileSize = GetAppSettings("web:available-file-size", 100L * 1024L * 1024L);
|
||||
@ -247,5 +251,55 @@ namespace ASC.Web.Studio.Core
|
||||
}
|
||||
return defaultValue;
|
||||
}
|
||||
|
||||
private List<KeyValuePair<string, CultureInfo>> GetPersonalCultures()
|
||||
{
|
||||
var result = new Dictionary<string, CultureInfo>();
|
||||
|
||||
foreach (var culture in EnabledCulturesPersonal)
|
||||
{
|
||||
if (result.ContainsKey(culture.TwoLetterISOLanguageName))
|
||||
{
|
||||
result.Add(culture.Name, culture);
|
||||
}
|
||||
else
|
||||
{
|
||||
result.Add(culture.TwoLetterISOLanguageName, culture);
|
||||
}
|
||||
}
|
||||
|
||||
return result.OrderBy(item => item.Value.DisplayName).ToList();
|
||||
}
|
||||
|
||||
public KeyValuePair<string, CultureInfo> GetPersonalCulture(string lang)
|
||||
{
|
||||
foreach (var item in PersonalCultures)
|
||||
{
|
||||
if (string.Equals(item.Key, lang, StringComparison.InvariantCultureIgnoreCase))
|
||||
{
|
||||
return item;
|
||||
}
|
||||
}
|
||||
|
||||
var cultureInfo = EnabledCulturesPersonal.Find(c => string.Equals(c.Name, lang, StringComparison.InvariantCultureIgnoreCase));
|
||||
|
||||
if (cultureInfo == null)
|
||||
{
|
||||
cultureInfo = EnabledCulturesPersonal.Find(c => string.Equals(c.TwoLetterISOLanguageName, lang, StringComparison.InvariantCultureIgnoreCase));
|
||||
}
|
||||
|
||||
if (cultureInfo != null)
|
||||
{
|
||||
foreach (var item in PersonalCultures)
|
||||
{
|
||||
if (item.Value == cultureInfo)
|
||||
{
|
||||
return item;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return new KeyValuePair<string, CultureInfo>(lang, cultureInfo);
|
||||
}
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue
Block a user