Esempio n. 1
0
        private IActionResult LightningChargeServices(ExternalService service, ExternalConnectionString connectionString, bool showQR = false)
        {
            ChargeServiceViewModel vm = new ChargeServiceViewModel();

            vm.Uri      = connectionString.Server.AbsoluteUri;
            vm.APIToken = connectionString.APIToken;
            var builder = new UriBuilder(connectionString.Server);

            builder.UserName    = "******";
            builder.Password    = vm.APIToken;
            vm.AuthenticatedUri = builder.ToString();
            return(View(nameof(LightningChargeServices), vm));
        }
Esempio n. 2
0
        private IActionResult LndServices(ExternalService service, ExternalConnectionString connectionString, uint?nonce)
        {
            var model = new LndGrpcServicesViewModel();

            if (service.Type == ExternalServiceTypes.LNDGRPC)
            {
                model.Host                = $"{connectionString.Server.DnsSafeHost}:{connectionString.Server.Port}";
                model.SSL                 = connectionString.Server.Scheme == "https";
                model.ConnectionType      = "GRPC";
                model.GRPCSSLCipherSuites = "ECDHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES128-SHA256";
            }
            else if (service.Type == ExternalServiceTypes.LNDRest)
            {
                model.Uri            = connectionString.Server.AbsoluteUri;
                model.ConnectionType = "REST";
            }

            if (connectionString.CertificateThumbprint != null)
            {
                model.CertificateThumbprint = connectionString.CertificateThumbprint;
            }
            if (connectionString.Macaroon != null)
            {
                model.Macaroon = Encoders.Hex.EncodeData(connectionString.Macaroon);
            }
            model.AdminMacaroon    = connectionString.Macaroons?.AdminMacaroon?.Hex;
            model.InvoiceMacaroon  = connectionString.Macaroons?.InvoiceMacaroon?.Hex;
            model.ReadonlyMacaroon = connectionString.Macaroons?.ReadonlyMacaroon?.Hex;

            if (nonce != null)
            {
                var configKey = GetConfigKey("lnd", service.ServiceName, service.CryptoCode, nonce.Value);
                var lnConfig  = _LnConfigProvider.GetConfig(configKey);
                if (lnConfig != null)
                {
                    model.QRCodeLink = Url.Action(nameof(GetLNDConfig), new { configKey = configKey });
                    model.QRCode     = $"config={model.QRCodeLink}";
                }
            }

            return(View(nameof(LndServices), model));
        }
Esempio n. 3
0
        public async Task <IActionResult> ServicePost(string serviceName, string cryptoCode)
        {
            if (!_dashBoard.IsFullySynched(cryptoCode, out var unusud))
            {
                StatusMessage = $"Error: {cryptoCode} is not fully synched";
                return(RedirectToAction(nameof(Services)));
            }
            var service = _Options.ExternalServices.GetService(serviceName, cryptoCode);

            if (service == null)
            {
                return(NotFound());
            }

            ExternalConnectionString connectionString = null;

            try
            {
                connectionString = await service.ConnectionString.Expand(this.Request.GetAbsoluteUriNoPathBase(), service.Type);
            }
            catch (Exception ex)
            {
                StatusMessage = $"Error: {ex.Message}";
                return(RedirectToAction(nameof(Services)));
            }

            LightningConfigurations confs = new LightningConfigurations();

            if (service.Type == ExternalServiceTypes.LNDGRPC)
            {
                LightningConfiguration grpcConf = new LightningConfiguration();
                grpcConf.Type = "grpc";
                grpcConf.Host = connectionString.Server.DnsSafeHost;
                grpcConf.Port = connectionString.Server.Port;
                grpcConf.SSL  = connectionString.Server.Scheme == "https";
                confs.Configurations.Add(grpcConf);
            }
            else if (service.Type == ExternalServiceTypes.LNDRest)
            {
                var restconf = new LNDRestConfiguration();
                restconf.Type = "lnd-rest";
                restconf.Uri  = connectionString.Server.AbsoluteUri;
                confs.Configurations.Add(restconf);
            }
            else
            {
                throw new NotSupportedException(service.Type.ToString());
            }
            var commonConf = (LNDConfiguration)confs.Configurations[confs.Configurations.Count - 1];

            commonConf.ChainType             = _Options.NetworkType.ToString();
            commonConf.CryptoCode            = cryptoCode;
            commonConf.Macaroon              = connectionString.Macaroon == null ? null : Encoders.Hex.EncodeData(connectionString.Macaroon);
            commonConf.CertificateThumbprint = connectionString.CertificateThumbprint == null ? null : connectionString.CertificateThumbprint;
            commonConf.AdminMacaroon         = connectionString.Macaroons?.AdminMacaroon?.Hex;
            commonConf.ReadonlyMacaroon      = connectionString.Macaroons?.ReadonlyMacaroon?.Hex;
            commonConf.InvoiceMacaroon       = connectionString.Macaroons?.InvoiceMacaroon?.Hex;

            var nonce     = RandomUtils.GetUInt32();
            var configKey = GetConfigKey("lnd", serviceName, cryptoCode, nonce);

            _LnConfigProvider.KeepConfig(configKey, confs);
            return(RedirectToAction(nameof(Service), new { cryptoCode = cryptoCode, serviceName = serviceName, nonce = nonce }));
        }