private static Stream GetRequestBody(IDictionary <string, string> postData) { var ms = new MemoryStream(); if (postData != null) { bool first = true; var writer = new StreamWriter(ms); writer.AutoFlush = true; foreach (var item in postData) { if (!first) { writer.Write("&"); } writer.Write(item.Key); writer.Write("="); writer.Write(UrlEncoder.UrlEncode(item.Value)); writer.WriteLine(); first = false; } ms.Seek(0, SeekOrigin.Begin); } return(ms); }
/// <summary> /// Shortens the specified url. /// </summary> /// <param name="url">URL to shorten.</param> /// <returns>Shortened URL or error message.</returns> public static string Shorten(string url) { string return_text; HttpWebRequest request; try { request = (HttpWebRequest)HttpWebRequest.Create(ApiUrl + UrlEncoder.UrlEncode(url)); request.Method = "GET"; using (StreamReader reader = new StreamReader(request.GetResponse().GetResponseStream())) { return_text = reader.ReadToEnd(); } return_text = return_text.StartsWith("http://") ? string.Format("<a href=\"{0}\">{0}</a>", return_text) : Catalog.GetString("Error: ") + Catalog.GetString("Unspecified error."); } catch (System.Threading.ThreadAbortException ex) { throw ex; } catch (Exception ex) { Tools.PrintInfo(ex, typeof(TinyURL)); return_text = Catalog.GetString("Error: ") + ex.Message; } return(return_text); }
public static byte[] ProcessPostData(IDictionary <string, string> postData) { if (postData == null || postData.Count == 0) { return(null); } var sb = new StringBuilder(); foreach (var pair in postData) { if (sb.Length > 0) { sb.Append("&"); } if (String.IsNullOrEmpty(pair.Value)) { continue; } sb.AppendFormat(CultureInfo.InvariantCulture, "{0}={1}", pair.Key, UrlEncoder.UrlEncode(pair.Value)); } return(Encoding.UTF8.GetBytes(sb.ToString())); }
private string ConstructPathQuery(string uriPath, string afObjectPath) { UrlEncoder urlEncoder = new UrlEncoder(); string afObjectPathEncoded = urlEncoder.UrlEncode(afObjectPath); return(string.Format("{0}?path={1}", uriPath, afObjectPathEncoded)); }
/// <summary> /// Uploads text and returns link. /// </summary> /// <param name="text">Text to upload.</param> /// <param name="name">Uploader name.</param> /// <param name="privacy">Privacy level of paste.</param> /// <param name="expireDate">Time after which upload is deleted.</param> /// <param name="userKey">User authentication key.</param> /// <returns>Link on pastebin.</returns> public static string Upload(string text, string name, int privacy, string expireDate, string userKey) { string return_text; byte[] post_content; HttpWebRequest request; StringBuilder post_builder = new StringBuilder(); post_builder.Append(Parameters.ParamOption).Append("=").Append("paste"); post_builder.Append("&"); post_builder.Append(Parameters.ParamDevKey).Append("=").Append(UrlEncoder.UrlEncode(Key)); post_builder.Append("&"); post_builder.Append(Parameters.ParamCode).Append("=").Append(UrlEncoder.UrlEncode(text)); post_builder.Append("&"); post_builder.Append(Parameters.ParamName).Append("=").Append(UrlEncoder.UrlEncode(name)); post_builder.Append("&"); post_builder.Append(Parameters.ParamPrivate).Append("=").Append(privacy); post_builder.Append("&"); post_builder.Append(Parameters.ParamExpireDate).Append("=").Append(expireDate); if (!string.IsNullOrWhiteSpace(userKey)) { post_builder.Append("&"); post_builder.Append(Parameters.ParamUserKey).Append("=").Append(userKey); } post_content = Encoding.ASCII.GetBytes(post_builder.ToString()); try { request = (HttpWebRequest)HttpWebRequest.Create(ApiUrl); request.Method = "POST"; request.ContentLength = post_content.Length; request.ContentType = "application/x-www-form-urlencoded"; using (Stream writer = request.GetRequestStream()) { writer.Write(post_content, 0, post_content.Length); } using (StreamReader reader = new StreamReader(request.GetResponse().GetResponseStream())) { return_text = reader.ReadToEnd(); } return_text = string.Format("<a href=\"{0}\">{0}</a>", return_text); } catch (System.Threading.ThreadAbortException ex) { throw ex; } catch (Exception ex) { Tools.PrintInfo(ex, typeof(Pastebin)); return_text = Catalog.GetString("Error: ") + ex.Message; } return(return_text); }
/// <summary> /// 根据获取到的 token,来得到登录用户的基本信息,并配对。 /// </summary> protected override async Task <AuthenticationTicket> CreateTicketAsync(ClaimsIdentity identity, AuthenticationProperties properties, OAuthTokenResponse tokens) { var endpoint = Options.UserInformationEndpoint + "?access_token=" + UrlEncoder.UrlEncode(tokens.AccessToken); var response = await Backchannel.GetAsync(endpoint, Context.RequestAborted); response.EnsureSuccessStatusCode(); var payload = JObject.Parse(await response.Content.ReadAsStringAsync()); var context = new OAuthCreatingTicketContext(Context, Options, Backchannel, tokens, payload) { Properties = properties, Principal = new ClaimsPrincipal(identity) }; var identifier = NetEaseHelper.GetId(payload); if (!string.IsNullOrEmpty(identifier)) { identity.AddClaim(new Claim(ClaimTypes.NameIdentifier, identifier, ClaimValueTypes.String, Options.ClaimsIssuer)); identity.AddClaim(new Claim("urn:netease:id", identifier, ClaimValueTypes.String, Options.ClaimsIssuer)); } var name = NetEaseHelper.GetName(payload); if (!string.IsNullOrEmpty(name)) { identity.AddClaim(new Claim(ClaimTypes.Name, name, ClaimValueTypes.String, Options.ClaimsIssuer)); identity.AddClaim(new Claim("urn:netease:name", name, ClaimValueTypes.String, Options.ClaimsIssuer)); } await Options.Events.CreatingTicket(context); return(new AuthenticationTicket(context.Principal, context.Properties, context.Options.AuthenticationScheme)); }
private string ComputeSignature(string consumerSecret, string tokenSecret, string signatureData) { using (var algorithm = new HMACSHA1()) { algorithm.Key = Encoding.ASCII.GetBytes( string.Format(CultureInfo.InvariantCulture, "{0}&{1}", UrlEncoder.UrlEncode(consumerSecret), string.IsNullOrEmpty(tokenSecret) ? string.Empty : UrlEncoder.UrlEncode(tokenSecret))); var hash = algorithm.ComputeHash(Encoding.ASCII.GetBytes(signatureData)); return(Convert.ToBase64String(hash)); } }
/// <summary> /// 计算 MAC 模式值 /// </summary> /// <param name="token">访问令牌</param> /// <param name="key">加密密钥</param> /// <param name="algorithm"></param> /// <param name="message"></param> /// <exception cref="NullReferenceException">message 为空</exception> private string ComputeMAC(string token, string key, HttpRequestMessage message, string algorithm = "HmacSHA1") { var nonce = ComputeNonce(); var param = new[] { nonce, message.Method.Method, // 我去,耗了我一上午,我还以为 message.Headers.Host 取得到值呢 message.RequestUri.Host, message.RequestUri.LocalPath, message.RequestUri.Query.Substring(1) }; var mac = ComputeSignature(string.Join("\n", param) + "\n", key, algorithm); //return $"access_token=\"{token.ToEscapeData()}\", nonce=\"{nonce.ToEscapeData()}\",mac=\"{mac.ToEscapeData()}\""; return($"access_token=\"{UrlEncoder.UrlEncode(token)}\", nonce=\"{UrlEncoder.UrlEncode(nonce)}\",mac=\"{UrlEncoder.UrlEncode(mac)}\""); }
/// <summary> /// Shortens the specified url. /// </summary> /// <param name="url">URL to shorten.</param> /// <param name="login">Bit.ly login.</param> /// <param name="apiKey">Bit.ly API key,</param> /// <returns>Shortened URL or error message.</returns> public static string Shorten(string url, string login, string apiKey) { string return_text; HttpWebRequest request; StringBuilder get_builder = new StringBuilder(ApiShortenUrl); get_builder.Append("?"); get_builder.Append(Parameters.Format).Append("=").Append(Parameters.FormatXml); get_builder.Append("&"); get_builder.Append(Parameters.Login).Append("=").Append(UrlEncoder.UrlEncode(login)); get_builder.Append("&"); get_builder.Append(Parameters.ApiKey).Append("=").Append(UrlEncoder.UrlEncode(apiKey)); get_builder.Append("&"); get_builder.Append(Parameters.Url).Append("=").Append(UrlEncoder.UrlEncode(url)); try { request = (HttpWebRequest)HttpWebRequest.Create(ApiUrl + get_builder.ToString()); request.Method = "GET"; using (StreamReader reader = new StreamReader(request.GetResponse().GetResponseStream())) { using (XmlTextReader xmlreader = new XmlTextReader(reader)) { return_text = ParseResponseXml(xmlreader); } } if (!return_text.StartsWith(Catalog.GetString("Error: "))) { return_text = string.Format("<a href=\"{0}\">{0}</a>", return_text); } } catch (System.Threading.ThreadAbortException ex) { throw ex; } catch (Exception ex) { Tools.PrintInfo(ex, typeof(BitLy)); return_text = Catalog.GetString("Error: ") + ex.Message; } return(return_text); }
/// <summary> /// Gets the user API key. /// </summary> /// <param name="username">Username.</param> /// <param name="password">Password.</param> /// <returns>User key or error message.</returns> public static string GetUserKey(string username, string password) { string return_text; byte[] post_content; HttpWebRequest request; StringBuilder post_builder = new StringBuilder(); post_builder.Append(Parameters.ParamDevKey).Append("=").Append(UrlEncoder.UrlEncode(Key)); post_builder.Append("&"); post_builder.Append(Parameters.ParamUserName).Append("=").Append(UrlEncoder.UrlEncode(username)); post_builder.Append("&"); post_builder.Append(Parameters.ParamUserPassword).Append("=").Append(UrlEncoder.UrlEncode(password)); post_content = Encoding.ASCII.GetBytes(post_builder.ToString()); try { request = (HttpWebRequest)HttpWebRequest.Create(UserApiUrl); request.Method = "POST"; request.ContentLength = post_content.Length; request.ContentType = "application/x-www-form-urlencoded"; using (Stream writer = request.GetRequestStream()) { writer.Write(post_content, 0, post_content.Length); } using (StreamReader reader = new StreamReader(request.GetResponse().GetResponseStream())) { return_text = reader.ReadToEnd(); } } catch (System.Threading.ThreadAbortException ex) { throw ex; } catch (Exception ex) { Tools.PrintInfo(ex, typeof(Pastebin)); return_text = Catalog.GetString("Error: ") + ex.Message; } return(return_text); }
public async Task <SlackResponse> Post(string text) { var urlEncoder = new UrlEncoder(); using (var googleSearchClient = new HttpClient(handler)) { var googleRawResponse = await googleSearchClient.GetAsync( $"{googleCustomSearchConfiguration.Value.APIURL}?q={text}&num=4&cx={urlEncoder.UrlEncode(googleCustomSearchConfiguration.Value.SearchEngineID)}&key={urlEncoder.UrlEncode(googleCustomSearchConfiguration.Value.APIKey)}"); var googleResponse = JsonConvert.DeserializeObject <GoogleCustomSearchResponse>(await googleRawResponse.Content.ReadAsStringAsync()); if (googleResponse.items != null) { List <ulong> questionIDs = new List <ulong>(); foreach (var item in googleResponse.items) { var questionID = getQuestionIDFromURL(item.link); if (questionID != null) { questionIDs.Add(questionID.Value); } } using (var stackOverflowClient = new HttpClient(handler)) { var stackOverflowRawResponse = await stackOverflowClient.GetAsync($"{stackOverflowConfiguration.Value.APIURL}/questions/{string.Join(";", questionIDs)}?site=stackoverflow"); var stackOverflowResponse = JsonConvert.DeserializeObject <StackOverflowResponse>(await stackOverflowRawResponse.Content.ReadAsStringAsync()); var slackResponse = new SlackResponse { response_type = "in_channel", text = $"Thanks for using *Stack Overflow* instead of asking <@U07083MGT> :clap:\nHere are the first *4* results of *{googleResponse.searchInformation.formattedTotalResults}* for: *{text}*", attachments = googleResponse.items.Select(i => { var stackQuestion = stackOverflowResponse.items.SingleOrDefault(q => q.question_id == getQuestionIDFromURL(i.link)); List <Field> fields = new List <Field>(); if (stackQuestion != null) { fields.Add(new Field { title = "Votes", value = stackQuestion.score.ToString(), _short = true }); fields.Add(new Field { title = "Answers", value = stackQuestion.answer_count.ToString(), _short = true }); } return(new Attachment() { //author_name = stackQuestion.owner.display_name, //author_link = stackQuestion.owner.link, title = i.title, text = i.snippet, title_link = i.link, color = stackQuestion == null ? "#c2c2c2" : (stackQuestion.is_answered ? "#49a300" : "#a30000"), fields = fields.ToArray(), thumb_url = stackQuestion?.owner.profile_image }); }).ToList() }; slackResponse.attachments.Add(new Attachment() { title = "See the rest from StackOverflow.com", text = "Open this link to see the rest of the results for StackOverflow", title_link = $"https://www.google.com/search?q={urlEncoder.UrlEncode("site:stackoverflow.com " + text)}", color = "#0266C8" }); slackResponse.attachments.Add(new Attachment() { title = "See the rest from all websites", text = "Open this link to see the rest of the results for all websites", title_link = $"https://www.google.com/search?q={urlEncoder.UrlEncode(text)}", color = "#0266C8" }); return(slackResponse); } } else { return(new SlackResponse { response_type = "in_channel", text = $"No StackOverflow results for: *{text}* :cry:" }); } } }
private async Task <AccessToken> ObtainAccessTokenAsync(string consumerKey, string consumerSecret, RequestToken token, string verifier) { // https://dev.twitter.com/docs/api/1/post/oauth/access_token Logger.LogVerbose("ObtainAccessToken"); var nonce = Guid.NewGuid().ToString("N"); var authorizationParts = new SortedDictionary <string, string> { { "oauth_consumer_key", consumerKey }, { "oauth_nonce", nonce }, { "oauth_signature_method", "HMAC-SHA1" }, { "oauth_token", token.Token }, { "oauth_timestamp", GenerateTimeStamp() }, { "oauth_verifier", verifier }, { "oauth_version", "1.0" }, }; var parameterBuilder = new StringBuilder(); foreach (var authorizationKey in authorizationParts) { parameterBuilder.AppendFormat("{0}={1}&", UrlEncoder.UrlEncode(authorizationKey.Key), UrlEncoder.UrlEncode(authorizationKey.Value)); } parameterBuilder.Length--; var parameterString = parameterBuilder.ToString(); var canonicalizedRequestBuilder = new StringBuilder(); canonicalizedRequestBuilder.Append(HttpMethod.Post.Method); canonicalizedRequestBuilder.Append("&"); canonicalizedRequestBuilder.Append(UrlEncoder.UrlEncode(AccessTokenEndpoint)); canonicalizedRequestBuilder.Append("&"); canonicalizedRequestBuilder.Append(UrlEncoder.UrlEncode(parameterString)); var signature = ComputeSignature(consumerSecret, token.TokenSecret, canonicalizedRequestBuilder.ToString()); authorizationParts.Add("oauth_signature", signature); authorizationParts.Remove("oauth_verifier"); var authorizationHeaderBuilder = new StringBuilder(); authorizationHeaderBuilder.Append("OAuth "); foreach (var authorizationPart in authorizationParts) { authorizationHeaderBuilder.AppendFormat( "{0}=\"{1}\", ", authorizationPart.Key, UrlEncoder.UrlEncode(authorizationPart.Value)); } authorizationHeaderBuilder.Length = authorizationHeaderBuilder.Length - 2; var request = new HttpRequestMessage(HttpMethod.Post, AccessTokenEndpoint); request.Headers.Add("Authorization", authorizationHeaderBuilder.ToString()); var formPairs = new Dictionary <string, string>() { { "oauth_verifier", verifier }, }; request.Content = new FormUrlEncodedContent(formPairs); var response = await _httpClient.SendAsync(request, Context.RequestAborted); if (!response.IsSuccessStatusCode) { Logger.LogError("AccessToken request failed with a status code of " + response.StatusCode); response.EnsureSuccessStatusCode(); // throw } var responseText = await response.Content.ReadAsStringAsync(); var responseParameters = new FormCollection(FormReader.ReadForm(responseText)); return(new AccessToken { Token = Uri.UnescapeDataString(responseParameters["oauth_token"]), TokenSecret = Uri.UnescapeDataString(responseParameters["oauth_token_secret"]), UserId = Uri.UnescapeDataString(responseParameters["user_id"]), ScreenName = Uri.UnescapeDataString(responseParameters["screen_name"]) }); }
private async Task <RequestToken> ObtainRequestTokenAsync(string consumerKey, string consumerSecret, string callBackUri, AuthenticationProperties properties) { Logger.LogVerbose("ObtainRequestToken"); var nonce = Guid.NewGuid().ToString("N"); var authorizationParts = new SortedDictionary <string, string> { { "oauth_callback", callBackUri }, { "oauth_consumer_key", consumerKey }, { "oauth_nonce", nonce }, { "oauth_signature_method", "HMAC-SHA1" }, { "oauth_timestamp", GenerateTimeStamp() }, { "oauth_version", "1.0" } }; var parameterBuilder = new StringBuilder(); foreach (var authorizationKey in authorizationParts) { parameterBuilder.AppendFormat("{0}={1}&", UrlEncoder.UrlEncode(authorizationKey.Key), UrlEncoder.UrlEncode(authorizationKey.Value)); } parameterBuilder.Length--; var parameterString = parameterBuilder.ToString(); var canonicalizedRequestBuilder = new StringBuilder(); canonicalizedRequestBuilder.Append(HttpMethod.Post.Method); canonicalizedRequestBuilder.Append("&"); canonicalizedRequestBuilder.Append(UrlEncoder.UrlEncode(RequestTokenEndpoint)); canonicalizedRequestBuilder.Append("&"); canonicalizedRequestBuilder.Append(UrlEncoder.UrlEncode(parameterString)); var signature = ComputeSignature(consumerSecret, null, canonicalizedRequestBuilder.ToString()); authorizationParts.Add("oauth_signature", signature); var authorizationHeaderBuilder = new StringBuilder(); authorizationHeaderBuilder.Append("OAuth "); foreach (var authorizationPart in authorizationParts) { authorizationHeaderBuilder.AppendFormat( "{0}=\"{1}\", ", authorizationPart.Key, UrlEncoder.UrlEncode(authorizationPart.Value)); } authorizationHeaderBuilder.Length = authorizationHeaderBuilder.Length - 2; var request = new HttpRequestMessage(HttpMethod.Post, RequestTokenEndpoint); request.Headers.Add("Authorization", authorizationHeaderBuilder.ToString()); var response = await _httpClient.SendAsync(request, Context.RequestAborted); response.EnsureSuccessStatusCode(); string responseText = await response.Content.ReadAsStringAsync(); var responseParameters = new FormCollection(FormReader.ReadForm(responseText)); if (string.Equals(responseParameters["oauth_callback_confirmed"], "true", StringComparison.Ordinal)) { return(new RequestToken { Token = Uri.UnescapeDataString(responseParameters["oauth_token"]), TokenSecret = Uri.UnescapeDataString(responseParameters["oauth_token_secret"]), CallbackConfirmed = true, Properties = properties }); } return(new RequestToken()); }
internal string Escape(string what) { return(UrlEncoder.UrlEncode(what ?? string.Empty)); }
protected override async Task <AuthenticationTicket> CreateTicketAsync(ClaimsIdentity identity, AuthenticationProperties properties, OAuthTokenResponse tokens) { var endpoint = Options.UserInformationEndpoint + "?access_token=" + UrlEncoder.UrlEncode(tokens.AccessToken); if (Options.SendAppSecretProof) { endpoint += "&appsecret_proof=" + GenerateAppSecretProof(tokens.AccessToken); } var response = await Backchannel.GetAsync(endpoint, Context.RequestAborted); response.EnsureSuccessStatusCode(); var payload = JObject.Parse(await response.Content.ReadAsStringAsync()); var notification = new OAuthAuthenticatedContext(Context, Options, Backchannel, tokens, payload) { Properties = properties, Principal = new ClaimsPrincipal(identity) }; var identifier = FacebookAuthenticationHelper.GetId(payload); if (!string.IsNullOrEmpty(identifier)) { identity.AddClaim(new Claim(ClaimTypes.NameIdentifier, identifier, ClaimValueTypes.String, Options.ClaimsIssuer)); } var userName = FacebookAuthenticationHelper.GetUserName(payload); if (!string.IsNullOrEmpty(userName)) { identity.AddClaim(new Claim(ClaimsIdentity.DefaultNameClaimType, userName, ClaimValueTypes.String, Options.ClaimsIssuer)); } var email = FacebookAuthenticationHelper.GetEmail(payload); if (!string.IsNullOrEmpty(email)) { identity.AddClaim(new Claim(ClaimTypes.Email, email, ClaimValueTypes.String, Options.ClaimsIssuer)); } var name = FacebookAuthenticationHelper.GetName(payload); if (!string.IsNullOrEmpty(name)) { identity.AddClaim(new Claim("urn:facebook:name", name, ClaimValueTypes.String, Options.ClaimsIssuer)); // Many Facebook accounts do not set the UserName field. Fall back to the Name field instead. if (string.IsNullOrEmpty(userName)) { identity.AddClaim(new Claim(identity.NameClaimType, name, ClaimValueTypes.String, Options.ClaimsIssuer)); } } var link = FacebookAuthenticationHelper.GetLink(payload); if (!string.IsNullOrEmpty(link)) { identity.AddClaim(new Claim("urn:facebook:link", link, ClaimValueTypes.String, Options.ClaimsIssuer)); } await Options.Notifications.Authenticated(notification); return(new AuthenticationTicket(notification.Principal, notification.Properties, notification.Options.AuthenticationScheme)); }
public string UrlEncode(string content) { return(UrlEncoder.UrlEncode(content)); }
private string Escape(string what) { return(UrlEncoder.UrlEncode(what ?? string.Empty)); }
private static string UrlEncode(string content) { return(_urlEncoder.UrlEncode(content)); }
/// <summary> /// Uploads image and returns dictionary of received parameters. /// </summary> /// <param name="img">Image to upload.</param> /// <returns>Dictionary with response parameters.</returns> public static Dictionary <string, string> Upload(Gdk.Pixbuf img) { byte[] post_content; HttpWebRequest request; int basic_length; Dictionary <string, string> response = new Dictionary <string, string>(); StringBuilder post_builder = new StringBuilder(); post_builder.Append(Parameters.ParamKey).Append("=").Append(Key); post_builder.Append("&"); post_builder.Append(Parameters.ParamImage).Append("="); basic_length = post_builder.Length; post_builder.Append(UrlEncoder.UrlEncode(Convert.ToBase64String(img.SaveToBuffer("png")))); post_content = Encoding.UTF8.GetBytes(post_builder.ToString()); if (post_content.Length > MaxContentLength) { post_builder.Remove(basic_length, post_builder.Length - basic_length); post_builder.Append(UrlEncoder.UrlEncode(Convert.ToBase64String(img.SaveToBuffer("jpeg")))); post_content = Encoding.UTF8.GetBytes(post_builder.ToString()); if (post_content.Length > MaxContentLength) { response.Add("FATAL", Catalog.GetString("Image size is too large.")); return(response); } } try { request = (HttpWebRequest)HttpWebRequest.Create(Url); request.Method = "POST"; request.ContentLength = post_content.Length; request.ContentType = "application/x-www-form-urlencoded"; using (Stream writer = request.GetRequestStream()) { writer.Write(post_content, 0, post_content.Length); } using (StreamReader reader = new StreamReader(request.GetResponse().GetResponseStream())) { using (XmlTextReader xmlreader = new XmlTextReader(reader)) { ParseResponseXml(response, xmlreader); } } } catch (System.Threading.ThreadAbortException ex) { throw ex; } catch (Exception ex) { Tools.PrintInfo(ex, typeof(Imgur)); response.Add("FATAL", ex.Message); } return(response); }