Beispiel #1
0
        public ApiModule(IDataServiceHostSettings dshs, IAuthorisation authorisation, IDataServiceDesignerDataService dsdDataService, ISchemaBrowserRepository sbRepository)
            : base("api/dataServicedesigner")
        {
            _dshs           = dshs;
            _authorisation  = authorisation;
            _dsdDataService = dsdDataService;
            _sbRepository   = sbRepository;

            Get[@"/availableschemas/{dataServiceName}", true] = async(args, ct) =>
            {
                string dataServiceName = args.dataServiceName;

                var builder = new QueryBuilder <DomainDataService>()
                              .Filter(d => d.Property(p => p.Name).EqualTo(dataServiceName));
                //.Expand(d => d.Connection);

                var roleIds = await _authorisation.GetAdministratorRoleIdsAsync();

                var queryResult = _dsdDataService.Query(new Query(builder.GetQuery()), BwfSystemUser, roleIds, string.Empty, _dshs.SystemToken, out var fault);

                var dataService = queryResult?.Records?.SingleOrDefault() as DomainDataService;

                if (dataService is null)
                {
                    return(Response.AsJson(Enumerable.Empty <DbSchema>(), HttpStatusCode.BadRequest));
                }

                var schemas = _sbRepository.GetWhere <DbSchema>(s => s.Connection.Name == dataService.Connection.Name);
                return(Response.AsJson(schemas));
            };
        }
Beispiel #2
0
 public SchemaBrowserDataService(
     IEnumerable <IRecordType> recordTypes,
     IGlobalisationProvider globalisationProvider,
     IAuthorisation authorisation,
     IMetadataProvider metadataProvider,
     ISchemaBrowserRepository repository)
     : base(
         Constants.DataServiceName,
         globalisationProvider,
         repository as InMemoryDataServiceRepository,
         recordTypes,
         authorisation,
         metadataProvider)
 {
     ValidatorOptions.CascadeMode = CascadeMode.StopOnFirstFailure;
 }
Beispiel #3
0
 bool Initialise()
 {
     if (_sbDataService is null)
     {
         try
         {
             _sbRepository           = _kernel.Get <ISchemaBrowserRepository>();
             _sbDataService          = _kernel.Get <ISchemaBrowserDataService>();
             _dbConnectionRecordType = _sbDataService.GetRecordType(nameof(DbConnection)) as IChangeableRecordType <long, DbConnection>;
         }
         catch
         {
             _sbDataService          = null;
             _dbConnectionRecordType = null;
         }
     }
     return(!(_sbDataService is null));
 }
Beispiel #4
0
        public ApiModule(IAuthentication authentication, IGlobalisationProvider globalisationProvider, ISchemaBrowserRepository repository)
            : base("api/schemabrowser/ext", globalisationProvider)
        {
            _authentication = authentication;
            _repository     = repository;
            _utils          = new SchemaBrowserUtils();

            Get[@"/TestConnection/{databaseType}"] = args =>
            {
                string       databaseType     = args.databaseType;
                DatabaseType dbType           = databaseType.FromDatabaseValue <DatabaseType>();
                string       connectionString = Request.Query["cs"]; //can't get this to work via normal parameter as it's encoded
                string       message          = string.Empty;

                _utils.TestConnection(dbType, connectionString, out message);

                return(Response.AsJson(message));
            };
        }
        public DbConnectionValidator(ISchemaBrowserRepository repository)
        {
            _repository = repository;
            _utils      = new SchemaBrowserUtils();

            RuleFor(x => x.Id)
            .GreaterThanOrEqualTo(0L);

            RuleFor(x => x.Name)
            .NotEmpty()
            .Length(1, 64)
            .Must(BeUnique)
            .WithMessage("The 'Name' must be unique");

            RuleFor(x => x.DataSource)
            .NotEmpty()
            .Length(1, 1000);

            RuleFor(x => x.InitialCatalog)
            .Length(0, 64)
            .Must(OnlyBeSuppliedForSQLServer)
            .WithMessage("An 'Initial Catalog' is required for SQL Server connections");

            RuleFor(x => x.Username)
            .Length(0, 64)
            .Must(OnlyBeSuppliedForNonIntegratedSecurity)
            .WithMessage("A 'User Name' is required");

            RuleFor(x => x.Password)
            .Length(0, 64)
            .Must(OnlyBeSuppliedForNonIntegratedSecurity)
            .WithMessage("A 'Password' is required");

            RuleFor(x => x.ConnectionString)
            .NotEmpty()
            .Length(1, 2000);

            //Custom(p => MustHaveAValidConnectionString(p));
        }
