Exemplo n.º 1
0
        public static async Task <IActionResult> RegisterDeployedContracts(
            [HttpTrigger(AuthorizationLevel.Anonymous, "post", Route = null)] HttpRequest req,
            ILogger log,
            [Inject(typeof(AsymmetricAuthenticationHandler))] AsymmetricAuthenticationHandler auth,
            [Inject(typeof(IRepository <DeployedContract>))] IRepository <DeployedContract> repo)
        {
            var authResult = await auth.HandleAuthenticateAsync(req, log);

            if (!authResult.Succeeded)
            {
                return(new UnauthorizedResult());
            }

            var user = authResult.Principal.Identity.Name;

            string           requestBody = await new StreamReader(req.Body).ReadToEndAsync();
            DeployedContract contract    = JsonConvert.DeserializeObject <DeployedContract>(requestBody);

            // Reset owner to address of authenticated user
            contract.OwnerAddress = user;

            var result = await repo.AddNew(contract);

            return(new OkObjectResult(result));
        }
Exemplo n.º 2
0
        public static async Task <IActionResult> GetDeployedContracts(
            [HttpTrigger(AuthorizationLevel.Anonymous, "get", Route = null)] HttpRequest req,
            ILogger log,
            [Inject(typeof(AsymmetricAuthenticationHandler))] AsymmetricAuthenticationHandler auth,
            [Inject(typeof(IRepository <DeployedContract>))] IRepository <DeployedContract> repo)
        {
            var authResult = await auth.HandleAuthenticateAsync(req, log);

            if (!authResult.Succeeded)
            {
                return(new UnauthorizedResult());
            }

            var user = authResult.Principal.Identity.Name;

            var result = await repo.Find(c => c.OwnerAddress == user);

            if (req.Query.ContainsKey("id"))
            {
                result = result.Where(c => c.ContractFile.Id == long.Parse(req.Query["id"]));
            }

            if (req.Query.ContainsKey("fileid"))
            {
                result = result.Where(c => c.ContractFile.Id == long.Parse(req.Query["fileid"]));
            }

            return(new OkObjectResult(result));
        }
Exemplo n.º 3
0
        public static async Task <IActionResult> CreateUpdateDeleteContractFile(
            [HttpTrigger(AuthorizationLevel.Anonymous, "get", "post", "put", "delete", Route = null)] HttpRequest req,
            ILogger log,
            [Inject(typeof(AsymmetricAuthenticationHandler))] AsymmetricAuthenticationHandler auth,
            [Inject(typeof(IBlobContractFileRepository))] IBlobContractFileRepository blobContractFileRepository,
            [Inject(typeof(IReferenceBlobContractFileRepository))] IReferenceBlobContractFileRepository referenceBlobContractFileRepository,
            [Inject(typeof(IRepository <ContractFile>))] IRepository <ContractFile> repo)
        {
            if (req.Method.ToUpper() == "GET")
            {
                string id = req.Query["id"];
                long   userId;

                if (long.TryParse(id, out userId))
                {
                    var result = await repo.Get(userId);

                    if (req.Query.ContainsKey("include"))
                    {
                        var includedItems = req.Query["include"].ToString().Split(',');

                        var blobContractFile = await blobContractFileRepository.GetBlobContractFile(result.OwnerAddress, result.Name,
                                                                                                    includedItems.Contains("abi", StringComparer.InvariantCultureIgnoreCase),
                                                                                                    includedItems.Contains("bytecode", StringComparer.InvariantCultureIgnoreCase),
                                                                                                    includedItems.Contains("sourcecode", StringComparer.InvariantCultureIgnoreCase) || includedItems.Contains("source", StringComparer.InvariantCultureIgnoreCase));

                        result.Abi        = blobContractFile.Abi;
                        result.Bytecode   = blobContractFile.Bytecode;
                        result.SourceCode = blobContractFile.SourceCode;
                    }
                    return(new OkObjectResult(result));
                }
                else
                {
                    return(new BadRequestObjectResult("Please include parameter user"));
                }
            }
            else
            {
                var authResult = await auth.HandleAuthenticateAsync(req, log);

                if (!authResult.Succeeded)
                {
                    return(new UnauthorizedResult());
                }

                var user = authResult.Principal.Identity.Name;

                switch (req.Method.ToUpper())
                {
                case "POST": return(await CreateContractFile(user, req, log, repo, blobContractFileRepository, referenceBlobContractFileRepository));

                case "PUT": return(await UpdateContractFile(user, req, repo));

                case "DELETE": return(await DeleteContractFile(user, req, repo, blobContractFileRepository));

                default: return(new BadRequestObjectResult($"Unexpected operation: {req.Method}"));
                }
            }
        }
