コード例 #1
0
        public void Base36LongTest(long num)
        {
            var encodedText = Base36Encoder.Encode(num);
            var decodeNum   = Base36Encoder.DecodeLong(encodedText);

            Assert.Equal(num, decodeNum);
        }
コード例 #2
0
        public void Base36StringTest(string str)
        {
            var encodedText = Base36Encoder.Encode(str);
            var decodeStr   = Base36Encoder.DecodeString(encodedText);

            Assert.Equal(str, decodeStr, ignoreCase: true);
        }
コード例 #3
0
 public void Base36EncodeTest()
 {
     Base36Encoder.Encode(Guid.NewGuid());
     Base36Encoder.Encode(DateTime.UtcNow.Ticks);
     Base36Encoder.Encode("xxxxxxxxx");
     //Base36Encoder.Encode("你好", Encoding.UTF8); // not supported
 }
コード例 #4
0
        public Post Save(string slug, Post content)
        {
            var isNew = string.IsNullOrEmpty(slug);

            if (isNew)
            {
                // No slug was specified, so we need to get the next one
                var docs = db.GetCollection("sequences");

                docs.EnsureIndex(IndexKeys.Ascending("Name"), IndexOptions.SetUnique(true));

                var sequence = docs.FindAndModify(Query.EQ("Name", "slug"), null, Update.Inc("Current", 1), true, true)
                               .GetModifiedDocumentAs <Incrementor>();

                slug = Base36Encoder.Encode(sequence.Current);
            }

            content.Slug = slug;

            content.Version = isNew ? 1 : GetLatestVersion(slug) + 1;

            db.GetCollection <Post>("posts").Save(content, WriteConcern.Acknowledged);

            return(content);
        }
コード例 #5
0
        public void Base36GuidTest()
        {
            var guid        = Guid.NewGuid();
            var encodedText = Base36Encoder.Encode(guid);
            var decodeGuid  = Base36Encoder.DecodeGuid(encodedText);

            Assert.Equal(guid, decodeGuid);
        }
コード例 #6
0
 public SerialNumberTests()
 {
     _encoder = new Base36Encoder();
     _config  = new SerialNumberConfiguration(_encoder);
     _sut     = new SerialNumber("A12345B", _config);
 }
コード例 #7
0
        public ActionResult Auto(string k, string h, string d = null)
        {
            // Parsear Key de Token de Auto-Login
            Int64 key;

            try {
                key = new Base36Encoder().Decode(k);
            } catch {
                return(Redirect("http://www.kms.me/#login"));
            }

            // Buscar Token de Auto-Login por su llave
            var autologinToken = Database.WebAutoLoginTokenStore.GetFirst(
                filter: f =>
                f.Key == key,
                orderBy: o =>
                o.OrderBy(b => b.CreationDate)
                );

            if (autologinToken == null)
            {
                return(Redirect("http://www.kms.me/#login"));
            }

            // Determinar si aún es vigente el Token y la IP de origen coincide
            if (
                autologinToken.CreationDate < DateTime.UtcNow.AddMinutes(-2) ||
                (
                    autologinToken.IPAddress != null &&
                    autologinToken.IPAddress != Request.UserHostAddress
                )
                )
            {
                Database.WebAutoLoginTokenStore.Delete(autologinToken.Id);
                Database.SaveChanges();

                return(Redirect("http://www.kms.me/#login"));
            }

            // Obtener Consumer Secret y Token Secret
            var consumerSecret = autologinToken.Token.ApiKey.Secret.ToString("N");
            var tokenSecret    = autologinToken.Token.Secret.ToString("N");

            // Calcular hash HMAC-SHA1 de Secreto de Token de Auto-Login
            var hmacSha1Key   = consumerSecret + "&" + tokenSecret;
            var hmacSha1      = new HMACSHA1(Encoding.UTF8.GetBytes(hmacSha1Key));
            var hmacSha1Bytes = hmacSha1.ComputeHash(
                Encoding.UTF8.GetBytes(autologinToken.Secret.ToString("N"))
                );
            var hmacSha1String = new StringBuilder(hmacSha1Bytes.Length * 2);

            for (int i = 0; i < hmacSha1Bytes.Length; i++)
            {
                hmacSha1String.Append(hmacSha1Bytes[i].ToString("x2"));
            }

            // Validar que {s} coincida con Hash calculado
            if (hmacSha1String.ToString().ToUpper() != h.ToUpper())
            {
                Database.WebAutoLoginTokenStore.Delete(autologinToken.Id);
                Database.SaveChanges();

                return(Redirect("http://www.kms.me/#login"));
            }

            // Crear sesión y eliminar Token de Auto-Login
            var user = autologinToken.Token.User;

            FormsAuthentication.SetAuthCookie(user.Guid.ToBase64String(), true);

            Database.WebAutoLoginTokenStore.Delete(autologinToken.Id);

            if (d == "token" && autologinToken.Token != null)
            {
                Database.TokenStore.Delete(autologinToken.Token);
            }

            Database.SaveChanges();

            // Redirigir a Dashboard
            return(Redirect("~/Overview"));
        }
コード例 #8
0
 internal static byte[] FromBase36String(this string base36String)
 {
     return(Base36Encoder.DecodeBytes(base36String));
 }
コード例 #9
0
 internal static string ToBase36String(this byte[] bytes)
 {
     return(Base36Encoder.EncodeBytes(bytes));
 }