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)); }
/// <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); }