private bool TryAuthorize <T>(ChunkedRequestHelper <T> request) { if (request.Type(InstanceCrypto) == ChunkedRequestType.Initiate) { TenantManager.SetCurrentTenant(request.TenantId); SecurityContext.AuthenticateMeWithoutCookie(AuthManager.GetAccountByID(TenantManager.GetCurrentTenant().TenantId, request.AuthKey(InstanceCrypto))); var cultureInfo = request.CultureInfo(SetupInfo); if (cultureInfo != null) { Thread.CurrentThread.CurrentUICulture = cultureInfo; } return(true); } if (!string.IsNullOrEmpty(request.UploadId)) { var uploadSession = ChunkedUploadSessionHolder.GetSession <T>(request.UploadId); if (uploadSession != null) { TenantManager.SetCurrentTenant(uploadSession.TenantId); SecurityContext.AuthenticateMeWithoutCookie(AuthManager.GetAccountByID(TenantManager.GetCurrentTenant().TenantId, uploadSession.UserId)); var culture = SetupInfo.GetPersonalCulture(uploadSession.CultureName).Value; if (culture != null) { Thread.CurrentThread.CurrentUICulture = culture; } return(true); } } return(false); }
private UserInfo JoinByThirdPartyAccount(LoginProfile loginProfile) { if (string.IsNullOrEmpty(loginProfile.EMail)) { throw new Exception(Resource.ErrorNotCorrectEmail); } var userInfo = UserManager.GetUserByEmail(loginProfile.EMail); if (!UserManager.UserExists(userInfo.ID)) { var newUserInfo = ProfileToUserInfo(loginProfile); try { SecurityContext.AuthenticateMeWithoutCookie(ASC.Core.Configuration.Constants.CoreSystem); userInfo = UserManagerWrapper.AddUser(newUserInfo, UserManagerWrapper.GeneratePassword()); } finally { SecurityContext.Logout(); } } var linker = AccountLinker.Get("webstudio"); linker.AddLink(userInfo.ID.ToString(), loginProfile); return(userInfo); }
private void Auth(string userIdString) { if (!Guid.TryParse(userIdString ?? "", out var userId)) { throw new Exception("DocuSign incorrect User ID: " + userIdString); } SecurityContext.AuthenticateMeWithoutCookie(userId); }
public void AuthByClaim() { var id = HttpContextAccessor.HttpContext.User.Claims.FirstOrDefault(r => r.Type == ClaimTypes.Sid); if (Guid.TryParse(id?.Value, out var userId)) { SecurityContext.AuthenticateMeWithoutCookie(userId); } }
private static bool TryAuthenticate(SecurityContext securityContext, AuthManager authManager, int tenantId, Guid userid) { try { securityContext.AuthenticateMeWithoutCookie(authManager.GetAccountByID(tenantId, userid)); return(true); } catch { return(false); } }
protected override void DoJob() { try { Percentage = 0; _tenantManager.SetCurrentTenant(_tenantId); _securityContext.AuthenticateMeWithoutCookie(_userId); //if (HttpContext.Current == null && !WorkContext.IsMono) //{ // HttpContext.Current = new HttpContext( // new HttpRequest("hack", _contextUrl, string.Empty), // new HttpResponse(new System.IO.StringWriter())); //} _pdfCreator.CreateAndSaveFile(_invoiceId); Percentage = 100; PublishChanges(); Status = DistributedTaskStatus.Completed; } catch (Exception ex) { LogManager.GetLogger("ASC.Web").Error(ex); Percentage = 0; Status = DistributedTaskStatus.Failted; Error = ex.Message; } finally { // fake httpcontext break configuration manager for mono if (!WorkContext.IsMono) { //if (HttpContext.Current != null) //{ // new DisposableHttpContext(HttpContext.Current).Dispose(); // HttpContext.Current = null; //} } IsCompleted = true; } }
protected override void DoJob() { try { if (!_IsConfigure) { throw new Exception("Is not configure. Please, call configure method."); } _tenantManager.SetCurrentTenant(_tenantID); _securityContext.AuthenticateMeWithoutCookie(_author); var userCulture = _userManager.GetUsers(_securityContext.CurrentAccount.ID).GetCulture(); System.Threading.Thread.CurrentThread.CurrentCulture = userCulture; System.Threading.Thread.CurrentThread.CurrentUICulture = userCulture; switch (_entityType) { case EntityType.Contact: ImportContactsData(_daoFactory); break; case EntityType.Opportunity: ImportOpportunityData(_daoFactory); break; case EntityType.Case: ImportCaseData(_daoFactory); break; case EntityType.Task: ImportTaskData(_daoFactory); break; default: throw new ArgumentException(CRMErrorsResource.EntityTypeUnknown); } } catch (OperationCanceledException) { _log.Debug("Queue canceled"); } }
public string SaveMobilePhone(UserInfo user, string mobilePhone) { mobilePhone = SmsSender.GetPhoneValueDigits(mobilePhone); if (user == null || Equals(user, Constants.LostUser)) { throw new Exception(Resource.ErrorUserNotFound); } if (string.IsNullOrEmpty(mobilePhone)) { throw new Exception(Resource.ActivateMobilePhoneEmptyPhoneNumber); } if (!string.IsNullOrEmpty(user.MobilePhone) && user.MobilePhoneActivationStatus == MobilePhoneActivationStatus.Activated) { throw new Exception(Resource.MobilePhoneMustErase); } user.MobilePhone = mobilePhone; user.MobilePhoneActivationStatus = MobilePhoneActivationStatus.NotActivated; if (SecurityContext.IsAuthenticated) { UserManager.SaveUserInfo(user); } else { try { SecurityContext.AuthenticateMeWithoutCookie(ASC.Core.Configuration.Constants.CoreSystem); UserManager.SaveUserInfo(user); } finally { SecurityContext.Logout(); } } if (StudioSmsNotificationSettingsHelper.Enable) { PutAuthCode(user, false); } return(mobilePhone); }
public string Upload(string folderId, string localPath, Guid userId) { TenantManager.SetCurrentTenant(TenantId); if (!userId.Equals(Guid.Empty)) { SecurityContext.AuthenticateMeWithoutCookie(userId); } else { var tenant = TenantManager.GetTenant(TenantId); SecurityContext.AuthenticateMeWithoutCookie(tenant.OwnerId); } if (int.TryParse(folderId, out var fId)) { return(Upload(fId, localPath).ToString()); } return(Upload(folderId, localPath)); }
protected override void DoJob() { SmtpClient smtpClient = null; try { _tenantManager.SetCurrentTenant(_tenantID); _securityContext.AuthenticateMeWithoutCookie(_authManager.GetAccountByID(_tenantID, _currUser)); smtpClient = GetSmtpClient(); var userCulture = _userManager.GetUsers(_currUser).GetCulture(); Thread.CurrentThread.CurrentCulture = userCulture; Thread.CurrentThread.CurrentUICulture = userCulture; var contactCount = _contactID.Count; if (contactCount == 0) { Complete(); return; } var from = new MailboxAddress(_smtpSetting.SenderDisplayName, _smtpSetting.SenderEmailAddress); var filePaths = new List <string>(); var fileDao = _filesIntegration.DaoFactory.GetFileDao <int>(); foreach (var fileID in _fileID) { var fileObj = fileDao.GetFile(fileID); if (fileObj == null) { continue; } using (var fileStream = fileDao.GetFileStream(fileObj)) { var directoryPath = Path.Combine(Path.GetTempPath(), "teamlab", _tenantID.ToString(), "crm/files/mailsender/"); if (!Directory.Exists(directoryPath)) { Directory.CreateDirectory(directoryPath); } var filePath = Path.Combine(directoryPath, fileObj.Title); using (var newFileStream = File.Create(filePath)) { fileStream.CopyTo(newFileStream); } filePaths.Add(filePath); } } var templateManager = new MailTemplateManager(_daoFactory); var deliveryCount = 0; try { Error = string.Empty; foreach (var contactID in _contactID) { _exactPercentageValue += 100.0 / contactCount; Percentage = Math.Round(_exactPercentageValue); PublishChanges(); if (IsCompleted) { break; // User selected cancel } var contactInfoDao = _daoFactory.GetContactInfoDao(); var startDate = DateTime.Now; var contactEmails = contactInfoDao.GetList(contactID, ContactInfoType.Email, null, true); if (contactEmails.Count == 0) { continue; } var recipientEmail = contactEmails[0].Data; if (!recipientEmail.TestEmailRegex()) { Error += string.Format(CRMCommonResource.MailSender_InvalidEmail, recipientEmail) + "<br/>"; continue; } var to = new MailboxAddress(recipientEmail); var mimeMessage = new MimeMessage { Subject = _subject }; mimeMessage.From.Add(from); mimeMessage.To.Add(to); var bodyBuilder = new BodyBuilder { HtmlBody = templateManager.Apply(_bodyTempate, contactID) }; foreach (var filePath in filePaths) { bodyBuilder.Attachments.Add(filePath); } mimeMessage.Body = bodyBuilder.ToMessageBody(); mimeMessage.Headers.Add("Auto-Submitted", "auto-generated"); _log.Debug(GetLoggerRow(mimeMessage)); var success = false; try { smtpClient.Send(mimeMessage); success = true; } catch (SmtpCommandException ex) { _log.Error(Error, ex); Error += string.Format(CRMCommonResource.MailSender_FailedDeliverException, recipientEmail) + "<br/>"; } if (success) { if (_storeInHistory) { AddToHistory(contactID, string.Format(CRMCommonResource.MailHistoryEventTemplate, mimeMessage.Subject), _daoFactory); } var endDate = DateTime.Now; var waitInterval = endDate.Subtract(startDate); deliveryCount++; var estimatedTime = TimeSpan.FromTicks(waitInterval.Ticks * (_contactID.Count - deliveryCount)); SetProperty("RecipientCount", _contactID.Count); SetProperty("EstimatedTime", estimatedTime.ToString()); SetProperty("DeliveryCount", deliveryCount); } if (Percentage > 100) { Percentage = 100; PublishChanges(); } } } catch (OperationCanceledException) { _log.Debug("cancel mail sender"); } finally { foreach (var filePath in filePaths) { if (File.Exists(filePath)) { File.Delete(filePath); } } } SetProperty("RecipientCount", _contactID.Count); SetProperty("EstimatedTime", TimeSpan.Zero.ToString()); SetProperty("DeliveryCount", deliveryCount); } catch (SocketException e) { Error = e.Message; _log.Error(Error); } finally { if (smtpClient != null) { smtpClient.Dispose(); } Complete(); } }
public async System.Threading.Tasks.Task Invoke(HttpContext context, WebItemSecurity webItemSecurity, SecurityContext securityContext, CrmSecurity crmSecurity, MessageTarget messageTarget, MessageService messageService, Global global, IOptionsMonitor <ILog> logger, NotifyClient notifyClient, SettingsManager settingsManager, DaoFactory daoFactory) { try { WebItemSecurity = webItemSecurity; SecurityContext = securityContext; CRMSecurity = crmSecurity; MessageTarget = messageTarget; MessageService = messageService; Global = global; Logger = logger.Get("ASC.CRM"); NotifyClient = notifyClient; SettingsManager = settingsManager; _context = context; SecurityContext.AuthenticateMeWithoutCookie(ASC.Core.Configuration.Constants.CoreSystem); if (!CheckPermission()) { throw new Exception(CRMSettingResource.WebToLeadsForm_InvalidKeyException); } var productInfo = WebItemSecurity.GetSecurityInfo(ProductEntryPoint.ID.ToString()); if (!productInfo.Enabled) { throw new Exception(CRMCommonResource.CRMProductIsDisabled); } Contact contact; var fieldCollector = new NameValueCollection(); var addressTemplate = new Dictionary <String, Object>(); foreach (String addressPartName in Enum.GetNames(typeof(AddressPart))) { addressTemplate.Add(addressPartName.ToLower(), ""); } var addressTemplateStr = JsonSerializer.Serialize(addressTemplate); var isCompany = false; var isCompanyString = GetValue("is_company"); var firstName = GetValue("firstName"); var lastName = GetValue("lastName"); var companyName = GetValue("companyName"); if (!String.IsNullOrEmpty(isCompanyString)) { if (!Boolean.TryParse(isCompanyString, out isCompany)) { throw new ArgumentException(); } } else //old scheme { if (!String.IsNullOrEmpty(firstName)) { isCompany = false; } else if (!String.IsNullOrEmpty(companyName)) { isCompany = true; } else { throw new ArgumentException(); } } if (isCompany) { contact = new Company(); ((Company)contact).CompanyName = companyName; fieldCollector.Add(CRMContactResource.CompanyName, companyName); } else { contact = new Person(); ((Person)contact).FirstName = firstName; ((Person)contact).LastName = lastName; ((Person)contact).JobTitle = GetValue("jobTitle"); fieldCollector.Add(CRMContactResource.FirstName, firstName); fieldCollector.Add(CRMContactResource.LastName, lastName); if (!String.IsNullOrEmpty(GetValue("jobTitle"))) { fieldCollector.Add(CRMContactResource.JobTitle, ((Person)contact).JobTitle); } } contact.About = GetValue("about"); if (!String.IsNullOrEmpty(contact.About)) { fieldCollector.Add(CRMContactResource.About, contact.About); } if (!String.IsNullOrEmpty(GetValue("is_shared"))) { contact.ShareType = Convert.ToBoolean(GetValue("is_shared")) ? ShareType.ReadWrite : ShareType.None; } else { contact.ShareType = (ShareType)(Convert.ToInt32(GetValue("share_type"))); } contact.ID = daoFactory.GetContactDao().SaveContact(contact); var messageAction = contact is Company ? MessageAction.CompanyCreatedWithWebForm : MessageAction.PersonCreatedWithWebForm; MessageService.Send(MessageInitiator.System, messageAction, MessageTarget.Create(contact.ID), contact.GetTitle()); var contactInfos = new List <ContactInfo>(); foreach (var key in _context.Request.Form.Keys) { if (key.StartsWith("customField_")) { var fieldID = Convert.ToInt32(key.Split(new[] { '_' })[1]); String fieldValue = GetValue(key); if (String.IsNullOrEmpty(fieldValue)) { continue; } var customField = daoFactory.GetCustomFieldDao().GetFieldDescription(fieldID); if (customField == null || !(customField.EntityType == EntityType.Contact || customField.EntityType == EntityType.Company && isCompany || customField.EntityType == EntityType.Person && !isCompany)) { continue; } if (customField.Type == CustomFieldType.CheckBox) { fieldValue = fieldValue == "on" || fieldValue == "true" ? "true" : "false"; } fieldCollector.Add(customField.Label, fieldValue); daoFactory.GetCustomFieldDao().SetFieldValue(isCompany ? EntityType.Company : EntityType.Person, contact.ID, fieldID, fieldValue); } else if (key.StartsWith("contactInfo_")) { var nameParts = key.Split(new[] { '_' }).Skip(1).ToList(); var contactInfoType = (ContactInfoType)Enum.Parse(typeof(ContactInfoType), nameParts[0]); var category = Convert.ToInt32(nameParts[1]); bool categoryIsExists = Enum.GetValues(ContactInfo.GetCategory(contactInfoType)) .Cast <object>() .Any(categoryEnum => (int)categoryEnum == category); if (!categoryIsExists) { throw new ArgumentException(String.Format("Category for {0} not found", nameParts[0])); } if (contactInfoType == ContactInfoType.Address) { var addressPart = (AddressPart)Enum.Parse(typeof(AddressPart), nameParts[2]); var findedAddress = contactInfos.Find( item => (category == item.Category) && (item.InfoType == ContactInfoType.Address)); if (findedAddress == null) { findedAddress = new ContactInfo { Category = category, InfoType = contactInfoType, Data = addressTemplateStr, ContactID = contact.ID }; contactInfos.Add(findedAddress); } Dictionary <string, object> addressParts = JsonSerializer.Deserialize <Dictionary <string, object> >(findedAddress.Data); addressParts[addressPart.ToString().ToLower()] = GetValue(key); string newJson = JsonSerializer.Serialize(addressParts); findedAddress.Data = JsonSerializer.Serialize(addressParts); continue; } var fieldValue = GetValue(key); if (String.IsNullOrEmpty(fieldValue)) { continue; } contactInfos.Add(new ContactInfo { Category = category, InfoType = contactInfoType, Data = fieldValue, ContactID = contact.ID, IsPrimary = true }); } else if (String.Compare(key, "tag", true) == 0) { var tags = _context.Request.Form["tag"]; daoFactory.GetTagDao().SetTagToEntity(EntityType.Contact, contact.ID, tags); } } contactInfos.ForEach( item => fieldCollector[item.InfoType.ToLocalizedString()] = PrepareteDataToView(item.InfoType, item.Data)); daoFactory.GetContactInfoDao().SaveList(contactInfos, contact); var notifyList = GetValue("notify_list"); if (!String.IsNullOrEmpty(notifyList)) { NotifyClient.SendAboutCreateNewContact( notifyList .Split(new[] { ',' }, StringSplitOptions.RemoveEmptyEntries) .Select(item => new Guid(item)).ToList(), contact.ID, contact.GetTitle(), fieldCollector); } var managersList = GetValue("managers_list"); SetPermission(contact, managersList); if (contact is Person && !String.IsNullOrEmpty(companyName)) { AssignPersonToCompany((Person)contact, companyName, managersList, daoFactory); } if (contact is Company && !String.IsNullOrEmpty(firstName) && !String.IsNullOrEmpty(lastName)) { AssignCompanyToPerson((Company)contact, firstName, lastName, managersList, daoFactory); } SecurityContext.Logout(); var newURL = new UriBuilder(GetValue("return_url")).Uri.AbsoluteUri; context.Response.Clear(); context.Response.StatusCode = (int)HttpStatusCode.Found; context.Response.Headers.Add("Location", newURL); await context.Response.WriteAsync("<HTML><Head>"); await context.Response.WriteAsync(String.Format("<META HTTP-EQUIV=Refresh CONTENT=\"0;URL={0}\">", newURL)); await context.Response.WriteAsync(String.Format("<Script>window.location='{0}';</Script>", newURL)); await context.Response.WriteAsync("</Head>"); await context.Response.WriteAsync("</HTML>"); } catch (Exception error) { Logger.Error(error); context.Response.StatusCode = (int)HttpStatusCode.BadRequest; await context.Response.WriteAsync(HttpUtility.HtmlEncode(error.Message)); } }
private TrackResponse ProcessMailMerge <T>(T fileId, TrackerData fileData) { if (fileData.Users == null || fileData.Users.Count == 0 || !Guid.TryParse(fileData.Users[0], out var userId)) { userId = FileTracker.GetEditingBy(fileId).FirstOrDefault(); } string saveMessage; try { SecurityContext.AuthenticateMeWithoutCookie(userId); var user = UserManager.GetUsers(userId); var culture = string.IsNullOrEmpty(user.CultureName) ? TenantManager.GetCurrentTenant().GetCulture() : CultureInfo.GetCultureInfo(user.CultureName); Thread.CurrentThread.CurrentCulture = culture; Thread.CurrentThread.CurrentUICulture = culture; if (string.IsNullOrEmpty(fileData.Url)) { throw new ArgumentException("emptry url"); } if (fileData.MailMerge == null) { throw new ArgumentException("MailMerge is null"); } var message = fileData.MailMerge.Message; Stream attach = null; switch (fileData.MailMerge.Type) { case MailMergeType.AttachDocx: case MailMergeType.AttachPdf: var downloadRequest = (HttpWebRequest)WebRequest.Create(DocumentServiceConnector.ReplaceDocumentAdress(fileData.Url)); // hack. http://ubuntuforums.org/showthread.php?t=1841740 if (WorkContext.IsMono) { ServicePointManager.ServerCertificateValidationCallback += (s, ce, ca, p) => true; } using (var downloadStream = new ResponseStream(downloadRequest.GetResponse())) { const int bufferSize = 2048; var buffer = new byte[bufferSize]; int readed; attach = new MemoryStream(); while ((readed = downloadStream.Read(buffer, 0, bufferSize)) > 0) { attach.Write(buffer, 0, readed); } attach.Position = 0; } if (string.IsNullOrEmpty(fileData.MailMerge.Title)) { fileData.MailMerge.Title = "Attach"; } var attachExt = fileData.MailMerge.Type == MailMergeType.AttachDocx ? ".docx" : ".pdf"; var curExt = FileUtility.GetFileExtension(fileData.MailMerge.Title); if (curExt != attachExt) { fileData.MailMerge.Title += attachExt; } break; case MailMergeType.Html: var httpWebRequest = (HttpWebRequest)WebRequest.Create(DocumentServiceConnector.ReplaceDocumentAdress(fileData.Url)); // hack. http://ubuntuforums.org/showthread.php?t=1841740 if (WorkContext.IsMono) { ServicePointManager.ServerCertificateValidationCallback += (s, ce, ca, p) => true; } using (var httpWebResponse = (HttpWebResponse)httpWebRequest.GetResponse()) using (var stream = httpWebResponse.GetResponseStream()) if (stream != null) { using (var reader = new StreamReader(stream, Encoding.GetEncoding(Encoding.UTF8.WebName))) { message = reader.ReadToEnd(); } } break; } using (var mailMergeTask = new MailMergeTask { From = fileData.MailMerge.From, Subject = fileData.MailMerge.Subject, To = fileData.MailMerge.To, Message = message, AttachTitle = fileData.MailMerge.Title, Attach = attach }) { var response = MailMergeTaskRunner.Run(mailMergeTask); Logger.InfoFormat("DocService mailMerge {0}/{1} send: {2}", fileData.MailMerge.RecordIndex + 1, fileData.MailMerge.RecordCount, response); } saveMessage = null; } catch (Exception ex) { Logger.Error( string.Format("DocService mailMerge{0} error: userId - {1}, url - {2}", (fileData.MailMerge == null ? "" : " " + fileData.MailMerge.RecordIndex + "/" + fileData.MailMerge.RecordCount), userId, fileData.Url), ex); saveMessage = ex.Message; } if (fileData.MailMerge != null && fileData.MailMerge.RecordIndex == fileData.MailMerge.RecordCount - 1) { var errorCount = fileData.MailMerge.RecordErrorCount; if (!string.IsNullOrEmpty(saveMessage)) { errorCount++; } NotifyClient.SendMailMergeEnd(userId, fileData.MailMerge.RecordCount, errorCount); } return(new TrackResponse { Message = saveMessage }); }
private TrackResponse ProcessSave <T>(T fileId, TrackerData fileData) { var comments = new List <string>(); if (fileData.Status == TrackerStatus.Corrupted || fileData.Status == TrackerStatus.CorruptedForceSave) { comments.Add(FilesCommonResource.ErrorMassage_SaveCorrupted); } var forcesave = fileData.Status == TrackerStatus.ForceSave || fileData.Status == TrackerStatus.CorruptedForceSave; if (fileData.Users == null || fileData.Users.Count == 0 || !Guid.TryParse(fileData.Users[0], out var userId)) { userId = Guid.Empty; } var app = ThirdPartySelector.GetAppByFileId(fileId.ToString()); if (app == null) { File <T> fileStable; fileStable = DaoFactory.GetFileDao <T>().GetFileStable(fileId); var docKey = DocumentServiceHelper.GetDocKey(fileStable); if (!fileData.Key.Equals(docKey)) { Logger.ErrorFormat("DocService saving file {0} ({1}) with key {2}", fileId, docKey, fileData.Key); StoringFileAfterError(fileId, userId.ToString(), DocumentServiceConnector.ReplaceDocumentAdress(fileData.Url)); return(new TrackResponse { Message = "Expected key " + docKey }); } } UserInfo user = null; try { SecurityContext.AuthenticateMeWithoutCookie(userId); user = UserManager.GetUsers(userId); var culture = string.IsNullOrEmpty(user.CultureName) ? TenantManager.GetCurrentTenant().GetCulture() : CultureInfo.GetCultureInfo(user.CultureName); Thread.CurrentThread.CurrentCulture = culture; Thread.CurrentThread.CurrentUICulture = culture; } catch (Exception ex) { Logger.Info("DocService save error: anonymous author - " + userId, ex); if (!userId.Equals(ASC.Core.Configuration.Constants.Guest.ID)) { comments.Add(FilesCommonResource.ErrorMassage_SaveAnonymous); } } File <T> file = null; var saveMessage = "Not saved"; if (string.IsNullOrEmpty(fileData.Url)) { try { comments.Add(FilesCommonResource.ErrorMassage_SaveUrlLost); file = EntryManager.CompleteVersionFile(fileId, 0, false, false); DaoFactory.GetFileDao <T>().UpdateComment(file.ID, file.Version, string.Join("; ", comments)); file = null; Logger.ErrorFormat("DocService save error. Empty url. File id: '{0}'. UserId: {1}. DocKey '{2}'", fileId, userId, fileData.Key); } catch (Exception ex) { Logger.Error(string.Format("DocService save error. Version update. File id: '{0}'. UserId: {1}. DocKey '{2}'", fileId, userId, fileData.Key), ex); } } else { if (fileData.Encrypted) { comments.Add(FilesCommonResource.CommentEditEncrypt); } var forcesaveType = ForcesaveType.None; if (forcesave) { switch (fileData.ForceSaveType) { case TrackerData.ForceSaveInitiator.Command: forcesaveType = ForcesaveType.Command; break; case TrackerData.ForceSaveInitiator.Timer: forcesaveType = ForcesaveType.Timer; break; case TrackerData.ForceSaveInitiator.User: forcesaveType = ForcesaveType.User; break; } comments.Add(fileData.ForceSaveType == TrackerData.ForceSaveInitiator.User ? FilesCommonResource.CommentForcesave : FilesCommonResource.CommentAutosave); } try { file = EntryManager.SaveEditing(fileId, null, DocumentServiceConnector.ReplaceDocumentAdress(fileData.Url), null, string.Empty, string.Join("; ", comments), false, fileData.Encrypted, forcesaveType, true); saveMessage = fileData.Status == TrackerStatus.MustSave || fileData.Status == TrackerStatus.ForceSave ? null : "Status " + fileData.Status; } catch (Exception ex) { Logger.Error(string.Format("DocService save error. File id: '{0}'. UserId: {1}. DocKey '{2}'. DownloadUri: {3}", fileId, userId, fileData.Key, fileData.Url), ex); saveMessage = ex.Message; StoringFileAfterError(fileId, userId.ToString(), DocumentServiceConnector.ReplaceDocumentAdress(fileData.Url)); } } if (!forcesave) { FileTracker.Remove(fileId); } if (file != null) { if (user != null) { FilesMessageService.Send(file, MessageInitiator.DocsService, MessageAction.UserFileUpdated, user.DisplayUserName(false, DisplayUserSettingsHelper), file.Title); } if (!forcesave) { SaveHistory(file, (fileData.History ?? "").ToString(), DocumentServiceConnector.ReplaceDocumentAdress(fileData.ChangesUrl)); } } SocketManager.FilesChangeEditors(fileId, !forcesave); var result = new TrackResponse { Message = saveMessage }; return(result); }
protected override Task <AuthenticateResult> HandleAuthenticateAsync() { using var scope = ServiceProvider.CreateScope(); var emailValidationKeyHelper = scope.ServiceProvider.GetService <EmailValidationKeyModelHelper>(); var emailValidationKeyModel = emailValidationKeyHelper.GetModel(); if (!emailValidationKeyModel.Type.HasValue) { return(SecurityContext.IsAuthenticated ? Task.FromResult(AuthenticateResult.Success(new AuthenticationTicket(Context.User, new AuthenticationProperties(), Scheme.Name))) : Task.FromResult(AuthenticateResult.Fail(new AuthenticationException(HttpStatusCode.Unauthorized.ToString())))); } EmailValidationKeyProvider.ValidationResult checkKeyResult; try { checkKeyResult = emailValidationKeyHelper.Validate(emailValidationKeyModel); } catch (ArgumentNullException) { checkKeyResult = EmailValidationKeyProvider.ValidationResult.Invalid; } var claims = new List <Claim>() { new Claim(ClaimTypes.Role, emailValidationKeyModel.Type.ToString()) }; if (checkKeyResult == EmailValidationKeyProvider.ValidationResult.Ok) { Guid userId; if (!SecurityContext.IsAuthenticated) { if (emailValidationKeyModel.UiD.HasValue && !emailValidationKeyModel.UiD.Equals(Guid.Empty)) { userId = emailValidationKeyModel.UiD.Value; } else { if (emailValidationKeyModel.Type == Web.Studio.Utility.ConfirmType.EmailActivation || emailValidationKeyModel.Type == Web.Studio.Utility.ConfirmType.EmpInvite || emailValidationKeyModel.Type == Web.Studio.Utility.ConfirmType.LinkInvite) { userId = ASC.Core.Configuration.Constants.CoreSystem.ID; } else { userId = UserManager.GetUserByEmail(emailValidationKeyModel.Email).ID; } } } else { userId = SecurityContext.CurrentAccount.ID; } SecurityContext.AuthenticateMeWithoutCookie(userId, claims); } var result = checkKeyResult switch { EmailValidationKeyProvider.ValidationResult.Ok => AuthenticateResult.Success(new AuthenticationTicket(Context.User, new AuthenticationProperties(), Scheme.Name)), _ => AuthenticateResult.Fail(new AuthenticationException(HttpStatusCode.Unauthorized.ToString())) }; return(Task.FromResult(result)); } }
private UserInfo GetUserByThirdParty(LoginProfile loginProfile) { try { if (!string.IsNullOrEmpty(loginProfile.AuthorizationError)) { // ignore cancellation if (loginProfile.AuthorizationError != "Canceled at provider") { throw new Exception(loginProfile.AuthorizationError); } return(Constants.LostUser); } var userInfo = Constants.LostUser; Guid userId; if (TryGetUserByHash(loginProfile.HashId, out userId)) { userInfo = UserManager.GetUsers(userId); } var isNew = false; if (CoreBaseSettings.Personal) { if (UserManager.UserExists(userInfo.ID) && SetupInfo.IsSecretEmail(userInfo.Email)) { try { SecurityContext.AuthenticateMeWithoutCookie(ASC.Core.Configuration.Constants.CoreSystem); UserManager.DeleteUser(userInfo.ID); userInfo = Constants.LostUser; } finally { SecurityContext.Logout(); } } if (!UserManager.UserExists(userInfo.ID)) { userInfo = JoinByThirdPartyAccount(loginProfile); isNew = true; } } if (isNew) { //TODO: //var spam = HttpContext.Current.Request["spam"]; //if (spam != "on") //{ // try // { // const string _databaseID = "com"; // using (var db = DbManager.FromHttpContext(_databaseID)) // { // db.ExecuteNonQuery(new SqlInsert("template_unsubscribe", false) // .InColumnValue("email", userInfo.Email.ToLowerInvariant()) // .InColumnValue("reason", "personal") // ); // Log.Debug(string.Format("Write to template_unsubscribe {0}", userInfo.Email.ToLowerInvariant())); // } // } // catch (Exception ex) // { // Log.Debug(string.Format("ERROR write to template_unsubscribe {0}, email:{1}", ex.Message, userInfo.Email.ToLowerInvariant())); // } //} StudioNotifyService.UserHasJoin(); UserHelpTourHelper.IsNewUser = true; PersonalSettingsHelper.IsNewUser = true; } return(userInfo); } catch (Exception) { CookiesManager.ClearCookies(CookiesType.AuthKey); CookiesManager.ClearCookies(CookiesType.SocketIO); SecurityContext.Logout(); throw; } }