Example #1
0
        private string GetSessionFileLinkInternal(IFileVersion version, string userIdentity)
        {
            if (version == null)
            {
                throw new ArgumentNullException("version");
            }

            this.Logger.WriteFormatMessage("GetSessionFileLinkInternal:Начало генерации сессионной ссылки");

            FileVersion typedVersion = (FileVersion)version;

            string securityIdentifier = null;

            if (!String.IsNullOrEmpty(userIdentity))
            {
                this.Logger.WriteFormatMessage("SecurityAdapter.GetSecurityIdentifier:Начало генерации securityIdentifier, userIdentity: {0}", userIdentity);
                securityIdentifier = this.SecurityAdapter.GetSecurityIdentifier(userIdentity);
                this.Logger.WriteFormatMessage("SecurityAdapter.GetSecurityIdentifier:Окончание генерации securityIdentifier,userIdentity: {0}, securityIdentifier: {1}", userIdentity, securityIdentifier ?? String.Empty);
            }

            this.Logger.WriteFormatMessage("FileTokenAdapter.GenerateFileToken:Начало генерации токена для файла, version.Name: {0}, version.UniqueID: {1}", version.Name, version.UniqueID);
            IFileToken token = this.FileTokenAdapter.GenerateFileToken(typedVersion.Metadata, securityIdentifier);

            this.Logger.WriteFormatMessage("FileTokenAdapter.GenerateFileToken:Окончание генерации токена для файла, version.Name: {0}, version.UniqueID: {1}, token.ID: {2}", version.Name, version.UniqueID, token.UniqueID);

            this.Logger.WriteFormatMessage("SessionLinkResolver.GetSessionLink:Начало генерации сессионной ссылки на файл, version.Name: {0}, version.UniqueID: {1}", version.Name, version.UniqueID);
            string sessionLink = this.SessionLinkResolver.GetSessionLink(token);

            this.Logger.WriteFormatMessage("SessionLinkResolver.GetSessionLink:Окончание генерации сессионной ссылки на файл, version.Name: {0}, version.UniqueID: {1}, sessionLink: {2}", version.Name, version.UniqueID, sessionLink);

            this.Logger.WriteFormatMessage("GetSessionFileLinkInternal:Окончание генерации сессионной ссылки");

            return(sessionLink);
        }
        /// <summary>
        /// Возвращает сессионную ссылку по токену.
        /// </summary>
        /// <param name="token">Токен файла.</param>
        /// <returns></returns>
        public string GetSessionLink(IFileToken token)
        {
            if (token == null)
            {
                throw new ArgumentNullException("token");
            }

            int destinationIndex = 0;

            if (string.IsNullOrEmpty(token.FolderUrl))
            {
                throw new Exception(string.Format("sessionToken.FolderUrl"));
            }

            if (token.UniqueID == Guid.Empty)
            {
                throw new ArgumentNullException("sessionToken.UniqueID");
            }

            if (token.FileUniqueID == Guid.Empty)
            {
                throw new ArgumentNullException("sessionToken.FileUniqueID");
            }

            if (token.VersionUniqueID == Guid.Empty)
            {
                throw new ArgumentNullException("sessionToken.VersionUniqueID");
            }

            byte[] folderUrlBytes = Encoding.UTF8.GetBytes(token.FolderUrl);
            byte[] tokenBytes     = new byte[(_guidLength * 3) + folderUrlBytes.Length];

            Array.Copy(token.UniqueID.ToByteArray(), 0, tokenBytes, destinationIndex, _guidLength);
            destinationIndex += _guidLength;
            Array.Copy(token.FileUniqueID.ToByteArray(), 0, tokenBytes, destinationIndex, _guidLength);
            destinationIndex += _guidLength;
            Array.Copy(token.VersionUniqueID.ToByteArray(), 0, tokenBytes, destinationIndex, _guidLength);
            destinationIndex += _guidLength;
            Array.Copy(folderUrlBytes, 0, tokenBytes, destinationIndex, folderUrlBytes.Length);

            string tokenString = Convert.ToBase64String(tokenBytes);

            string contentDeliveryHost = ConfigReader.GetStringValue(EngineConsts.CongfigParams.ContentDeliveryHost);

            contentDeliveryHost = contentDeliveryHost.TrimEnd('/');
            string link = string.Format("{0}/{1}",
                                        contentDeliveryHost,
                                        tokenString.Replace("/", "-"));

            return(link);
        }
Example #3
0
        /// <summary>
        /// Возвращает версию по сессионной ссылке.
        /// </summary>
        /// <param name="sessionLink">Сессионная ссылка.</param>
        /// <param name="identity">Идентификатор пользователя.</param>
        /// <returns></returns>
        public IFileVersion ResolveSessionLink(string sessionLink, IIdentity identity)
        {
            if (string.IsNullOrEmpty(sessionLink))
            {
                throw new ArgumentNullException("sessionLink");
            }

            if (identity == null)
            {
                throw new ArgumentNullException("identity");
            }

            this.Logger.WriteFormatMessage("ResolveSessionLink:Начало разрешения сессионной ссылки, sessionLink: {0}", sessionLink);

            IFileToken sessionToken = this.SessionLinkResolver.Resolve(sessionLink);

            if (string.IsNullOrEmpty(sessionToken.FolderUrl))
            {
                throw new Exception(string.Format("sessionToken.FolderUrl"));
            }

            if (sessionToken.UniqueID == Guid.Empty)
            {
                throw new ArgumentNullException("sessionToken.UniqueID");
            }

            if (sessionToken.FileUniqueID == Guid.Empty)
            {
                throw new ArgumentNullException("sessionToken.FileUniqueID");
            }

            if (sessionToken.VersionUniqueID == Guid.Empty)
            {
                throw new ArgumentNullException("sessionToken.VersionUniqueID");
            }

            this.Logger.WriteFormatMessage("ResolveSessionLink:Результат разрешения ссылки: sessionLink:{0}, sessionToken.UniqueID: {1}, sessionToken.FileUniqueID: {2}, sessionToken.VersionUniqueID: {3}, sessionToken.FolderUrl: {4}",
                                           sessionLink,
                                           sessionToken.UniqueID,
                                           sessionToken.FileUniqueID,
                                           sessionToken.VersionUniqueID,
                                           sessionToken.FolderUrl);

            //сначала нужно поднять версию файла
            File        file    = this.GetFileInternal(sessionToken.FolderUrl, sessionToken.FileUniqueID);
            FileVersion version = (FileVersion)file.GetVersion(sessionToken.VersionUniqueID);

            this.Logger.WriteFormatMessage("ResolveSessionLink:Разрешение сессионной ссылки, sessionLink: {0}, version.Name: {1}, version.UniqueID: {2}", sessionLink, version.Name, version.UniqueID);

            bool tokenValid = false;

            IFileToken fileToken = this.FileTokenAdapter.GetToken(version.Metadata, sessionToken.UniqueID);

            if (fileToken != null)
            {
                tokenValid = this.SecurityAdapter.ValidateToken(fileToken, identity);
            }

            this.Logger.WriteFormatMessage("ResolveSessionLink:Валидация сессионной ссылки, sessionLink: {0}, valid: {1}, identity.Name: {2}", sessionLink, tokenValid, identity.Name);

            if (!tokenValid)
            {
                throw new Exception(string.Format("Токен не валиден"));
            }

            this.Logger.WriteFormatMessage("ResolveSessionLink:Окончание разрешения сессионной ссылки, sessionLink: {0}", sessionLink);

            return(version);
        }