예제 #1
0
        public override Uri Identify(IRepository repository, Stream originalContentStream, ITypedContent typedContent)
        {
            Stream contentStream = originalContentStream;
            string fileExtension = null;

            if (typedContent != null)
            {
                fileExtension = typedContent.FileExtension;
                Func <Stream, Stream> streamPreprocessorFunc;
                if (_StreamIdentifierPreprocessorFuncs.TryGetValue(typedContent.ContentType, out streamPreprocessorFunc))
                {
                    contentStream = streamPreprocessorFunc(originalContentStream);
                }
            }

            byte[] hash        = _HashAlgorithm.ComputeHash(contentStream);
            string relativeUri = string.Concat(
                _Encoding
                .Encode(
                    BitConverter.ToUInt64(hash, 0),
                    false)
                .ToLower(),
                "-",
                _Encoding
                .Encode(
                    BitConverter.ToUInt64(hash, 8),
                    false)
                .ToLower());

            for (int i = _FolderDepth; i > 0; i--)
            {
                relativeUri = relativeUri.Insert(i, Path.DirectorySeparatorChar.ToString());
            }

            if (fileExtension != null)
            {
                relativeUri = Path.ChangeExtension(relativeUri, fileExtension);
            }

            return(new Uri(repository.Uri, relativeUri));
        }
예제 #2
0
        /// <summary>
        /// Generates the activation code.
        /// </summary>
        /// <returns></returns>
        private async Task <string> GenerateActivationCode()
        {
            List <string> profanityList = appSettings.ProfanityList;

            string result;
            ushort deploymentNumber = appSettings.DeploymentNumber;
            var    rand             = new RngCspRandom();

            do
            {
                ulong token = deploymentNumber;
                token <<= 8 * sizeof(uint);
                uint nonce = rand.Next(100000000, 999999999);
                token |= nonce;

                var encoder = new CrockfordBase32Encoding();
                result = encoder.Encode(token, false);
            }while (result.ContainsAny(profanityList.ToArray()) || !(await IsActivationCodeUnique(result)));

            return(result);
        }