public async Task <WebRet> DownloadAsync(WebMethods method, PrivKey key, string?kid, string url, object?request, CancellationToken cancel = default) { string nonce = await GetNonceAsync(cancel); //("*** " + url)._Debug(); WebRet webret = await Web.RequestWithJwsObjectAsync(method, key, kid, nonce, url, request, cancel, Consts.MimeTypes.JoseJson); return(webret); }
public async Task <WebUserRet <TResponse> > RequestAsync <TResponse>(WebMethods method, PrivKey key, string?kid, string url, object?request, CancellationToken cancel = default) { string nonce = await GetNonceAsync(cancel); //("*** " + url)._Debug(); WebRet webret = await Web.RequestWithJwsObject(method, key, kid, nonce, url, request, cancel, Consts.MimeTypes.JoseJson); TResponse ret = webret.Deserialize <TResponse>(true); //webret.Headers._DebugHeaders(); //webret.ToString()._Debug(); return(webret.CreateUserRet(ret)); }
public async Task <string> GetNonceAsync(CancellationToken cancel = default) { AcmeEntryPoints url = await Options.GetEntryPointsAsync(cancel); WebRet response = await Web.SimpleQueryAsync(WebMethods.HEAD, url.newNonce !, cancel); string ret = response.Headers.GetValues("Replay-Nonce").Single(); if (ret._IsEmpty()) { throw new ApplicationException("Replay-Nonce is empty."); } return(ret); }
public async Task <IPAddress> GetMyIpAsync(IPVersion ver = IPVersion.IPv4, CancellationToken cancel = default) { string url; if (ver == IPVersion.IPv4) { url = Consts.Urls.GetMyIpUrl_IPv4; } else { url = Consts.Urls.GetMyIpUrl_IPv6; } Exception error = new CoresLibException("Unknown Error"); IPAddress?ret = null; for (int i = 0; i < CoresConfig.GetMyIpClientSettings.NumRetry; i++) { try { WebRet webRet = await Web.SimpleQueryAsync(WebMethods.GET, url, cancel); string str = webRet.Data._GetString_Ascii()._OneLine(""); if (str.StartsWith("IP=", StringComparison.OrdinalIgnoreCase)) { ret = IPAddress.Parse(str.Substring(3)); break; } else { throw new ApplicationException($"Invalid IP str: \"{str}\""); } } catch (Exception ex) { error = ex; } } if (ret == null) { throw error !; } return(ret); }
public AcmeClientOptions(string directoryUrl = DefaultEntryPointUrl, TcpIpSystem?tcpIp = null) { DirectoryUrl = directoryUrl; this.TcpIp = tcpIp ?? LocalNet; DirectoryWebContentsCache = new PersistentLocalCache <AcmeEntryPoints>($"acme/directory_{PathParser.Windows.MakeSafeFileName(this.DirectoryUrl)}", CoresConfig.AcmeClientSettings.AcmeDirectoryCacheLifeTime, true, async(cancel) => { using (WebApi api = new WebApi(new WebApiOptions(new WebApiSettings() { SslAcceptAnyCerts = true, Timeout = CoresConfig.AcmeClientSettings.ShortTimeout }))) { WebRet ret = await api.SimpleQueryAsync(WebMethods.GET, this.DirectoryUrl, cancel); return(ret.Deserialize <AcmeEntryPoints>(true)._NullCheck()); } }); }
public async Task <byte[]> SignAsync(string password, ReadOnlyMemory <byte> srcData, string certName, string flags, string comment, int numRetry = 5, CancellationToken cancel = default) { QueryStringList qs = new QueryStringList(); qs.Add("password", password); qs.Add("cert", certName); qs.Add("flags", flags); qs.Add("comment", comment); qs.Add("numretry", numRetry.ToString()); WebRet ret = await this.Web.SimplePostDataAsync(this.Url + "?" + qs, srcData.ToArray(), cancel, Consts.MimeTypes.OctetStream); if (ret.Data.Length <= (srcData.Length * 9L / 10L)) { throw new CoresException("ret.Data.Length <= (srcData.Length * 9L / 10L)"); } if (ExeSignChecker.CheckFileDigitalSignature(ret.Data, flags._InStr("driver", true)) == false) { throw new CoresException("CheckFileDigitalSignature failed."); } return(ret.Data); }
public WebUserRet(WebRet web, TUser user) : base(web, user) { }
public async Task <byte[]> DownloadAsync(WebMethods method, string url, CancellationToken cancel = default) { WebRet ret = await Web.SimpleQueryAsync(method, url, cancel); return(ret.Data); }
public async Task <GetMyIpInfoResult> GetMyIpInfoAsync(IPVersion ver = IPVersion.IPv4, CancellationToken cancel = default) { string url; if (ver == IPVersion.IPv4) { url = Consts.Urls.GetMyIpUrl_IPv4; } else { url = Consts.Urls.GetMyIpUrl_IPv6; } url += "?port=true&fqdn=true"; Exception error = new CoresLibException("Unknown Error"); GetMyIpInfoResult?ret = null; for (int i = 0; i < CoresConfig.GetMyIpClientSettings.NumRetry; i++) { try { WebRet webRet = await Web.SimpleQueryAsync(WebMethods.GET, url, cancel); string str = webRet.Data._GetString_UTF8(); IPAddress?ip = null; string fqdn = ""; int port = 0; foreach (string line in str._GetLines(true)) { if (line._GetKeyAndValue(out string key, out string value, "=")) { key = key.ToUpperInvariant(); switch (key) { case "IP": ip = value._NonNullTrim()._ToIPAddress(ver == IPVersion.IPv4 ? AllowedIPVersions.IPv4 : AllowedIPVersions.IPv6); break; case "FQDN": fqdn = value._NonNullTrim(); break; case "PORT": port = value._NonNullTrim()._ToInt(); break; } } } if (ip != null && port != 0) { if (fqdn._IsEmpty()) { fqdn = ip.ToString(); } ret = new GetMyIpInfoResult(ip, port, fqdn, null !); break; } else { throw new ApplicationException($"Invalid GetMyIp Server reply str: \"{str}\""); } } catch (Exception ex) { error = ex; } } if (ret == null) { throw error !; } return(ret); }