Beispiel #1
0
        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);
        }
Beispiel #2
0
        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));
        }
Beispiel #3
0
        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);
        }
Beispiel #4
0
    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);
    }
Beispiel #5
0
        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());
                }
            });
        }
Beispiel #6
0
    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);
    }
Beispiel #7
0
 public WebUserRet(WebRet web, TUser user) : base(web, user)
 {
 }
Beispiel #8
0
        public async Task <byte[]> DownloadAsync(WebMethods method, string url, CancellationToken cancel = default)
        {
            WebRet ret = await Web.SimpleQueryAsync(method, url, cancel);

            return(ret.Data);
        }
Beispiel #9
0
    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);
    }