Exemplo n.º 4
0
        public static async Task <IActionResult> AddFee(
            [HttpTrigger(AuthorizationLevel.Anonymous, "post", Route = null)] HttpRequest req,
            ILogger log,
            [Inject(typeof(AsymmetricAuthenticationHandler))] AsymmetricAuthenticationHandler auth,
            [Inject(typeof(IRepository <Fee>))] IRepository <Fee> repo)
        {
            var authResult = await auth.HandleAuthenticateAsync(req, log);

            if (!authResult.Succeeded)
            {
                return(new UnauthorizedResult());
            }

            var user = authResult.Principal.Identity.Name;

            string requestBody = await new StreamReader(req.Body).ReadToEndAsync();
            Fee    fee         = JsonConvert.DeserializeObject <Fee>(requestBody);

            fee.Timestamp   = DateTime.UtcNow;
            fee.IsConfirmed = false;

            var result = await repo.AddNew(fee);

            return(new OkObjectResult(result));
        }
Exemplo n.º 5
0
        public void Initialize(ExtensionConfigContext context)
        {
            var services = new ServiceCollection();

            var builder = new ConfigurationBuilder()
                          .AddEnvironmentVariables();

            var config = builder.Build();

            //services.AddDbContext<WeatherInsurance.Integration.Database.Context>(options =>
            //      options.UseSqlServer(config.GetConnectionString("Database")), ServiceLifetime.Transient);

            var auth = new AsymmetricAuthenticationHandler(new AsymmetricAuthenticationOptions
            {
                SignatureValidator = Signer.VerifySignature()
            });

            services.AddSingleton(auth);

            var storageAccount = CloudStorageAccount.Parse(config.GetWebJobsConnectionString("AzureWebJobsStorage"));

            services.AddSingleton(storageAccount);

            services.AddSingleton <IBlockchainClientRepository>(new BlockchainClientRepository(config));

            services.AddSingleton <IBlobContractFileRepository, BlobContractFileRepository>();
            services.AddSingleton <IReferenceBlobContractFileRepository, ReferenceBlobContractFileRepository>();

            services.AddTransient <Context>(_ => new Context());

            services.AddTransient <IRepository <Network>, NetworkRepository>();
            services.AddTransient <IRepository <ContractFile>, ContractFileRepository>();
            services.AddTransient <IRepository <DeployedContract>, DeployedContractRepository>();
            services.AddTransient <IRepository <Fee>, FeeRepository>();
            services.AddTransient <IRepository <Purchase>, PurchaseRepository>();

            IDictionary <string, ContractEventListener <InsuranceBoughtEvent> > blockChainEventListeners = new Dictionary <string, ContractEventListener <InsuranceBoughtEvent> >();

            services.AddSingleton(blockChainEventListeners);

            _serviceProvider = services.BuildServiceProvider(true);

            context
            .AddBindingRule <InjectAttribute>()
            .BindToInput <dynamic>(i => _serviceProvider.GetRequiredService(i.Type));
        }
Exemplo n.º 6
0
        public static async Task <IActionResult> GetContractFiles(
            [HttpTrigger(AuthorizationLevel.Anonymous, "get", Route = null)] HttpRequest req,
            ILogger log,
            [Inject(typeof(AsymmetricAuthenticationHandler))] AsymmetricAuthenticationHandler auth,
            [Inject(typeof(IBlobContractFileRepository))] IBlobContractFileRepository blobContractFileRepository,
            [Inject(typeof(IRepository <ContractFile>))] IRepository <ContractFile> repo)
        {
            var authResult = await auth.HandleAuthenticateAsync(req, log);

            if (!authResult.Succeeded)
            {
                return(new UnauthorizedResult());
            }

            var user = authResult.Principal.Identity.Name;

            var result = await repo.Find(c => c.OwnerAddress == user);

            return(new OkObjectResult(result));
        }