Пример #1
0
        public JsonResult DeploySmartContracts(DeployModel model)
        {
            var result = new ApiJsonResult();

            try
            {
                using (var dbContext = new DatabaseContext())
                {
                    var networkIP = GetIP(model.Network);

                    if (!string.IsNullOrEmpty(networkIP))
                    {
                        if (string.IsNullOrEmpty(model.PublicKey) || string.IsNullOrEmpty(model.PrivateKey))
                        {
                            var email = User?.Identity?.Name;
                            var user  = dbContext.Users.FirstOrDefault(x => x.Email == email);
                            model.PublicKey  = user?.PublicKey;
                            model.PrivateKey = user?.PrivateKey;
                        }

                        using (Work work = new Work(networkIP))
                        {
                            var transaction = work.Api.SendTransaction <CreateTransactionModel>(new CreateTransactionModel(new TransactionCreateModel
                            {
                                Amount = "0",
                                Fee    = "1",
                                Source = model.PublicKey,
                                Smart  = new SmartCreateModel {
                                    Code = model.JavaCode
                                }
                            }), Base58Check.Base58CheckEncoding.DecodePlain(model.PrivateKey));

                            var source = Base58Check.Base58CheckEncoding.EncodePlain(transaction.Source);
                            var target = Base58Check.Base58CheckEncoding.EncodePlain(transaction.Target);

                            result.IsSuccess = true;
                            result.Address   = target;
                            result.Message   = "Ok!";
                        }
                    }
                    else
                    {
                        result.IsSuccess = false;
                        result.Message   = "Network is wrong.";
                    }
                }
            }
            catch (Exception err)
            {
                result.IsSuccess = false;
                result.Message   = "Error: " + err.Message;
            }

            return(new JsonResult
            {
                MaxJsonLength = Int32.MaxValue,
                Data = result,
                JsonRequestBehavior = JsonRequestBehavior.AllowGet
            });
        }
        public OperationResult Deploy(DeployModel deployModel)
        {
            var deployedSiteIds = new List <int>();

            var sitesToBeRetractedFrom = new List <int>();
            var sitesToBeDeployedTo    = new List <int>();

            var core        = _coreHelper.GetCore();
            var templateDto = core.TemplateItemRead(deployModel.Id);

            foreach (var site in templateDto.DeployedSites)
            {
                deployedSiteIds.Add(site.SiteUId);
            }

            var requestedSiteIds = deployModel
                                   .DeployCheckboxes
                                   .Select(deployCheckbox => deployCheckbox.Id)
                                   .ToList();

            if (requestedSiteIds.Count == 0)
            {
                sitesToBeRetractedFrom.AddRange(templateDto.DeployedSites.Select(site => site.SiteUId));
            }
            else
            {
                sitesToBeDeployedTo.AddRange(requestedSiteIds.Where(siteId => !deployedSiteIds.Contains(siteId)));
            }

            if (deployedSiteIds.Count != 0)
            {
                foreach (var site in templateDto.DeployedSites)
                {
                    if (!requestedSiteIds.Contains(site.SiteUId))
                    {
                        if (!sitesToBeRetractedFrom.Contains(site.SiteUId))
                        {
                            sitesToBeRetractedFrom.Add(site.SiteUId);
                        }
                    }
                }
            }

            if (sitesToBeDeployedTo.Any())
            {
                var mainElement = core.TemplateRead(deployModel.Id);
                mainElement.Repeated =
                    0; // We set this right now hardcoded, this will let the eForm be deployed until end date or we actively retract it.
                mainElement.EndDate   = DateTime.Now.AddYears(10).ToUniversalTime();
                mainElement.StartDate = DateTime.Now.ToUniversalTime();
                core.CaseCreate(mainElement, "", sitesToBeDeployedTo, "");
            }

            foreach (var siteUId in sitesToBeRetractedFrom)
            {
                core.CaseDelete(deployModel.Id, siteUId);
            }

            return(new OperationResult(true, LocaleHelper.GetString("ParamPairedSuccessfully", templateDto.Label)));
        }
        public IActionResult TryMe([FromForm] string template, string random)
        {
            if (string.IsNullOrEmpty(random))
            {
                //no javascript or javascript error
            }

            ViewBag.template = template;
            if (string.IsNullOrEmpty(template) || template.Trim().Length <= 0)
            {
                ViewBag.Error = "Please enter a valid GitHub repository URL.";
                return(View("TryMe"));
            }
            if (!Uri.IsWellFormedUriString(template, UriKind.Absolute))
            {
                ViewBag.Error = "Please enter a valid GitHub repository URL.";
                return(View("TryMe"));
            }
            template = template.Trim();
            if (!template.ToLower().StartsWith("https://github.com/"))
            {
                ViewBag.Error = "Please enter a valid GitHub repository URL.";
                return(View("TryMe"));
            }

            //at the time of fetching the configuration file from the repository there will be more validations

            var segments = new Uri(template).LocalPath.Split('/');
            var ghOrg    = segments[1];
            var ghRepo   = segments[2];

            var details = new DeployModel();

            details.ghOrg     = ghOrg;
            details.ghRepo    = ghRepo;
            details.ghReferer = template;

            try
            {
                if (User.Claims.Any(C => C.Type == "urn:github:name"))
                {
                    string accessToken = HttpContext.GetTokenAsync("access_token").Result;
                    details.ghToken = accessToken;
                }

                //retrieve the Github Configuration and detials
                var deploy = new DeployAssistant(details);
                var config = deploy.RetrieveGithubConfig();

                details.configurationFile = config;

                HttpContext.Session.Set <DeployModel>("DEPLOY_MODEL", details);

                return(View("TryMe", config));
            } catch (HttpRequestException ex)
            {
                if (ex.Message == System.Net.HttpStatusCode.Unauthorized.ToString() || ex.Message == System.Net.HttpStatusCode.Forbidden.ToString())
                {
                    //authenticate
                    return(Redirect("/signin-gh?redirect=/deploy/tryme?template=" + template));
                }
                else
                {
                    ViewBag.Error = "Couldn't retrieve the file, server returned a " + ex.Message + " error.";
                    return(View("TryMe"));
                }
            } catch (Exception ex)
            {
                ViewBag.Error = "Couldn't process the configuration file.";
                return(View("TryMe"));
            }
        }
