/// <summary> /// Retrieves a contact with some user supplied identifier. /// </summary> /// <param name="identifier">The user-supplied identifier for the contact.</param> /// <param name="cancellationToken">A cancellation token.</param> /// <returns> /// A task whose result is the contact, or null if no match is found. /// </returns> public override async Task <Endpoint> LookupAsync(string identifier, CancellationToken cancellationToken = default(CancellationToken)) { if (string.IsNullOrEmpty(identifier)) { return(null); } Verify.Operation(this.AddressBookLookupUrl != null, "AddressBookLookupUrl not initialized"); var queryString = new Dictionary <string, string>(StringComparer.OrdinalIgnoreCase); if (HashedEmailRegEx.IsMatch(identifier)) { queryString["emailHash"] = identifier; } else if (EmailRegEx.IsMatch(identifier)) { queryString["email"] = identifier; } else { return(null); } var builder = new UriBuilder(this.AddressBookLookupUrl); builder.Query = queryString.UrlEncode(); return(await this.DownloadEndpointAsync(builder.Uri, cancellationToken).ConfigureAwait(false)); }
public byte[] RenderReport(Entity report, string format, string parameters) { var session = GetReportSession(report, parameters); var url = "/Reserved.ReportViewerWebControl.axd"; var lcid = report.GetAttributeValue <int>("languagecode"); format = format.ToUpper(); if (format == "WORD" || format == "EXCEL") { format = format + "OPENXML"; } var data = new Dictionary <string, dynamic>() { ["OpType"] = "Export", ["Format"] = format, ["ContentDisposition"] = "AlwaysAttachment", ["FileName"] = string.Empty, ["Culture"] = lcid.ToString(), ["CultureOverrides"] = "False", ["UICulture"] = lcid.ToString(), ["UICultureOverrides"] = "False", ["ReportSession"] = session.Item1, ["ControlID"] = session.Item2 }; return(GetResponse(GetRequest("GET", $"{url}?{data.UrlEncode()}"))); }
private Token GetToken(string resource, string username, string password) { var uri = $"https://login.microsoftonline.com/common/oauth2/token"; var parameters = new Dictionary <string, dynamic>() { ["grant_type"] = "password", ["client_id"] = "2ad88395-b77d-4561-9441-d0e40824f9bc", ["username"] = username, ["password"] = password, ["resource"] = resource, }; var request = WebRequest.CreateHttp(uri); request.Method = "POST"; var body = Encoding.ASCII.GetBytes(parameters.UrlEncode()); request.ContentType = "application/x-www-form-urlencoded"; request.ContentLength = body.Length; using (var stream = request.GetRequestStream()) { stream.Write(body, 0, body.Length); } using (var response = request.GetResponse()) using (var stream = response.GetResponseStream()) { var serializer = new DataContractJsonSerializer(typeof(Token)); return(serializer.ReadObject(stream) as Token); } }
/// <summary> /// Retrieves a contact with some user supplied identifier. /// </summary> /// <param name="identifier">The user-supplied identifier for the contact.</param> /// <param name="cancellationToken">A cancellation token.</param> /// <returns> /// A task whose result is the contact, or null if no match is found. /// </returns> public override async Task<Endpoint> LookupAsync(string identifier, CancellationToken cancellationToken = default(CancellationToken)) { if (string.IsNullOrEmpty(identifier)) { return null; } Verify.Operation(this.AddressBookLookupUrl != null, "AddressBookLookupUrl not initialized"); var queryString = new Dictionary<string, string>(StringComparer.OrdinalIgnoreCase); if (HashedEmailRegEx.IsMatch(identifier)) { queryString["emailHash"] = identifier; } else if (EmailRegEx.IsMatch(identifier)) { queryString["email"] = identifier; } else { return null; } var builder = new UriBuilder(this.AddressBookLookupUrl); builder.Query = queryString.UrlEncode(); return await this.DownloadEndpointAsync(builder.Uri, cancellationToken).ConfigureAwait(false); }
public static void Write(this WebRequest request, Dictionary <string, string> parameters) { var body = Encoding.UTF8.GetBytes(parameters.UrlEncode()); request.ContentLength = body.Length; using (var stream = request.GetRequestStream()) { stream.Write(body, 0, body.Length); } }
public void UrlEncode() { var data = new Dictionary<string, string> { { "a", "b" }, { "a=b&c", "e=f&g" }, }; string urlEncoded = data.UrlEncode(); Assert.That(urlEncoded, Is.EqualTo("a=b&a%3Db%26c=e%3Df%26g")); var decoded = HttpUtility.ParseQueryString(urlEncoded); Assert.That(decoded.Count, Is.EqualTo(data.Count)); foreach (string key in decoded) { Assert.That(data[key], Is.EqualTo(decoded[key])); } }
public void UrlEncode() { var data = new Dictionary <string, string> { { "a", "b" }, { "a=b&c", "e=f&g" }, }; string urlEncoded = data.UrlEncode(); Assert.That(urlEncoded, Is.EqualTo("a=b&a%3Db%26c=e%3Df%26g")); var decoded = HttpUtility.ParseQueryString(urlEncoded); Assert.That(decoded.Count, Is.EqualTo(data.Count)); foreach (string key in decoded) { Assert.That(data[key], Is.EqualTo(decoded[key])); } }
private Tuple <string, string> GetReportSession(Entity report, string parameters) { var name = report.GetAttributeValue <string>("reportnameonsrs"); var isCustom = name == null; var url = "/CRMReports/RSViewer/ReportViewer.aspx"; var data = new Dictionary <string, dynamic>() { ["id"] = report.Id.ToString("B"), ["iscustomreport"] = isCustom.ToString().ToLower(), ["reportnameonsrs"] = name }; if (!string.IsNullOrEmpty(parameters)) { Dictionary <string, dynamic> parsedParameters; try { parsedParameters = parameters.Parse(); } catch (Exception) { throw new Exception("Unable to parse report parameters. Please ensure they are in JSON format."); } if (isCustom) { foreach (var parameter in parsedParameters) { data.Add($"p:{parameter.Key}", parameter.Value); } } else { var filter = new StringBuilder(); filter.Append("<ReportFilter>"); foreach (var parameter in parsedParameters) { filter.Append($"<ReportEntity paramname=\"{parameter.Key}\">{parameter.Value}</ReportEntity>"); } filter.Append("</ReportFilter>"); data.Add("CRM_Filter", filter.ToString()); } } else { if (!isCustom) { var defaultFilter = report.GetAttributeValue <string>("defaultfilter"); data.Add("CRM_Filter", defaultFilter); } } var response = Encoding.UTF8.GetString(GetResponse(GetRequest("POST", url, data.UrlEncode()))); if (response.Contains("ReportSession=") && response.Contains("ControlID=")) { var sessionId = response.Substring(response.LastIndexOf("ReportSession=") + 14, 24); var controlId = response.Substring(response.LastIndexOf("ControlID=") + 10, 32); return(new Tuple <string, string>(sessionId, controlId)); } else { throw new Exception("Error while getting report session. This is most likely an issue with invalid report parameters."); } }
private Tuple <string, string> GetReportSession(Entity report, string parameters) { var name = report.GetAttributeValue <string>("reportnameonsrs"); var isCustom = name == null; var url = "/CRMReports/RSViewer/ReportViewer.aspx"; var data = new Dictionary <string, dynamic>() { ["id"] = report.Id.ToString("B"), ["iscustomreport"] = isCustom.ToString().ToLower(), ["reportnameonsrs"] = name }; if (!string.IsNullOrEmpty(parameters)) { if (isCustom) { foreach (var parameter in parameters.Parse()) { data.Add($"p:{parameter.Key}", parameter.Value); } } else { var filter = new StringBuilder(); filter.Append("<ReportFilter>"); foreach (var parameter in parameters.Parse()) { filter.Append($"<ReportEntity paramname=\"{parameter.Key}\">{parameter.Value}</ReportEntity>"); } filter.Append("</ReportFilter>"); data.Add("CRM_Filter", filter.ToString()); } } else { if (!isCustom) { var defaultFilter = report.GetAttributeValue <string>("defaultfilter"); data.Add("CRM_Filter", defaultFilter); } } var response = Encoding.UTF8.GetString(GetResponse(GetRequest("POST", url, data.UrlEncode()))); var sessionId = response.Substring(response.LastIndexOf("ReportSession=") + 14, 24); var controlId = response.Substring(response.LastIndexOf("ControlID=") + 10, 32); return(new Tuple <string, string>(sessionId, controlId)); }