protected virtual async Task <ExternalKey> GetNewExternalKeyAsync()
        {
            HttpWebRequest  request = WebRequest.CreateHttp(Address);
            HttpWebResponse response;

            request.Proxy           = Proxy;
            request.ContinueTimeout = (int)TimeOut.TotalMilliseconds;
            request.ContentType     = "application/x-www-form-urlencoded";

            try
            {
                response = (HttpWebResponse)await request.GetResponseAsync();
            }
            catch (WebException e)
            {
                if ((int)e.Status == 7)                //ProtocolError
                {
                    throw new GoogleTranslateIPBannedException(
                              GoogleTranslateIPBannedException.Operation.TokenGeneration);
                }

                throw;
            }

            string result;

            using (StreamReader streamReader = new StreamReader(response.GetResponseStream()))
                result = await streamReader.ReadToEndAsync();

            long tkk;

            try
            {
                var tkkText = result.GetTextBetween(@"TKK='", "';");

                if (tkkText == null)
                {
                    throw new ExternalKeyParseException("Unknown TKK position");
                }

                var splitted = tkkText.Split('.');
                if (splitted.Length != 2 || !long.TryParse(splitted[1], out tkk))
                {
                    throw new ExternalKeyParseException($"Unknown TKK format. TKK: {tkkText}");
                }
            }
            catch (ArgumentException)
            {
                throw new ExternalKeyParseException();
            }

            ExternalKey newExternalKey = new ExternalKey(UnixTotalHours, tkk);

            return(newExternalKey);
        }
Esempio n. 2
0
        protected virtual async Task <ExternalKey> GetNewExternalKeyAsync()
        {
            HttpWebRequest  request = WebRequest.CreateHttp(_address);
            HttpWebResponse response;

            request.Proxy           = Proxy;
            request.ContinueTimeout = (int)TimeOut.TotalMilliseconds;
            request.ContentType     = "application/x-www-form-urlencoded";


            try
            {
                response = (HttpWebResponse)await request.GetResponseAsync();
            }
            catch (WebException e)
            {
                Console.WriteLine(e.Message);
                throw;
            }

            string result;

            using (StreamReader streamReader = new StreamReader(response.GetResponseStream()))
                result = await streamReader.ReadToEndAsync();


            long   number1, number2;
            string textNumber1, textNumber2;

            try
            {
                int index = result.IndexOf((@"var a\x3d"), StringComparison.Ordinal);
                textNumber1 = result.GetTextBetween(@"var a\x3d", ";", index);
                textNumber2 = result.GetTextBetween(@"var b\x3d", ";", index);

                if (textNumber1 == null || textNumber2 == null)
                {
                    throw new ExternalKeyParseException();
                }
            }
            catch (ArgumentException)
            {
                throw new ExternalKeyParseException();
            }


            if (!long.TryParse(textNumber1, out number1) || !long.TryParse(textNumber2, out number2))
            {
                throw new ExternalKeyParseException();
            }

            ExternalKey newExternalKey = new ExternalKey(UnixTotalHours, number1 + number2);

            return(newExternalKey);
        }
