示例#1
0
        public override async Task <IsPublicAccessibleReply> IsPublicAccessible(IsPublicAccessibleRequest request, ServerCallContext context)
        {
            bool isInstalled = _configurationProvider.TryGet(InstallService.INSTALLED_KEY, out string installedValue);

            if (isInstalled)
            {
                AppUser user = await _userManager.GetUserAsync(context.GetHttpContext().User);

                bool isInRole = await _userManager.IsInRoleAsync(user, "admin");

                if (!isInRole)
                {
                    throw new Exception("Unauthorized access");
                }
            }

            HttpClient client    = _httpClientFactory.CreateClient();
            Guid       challenge = Guid.NewGuid();
            ConnectivityCheckRequest connectivityCheckRequest = new ConnectivityCheckRequest
            {
                Hostname  = request.Hostname,
                Challenge = challenge.ToString(),
            };

            StringContent content = new StringContent(JsonSerializer.Serialize <ConnectivityCheckRequest>(connectivityCheckRequest));

            content.Headers.ContentType = new MediaTypeHeaderValue("application/json");

            try
            {
                HttpResponseMessage responseMessage = await client.PostAsync("https://connectivity-check-services.gatekeeper.page", content, context.CancellationToken);

                string responseBody = await responseMessage.Content.ReadAsStringAsync();

                ConnectivityCheckResponse response = JsonSerializer.Deserialize <ConnectivityCheckResponse>(responseBody);

                return(new IsPublicAccessibleReply
                {
                    State = (response.Success ? IsPublicAccessibleReply.Types.AccessibleReplyEnum.Success : IsPublicAccessibleReply.Types.AccessibleReplyEnum.Failure),
                });
            }
            catch { }

            return(new IsPublicAccessibleReply
            {
                State = IsPublicAccessibleReply.Types.AccessibleReplyEnum.Unknown
            });
        }
        public async Task <FormValidatorResponse> Check(string value, CancellationToken cancellationToken)
        {
            IsPublicAccessibleRequest request = new IsPublicAccessibleRequest
            {
                Hostname = value,
            };

            try
            {
                IsPublicAccessibleReply reply = await _connectivityCheckServiceClient.IsPublicAccessibleAsync(request, null, null, cancellationToken);

                if (reply.State == IsPublicAccessibleReply.Types.AccessibleReplyEnum.Success)
                {
                    return(new FormValidatorResponse(true, null));
                }
            }
            catch { }

            return(new FormValidatorResponse(false, "Domain does not point to this server"));
        }