示例#1
0
        public async Task <IActionResult> Add(AddRepositoryViewModel dto)
        {
            if (!ModelState.IsValid)
            {
                return(View("Add", dto));
            }

            if (await _dbContext.DockerRepositories.AnyAsync(x => x.Name == dto.Name.Trim()))
            {
                ModelState.AddModelError("Name", "名称已经存在");
            }

            string registry = null;
            string schema   = null;

            if (!string.IsNullOrWhiteSpace(dto.Registry))
            {
                if (Uri.TryCreate(dto.Registry, UriKind.RelativeOrAbsolute, out var uri))
                {
                    schema   = uri.Scheme;
                    registry = $"{uri.Host}{(uri.Port == 80 || uri.Port == 443 ? "" : $":{uri.Port}")}";
                }
                else
                {
                    ModelState.AddModelError("Registry", "Registry 格式不正确");
                }
            }

            if (await _dbContext.DockerRepositories.AnyAsync(x =>
                                                             x.Registry == dto.Registry || x.Repository == dto.Repository))
            {
                ModelState.AddModelError("Registry", "镜像仓储已经存在");
            }

            if (!ModelState.IsValid)
            {
                return(View("Add", dto));
            }
            else
            {
                var repository = new DockerRepository
                {
                    Name         = dto.Name,
                    Schema       = schema,
                    Registry     = registry,
                    Repository   = dto.Repository,
                    UserName     = dto.UserName,
                    Password     = dto.Password,
                    CreationTime = DateTime.Now
                };
                _dbContext.DockerRepositories.Add(repository);
                await _dbContext.SaveChangesAsync();

                return(Redirect("/docker-repository"));
            }
        }
示例#2
0
        public async Task <IApiResult> AddAsync(AddRepositoryViewModel dto)
        {
            if (!ModelState.IsValid)
            {
                return(new FailedResult("Arguments invalid"));
            }

            if (await _dbContext.DockerRepositories.AnyAsync(x => x.Name == dto.Name.Trim()))
            {
                return(new FailedResult("名称已经存在"));
            }

            string registry = null;
            string schema   = null;

            if (!string.IsNullOrWhiteSpace(dto.Registry))
            {
                if (Uri.TryCreate(dto.Registry, UriKind.RelativeOrAbsolute, out var uri))
                {
                    schema   = uri.Scheme;
                    registry = $"{uri.Host}{(uri.Port == 80 || uri.Port == 443 ? "" : $":{uri.Port}")}";
                }
                else
                {
                    return(new FailedResult("Registry 格式不正确"));
                }
            }

            if (await _dbContext.DockerRepositories.AnyAsync(x =>
                                                             x.Registry == dto.Registry || x.Repository == dto.Repository))
            {
                return(new FailedResult("镜像仓储已经存在"));
            }

            var repository = new DockerRepository
            {
                Name         = dto.Name,
                Schema       = schema,
                Registry     = registry,
                Repository   = dto.Repository,
                UserName     = dto.UserName,
                Password     = dto.Password,
                CreationTime = DateTimeOffset.Now
            };

            _dbContext.DockerRepositories.Add(repository);
            await _dbContext.SaveChangesAsync();

            return(new ApiResult("OK"));
        }
示例#3
0
        public async Task <IActionResult> Add(AddRepositoryViewModel dto)
        {
            if (!ModelState.IsValid)
            {
                return(View("Add", dto));
            }

            var items = await _dbContext.DockerRepositories.Where(x =>
                                                                  x.Name == dto.Name || x.Repository == dto.Repository).ToListAsync();

            var valid = true;

            if (items.Any(x => x.Name == dto.Name))
            {
                ModelState.AddModelError("Name", "名称已经存在");
                valid = false;
            }

            if (items.Any(x => x.Repository == dto.Repository && x.Registry == dto.Registry))
            {
                ModelState.AddModelError("Repository", "镜像仓储已经存在");
                if (valid)
                {
                    valid = false;
                }
            }

            if (!valid)
            {
                return(View("Add", dto));
            }
            else
            {
                var repository = new DockerRepository
                {
                    Name         = dto.Name,
                    Registry     = string.IsNullOrWhiteSpace(dto.Registry) ? null : new Uri(dto.Registry).AbsoluteUri,
                    Repository   = dto.Repository,
                    UserName     = dto.UserName,
                    Password     = dto.Password,
                    CreationTime = DateTime.Now
                };
                _dbContext.DockerRepositories.Add(repository);
                await _dbContext.SaveChangesAsync();

                return(Redirect("/docker-repository"));
            }
        }
示例#4
0
        private static async Task InitializeSeedDataAsync(PortalDbContext context, IScheduler sched)
        {
            if (!await context.DockerRepositories.AnyAsync())
            {
                var repo = new DockerRepository
                {
                    Name         = "DockerHub",
                    Schema       = null,
                    Registry     = null,
                    Repository   = "dotnetspider/spiders.startup",
                    CreationTime = DateTimeOffset.Now,
                    UserName     = "",
                    Password     = ""
                };
                await context.DockerRepositories.AddAsync(repo);

                var spider = new Data.Spider
                {
                    Name         = "cnblogs",
                    Cron         = "0 1 */1 * * ?",
                    Repository   = "dotnetspider/spiders.startup",
                    Type         = "DotnetSpider.Spiders.CnblogsSpider",
                    Tag          = "latest",
                    CreationTime = DateTimeOffset.Now
                };
                await context.Spiders.AddAsync(spider);

                await context.SaveChangesAsync();

                var trigger = TriggerBuilder.Create().WithCronSchedule(spider.Cron)
                              .WithIdentity(spider.Id.ToString())
                              .Build();
                var qzJob = JobBuilder.Create <QuartzJob>().WithIdentity(spider.Id.ToString())
                            .WithDescription(spider.Name)
                            .RequestRecovery(true).Build();
                await sched.ScheduleJob(qzJob, trigger);
            }
        }
示例#5
0
        private void InitializedData(PortalDbContext context, IScheduler sched)
        {
            if (!context.DockerRepositories.Any())
            {
                var repo = new DockerRepository
                {
                    Name         = "DockerHub",
                    Schema       = null,
                    Registry     = null,
                    Repository   = "dotnetspider/spiders.startup",
                    CreationTime = DateTime.Now,
                    UserName     = "",
                    Password     = ""
                };
                context.DockerRepositories.Add(repo);

                var spider = new Entity.Spider
                {
                    Name         = "cnblogs",
                    Cron         = "0 1 */1 * * ?",
                    Repository   = "dotnetspider/spiders.startup",
                    Type         = "DotnetSpider.Spiders.CnblogsSpider",
                    Tag          = "latest",
                    CreationTime = DateTime.Now
                };
                context.Spiders.Add(spider);
                context.SaveChanges();

                var trigger = TriggerBuilder.Create().WithCronSchedule(spider.Cron).WithIdentity(spider.Id.ToString())
                              .Build();
                var qzJob = JobBuilder.Create <TriggerJob>().WithIdentity(spider.Id.ToString())
                            .WithDescription(spider.Name)
                            .RequestRecovery(true).Build();
                sched.ScheduleJob(qzJob, trigger).GetAwaiter().GetResult();
            }
        }