コード例 #1
0
        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);
        }
コード例 #2
0
        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);
        }
コード例 #3
0
        private void Auth(string userIdString)
        {
            if (!Guid.TryParse(userIdString ?? "", out var userId))
            {
                throw new Exception("DocuSign incorrect User ID: " + userIdString);
            }

            SecurityContext.AuthenticateMeWithoutCookie(userId);
        }
コード例 #4
0
        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);
            }
        }
コード例 #5
0
 private static bool TryAuthenticate(SecurityContext securityContext, AuthManager authManager, int tenantId, Guid userid)
 {
     try
     {
         securityContext.AuthenticateMeWithoutCookie(authManager.GetAccountByID(tenantId, userid));
         return(true);
     }
     catch
     {
         return(false);
     }
 }
コード例 #6
0
        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;
            }
        }
コード例 #7
0
        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");
            }
        }
コード例 #8
0
ファイル: SmsManager.cs プロジェクト: ONLYOFFICE/AppServer
        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);
        }
コード例 #9
0
        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));
        }
コード例 #10
0
        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();
            }
        }
コード例 #11
0
        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));
            }
        }
コード例 #12
0
        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
            });
        }
コード例 #13
0
        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);
        }
コード例 #14
0
        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));
        }
    }
コード例 #15
0
        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;
            }
        }