Beispiel #6
0
        public ApiModule(IDataServiceHostSettings dshs, IAuthorisation authorisation, IDataServiceDesignerDataService dsdDataService, ISchemaBrowserRepository sbRepository)
            : base("api/dataservicedesigner")
        {
            _dshs           = dshs;
            _authorisation  = authorisation;
            _dsdDataService = dsdDataService;
            _sbRepository   = sbRepository;

            Get[@"/availableschemas/{dataServiceName}", true] = async(args, ct) =>
            {
                string dataServiceName = args.dataServiceName;

                var builder = new QueryBuilder <DomainDataService>()
                              .Filter(d => d.Property(p => p.Name).EqualTo(dataServiceName))
                              .Expand(d => d.Connection);

                var roleIds = await _authorisation.GetAdministratorRoleIdsAsync();

                var queryResult = _dsdDataService.Query(new Query(builder.GetQuery()), BwfSystemUser, roleIds, string.Empty, _dshs.SystemToken, out var fault);

                var dataService = queryResult?.Records?.SingleOrDefault() as DomainDataService;

                if (dataService is null)
                {
                    return(Response.AsJson(Enumerable.Empty <DbSchema>(), HttpStatusCode.BadRequest));
                }

                var schemas = _sbRepository.GetWhere <DbSchema>(s => s.Connection.Name == dataService.Connection.Name);
                return(Response.AsJson(schemas));
            };

            Get[@"generatetemplate/{solutionName}", true] = async(args, ct) => {
                string solutionName = args.solutionName;

                var solution = await GetSolution(solutionName);

                return(await Task.Run(() =>
                {
                    var templateGenerator = new TemplateGenerator();
                    var baseDir = AppDomain.CurrentDomain.BaseDirectory;
                    var zipPath = Path.Combine(baseDir, $"DownLoads\\{solutionName}");
                    var zipFile = templateGenerator.GenerateAllAndZip(solution, zipPath);

                    var stream = new FileStream(zipFile, FileMode.Open);
                    var response = new StreamResponse(() => stream, MimeTypes.GetMimeType(zipFile));
                    var fileName = Path.GetFileName(zipFile);
                    var attachment = response.AsAttachment(fileName);
                    return attachment;
                }));
            };

            async Task <DataServiceSolution> GetSolution(string solutionName)
            {
                var builder = new QueryBuilder <DataServiceSolution>()
                              .Expand(p => p.DataServices[0].Solution)
                              .Expand(p => p.DataServices[0].Connection)
                              .Expand(p => p.DataServices[0].Schemas)
                              .Expand(p => p.DataServices[0].Schemas[0].Objects)
                              .Expand(p => p.DataServices[0].Schemas[0].Objects[0].Properties)
                              .Expand(p => p.DataServices[0].Schemas[0].References)
                              .Expand(p => p.DataServices[0].Schemas[0].References[0].Properties)
                              .Filter(d => d.Property(p => p.Name).EqualTo(solutionName));

                var roleIds = await _authorisation.GetAdministratorRoleIdsAsync();

                var queryResult = _dsdDataService.Query(new Query(builder.GetQuery()), BwfSystemUser, roleIds, string.Empty, _dshs.SystemToken, out var fault);

                var solution = queryResult?.Records?.SingleOrDefault() as DataServiceSolution;

                return(solution);
            }
        }
Beispiel #7
0
 public DbConnectionRecordType(ISchemaBrowserRepository repository)
     : base()
 {
     _repository = repository;
     _utils      = new SchemaBrowserUtils();
 }