Esempio n. 3
0
		/// <summary>
		/// <p>Generate the token for a given string</p>
		/// </summary>
		/// <param name="source">The string to receive the token</param>
		/// <returns>Token for the current string</returns>
		/// <exception cref="NotSupportedException">The method is no longer valid, or something went wrong</exception>
		/// <exception cref="HttpRequestException">Http exception</exception>
		/// <exception cref="GoogleTranslateIPBannedException"></exception>
		public virtual async Task<string> GenerateAsync(string source)
		{
			if (IsExternalKeyObsolete)
				try
				{
					CurrentExternalKey = await GetNewExternalKeyAsync();
				}
				catch (ExternalKeyParseException)
				{
					ThrowExceptions.Custom(Exc.GetStackTrace(), type, Exc.CallingMethod(),NotSupportedException("The method is no longer valid, or something went wrong");
				}
			long time = DecrypthAlgorythm(source);
			return time.ToString() + '.' + (time ^ CurrentExternalKey.Time);
		}
Esempio n. 4
0
		protected virtual async Task<ExternalKey> GetNewExternalKeyAsync()
		{
			HttpClient httpClient;
			if (Proxy == null)
				httpClient = new HttpClient();
			else
				httpClient = new HttpClient(
					new HttpClientHandler()
					{
						Proxy = Proxy,
						UseProxy = true,
					});
			httpClient.Timeout = TimeOut;
			string result;
			using (httpClient)
			{
				result = await httpClient.GetStringAsync(Address);
				HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Get, Address);
				//request.Content.Headers.ContentType = new MediaTypeHeaderValue("application/x-www-form-urlencoded");
				HttpResponseMessage response;
				try
				{
					response = await httpClient.SendAsync(request);
				}
				catch (HttpRequestException ex) when (ex.Message.Contains("503"))
				{
					ThrowExceptions.Custom(Exc.GetStackTrace(), type, Exc.CallingMethod(),GoogleTranslateIPBannedException(
						GoogleTranslateIPBannedException.Operation.TokenGeneration);
				}
				
				result = await response.Content.ReadAsStringAsync();
			}
			long tkk;
			try
			{
				var tkkText = result.GetTextBetween(@"tkk:'", "',");
				if (tkkText == null)
					ThrowExceptions.Custom(Exc.GetStackTrace(), type, Exc.CallingMethod(),ExternalKeyParseException("Unknown TKK position");
				var splitted = tkkText.Split('.');
				if (splitted.Length != 2 || !long.TryParse(splitted[1], out tkk))
					ThrowExceptions.Custom(Exc.GetStackTrace(), type, Exc.CallingMethod(),ExternalKeyParseException($"Unknown TKK format. TKK: {tkkText}");
			}
			catch (ArgumentException)
			{
				ThrowExceptions.Custom(Exc.GetStackTrace(), type, Exc.CallingMethod(),ExternalKeyParseException();
			}
			ExternalKey newExternalKey = new ExternalKey(UnixTotalHours, tkk);
			return newExternalKey;
		}
Esempio n. 5
0
        /// <summary>
        /// <p>Generate the token for a given string</p>
        /// </summary>
        /// <param name="source">The string to receive the token</param>
        /// <returns>Token for the current string</returns>
        /// <exception cref="NotSupportedException">The method is no longer valid, or something went wrong</exception>
        /// <exception cref="HttpRequestException">Http exception</exception>
        /// <exception cref="GoogleTranslateIPBannedException"></exception>
        public virtual async Task <string> GenerateAsync(string source)
        {
            if (IsExternalKeyObsolete)
            {
                try
                {
                    CurrentExternalKey = await GetNewExternalKeyAsync();
                }
                catch (ExternalKeyParseException)
                {
                    throw new NotSupportedException("The method is no longer valid, or something went wrong");
                }
            }

            long time = DecrypthAlgorythm(source);

            return(time.ToString() + '.' + (time ^ CurrentExternalKey.Time));
        }
Esempio n. 6
0
        /// <summary>
        /// <p>Generate the token for a string</p>
        /// </summary>
        /// <param name="source">The string to receive the token</param>
        /// <returns>Token for the current string</returns>
        /// <exception cref="NotSupportedException">The method is no longer valid, or something went wrong</exception>
        public virtual async Task <string> GenerateAsync(string source)
        {
            if (IsExternalKeyObsolete)
            {
                try
                {
                    _currentExternalKey = await GetNewExternalKeyAsync();
                }
                catch (ExternalKeyParseException)
                {
                    throw new NotSupportedException();
                }
            }

            long time = DecrypthAlgorythm(source);

            return(time.ToString() + '.' + (time ^ _currentExternalKey.Time));
        }
Esempio n. 7
0
 /// <summary>
 /// Initializes a new instance of the <see cref="GoogleKeyTokenGenerator"/> class
 /// </summary>
 public GoogleKeyTokenGenerator()
 {
     CurrentExternalKey = new ExternalKey(0, 0);
 }
Esempio n. 8
0
        protected virtual async Task <ExternalKey> GetNewExternalKeyAsync()
        {
            HttpClient httpClient;

            if (Proxy == null)
            {
                httpClient = new HttpClient();
            }
            else
            {
                httpClient = new HttpClient(
                    new HttpClientHandler()
                {
                    Proxy    = Proxy,
                    UseProxy = true,
                });
            }

            httpClient.Timeout = TimeOut;

            string result;

            using (httpClient)
            {
                var response = httpClient.GetAsync(Address).Result;

                try
                {
                    result = response.Content.ReadAsStringAsync().Result;
                }catch (HttpRequestException ex)
                {
                    throw new GoogleTranslateIPBannedException(GoogleTranslateIPBannedException.Operation.TokenGeneration);
                }
            }

            long tkk;

            try
            {
                var tkkText = result.GetTextBetween(@"tkk:'", "',");

                if (tkkText == null)
                {
                    throw new ExternalKeyParseException("Unknown TKK position");
                }

                var splitted = tkkText.Split('.');
                if (splitted.Length != 2 || !long.TryParse(splitted[1], out tkk))
                {
                    throw new ExternalKeyParseException($"Unknown TKK format. TKK: {tkkText}");
                }
            }
            catch (ArgumentException)
            {
                throw new ExternalKeyParseException();
            }

            ExternalKey newExternalKey = new ExternalKey(UnixTotalHours, tkk);

            return(newExternalKey);
        }
Esempio n. 9
0
 public override int GetHashCode()
 {
     unchecked
     {
         return(((Id != null ? Id.GetHashCode() : 0) * 397) ^ (ExternalKey != null ? ExternalKey.GetHashCode() : 0));
     }
 }
Esempio n. 10
0
        //https://github.com/matheuss/google-translate-token#readme
        protected virtual async Task <ExternalKey> GetNewExternalKeyAsync()
        {
            HttpWebRequest  request = WebRequest.CreateHttp(_address);
            HttpWebResponse response;

            request.Proxy           = Proxy;
            request.ContinueTimeout = (int)TimeOut.TotalMilliseconds;
            request.ContentType     = "application/x-www-form-urlencoded";


            try
            {
                response = (HttpWebResponse)await request.GetResponseAsync();
            }
            catch (WebException e)
            {
                if ((int)e.Status == 7)     //ProtocolError
                {
                    throw new GoogleTranslateIPBannedException(
                              GoogleTranslateIPBannedException.Operation.TokenGeneration);
                }

                throw;
            }

            string result;

            using (StreamReader streamReader = new StreamReader(response.GetResponseStream()))
                result = await streamReader.ReadToEndAsync();


            long   number;
            string textNumber;

            try
            {
                //get the token changed
                //https://github.com/matheuss/google-translate-token#readme
                int index = result.IndexOf((@"tkk:'"), StringComparison.Ordinal);
                textNumber = result.GetTextBetween(@"tkk:'", "\'", index).Replace("\'", "").Split(new[] { '.' })[1];

                //				int index = result.IndexOf((@"var a\x3d"), StringComparison.Ordinal);
                //				textNumber1 = result.GetTextBetween(@"var a\x3d", ";", index);
                //				textNumber2 = result.GetTextBetween(@"var b\x3d", ";", index);


                if (textNumber == null)
                {
                    throw new ExternalKeyParseException();
                }
            }
            catch (ArgumentException)
            {
                throw new ExternalKeyParseException();
            }


            if (!long.TryParse(textNumber, out number))
            {
                throw new ExternalKeyParseException();
            }

            //ExternalKey newExternalKey = new ExternalKey(UnixTotalHours, number1 + number2);
            ExternalKey newExternalKey = new ExternalKey(UnixTotalHours, number);

            return(newExternalKey);
        }