Пример #4
0
 public async Task <OperationResult> Deploy([FromBody] DeployModel deployModel)
 {
     return(await _templatesService.Deploy(deployModel));
 }
        public async Task <OperationResult> Deploy(DeployModel deployModel)
        {
            var sitesToBeRetractedFrom = new List <int>();
            var sitesToBeDeployedTo    = new List <int>();

            var core = await _coreHelper.GetCore();

            await using var dbContext = core.DbContextHelper.GetDbContext();
            var language = await _userService.GetCurrentUserLanguage();

            var templateDto = await core.TemplateItemRead(deployModel.Id, language);

            var deployedSiteIds = templateDto.DeployedSites.Select(site => site.SiteUId).ToList();

            var requestedSiteIds = deployModel
                                   .DeployCheckboxes
                                   .Select(deployCheckbox => deployCheckbox.Id)
                                   .ToList();

            if (requestedSiteIds.Count == 0)
            {
                sitesToBeRetractedFrom.AddRange(templateDto.DeployedSites.Select(site => site.SiteUId));
            }
            else
            {
                sitesToBeDeployedTo.AddRange(requestedSiteIds.Where(siteId => !deployedSiteIds.Contains(siteId)));
            }

            if (deployedSiteIds.Count != 0)
            {
                foreach (var site in templateDto.DeployedSites)
                {
                    if (!requestedSiteIds.Contains(site.SiteUId))
                    {
                        if (!sitesToBeRetractedFrom.Contains(site.SiteUId))
                        {
                            sitesToBeRetractedFrom.Add(site.SiteUId);
                        }
                    }
                }
            }

            if (sitesToBeDeployedTo.Any())
            {
                foreach (var i in sitesToBeDeployedTo)
                {
                    var site = await dbContext.Sites.SingleAsync(x => x.MicrotingUid == i);

                    language = await dbContext.Languages.SingleAsync(x => x.Id == site.LanguageId);

                    var mainElement = await core.ReadeForm(deployModel.Id, language);

                    mainElement.Repeated = 0;
                    // We set this right now hardcoded,
                    // this will let the eForm be deployed until end date or we actively retract it.
                    if (deployModel.FolderId != null)
                    {
                        mainElement.CheckListFolderName = dbContext.Folders.Single(x => x.Id == deployModel.FolderId)
                                                          .MicrotingUid.ToString();
                    }

                    mainElement.EndDate   = DateTime.Now.AddYears(10).ToUniversalTime();
                    mainElement.StartDate = DateTime.Now.ToUniversalTime();
                    await core.CaseCreate(mainElement, "", i, deployModel.FolderId);
                }
            }

            foreach (var siteUId in sitesToBeRetractedFrom)
            {
                await core.CaseDelete(deployModel.Id, siteUId);
            }

            return(new OperationResult(true,
                                       _localizationService.GetStringWithFormat("ParamPairedSuccessfully", templateDto.Label)));
        }