コード例 #1
0
 /// <summary>
 /// Set access token for httpClient in use by room
 /// </summary>
 /// <param name="token">Access token</param>
 public void SetAccessToken(string token) => _backendHttpClient.SetAccessToken(token);
コード例 #2
0
        /// <summary>
        /// Login to a Matrix account
        /// </summary>
        /// <param name="host">Homeserver the account uses</param>
        /// <param name="credentials">MatrixCredentials object that contains login info</param>
        /// <returns>Bool based on success or failure</returns>
        public async Task <bool> Login(string host, MatrixCredentials credentials)
        {
            _backendHttpClient = new MatrixHttp(host);

            JObject loginJObject = JObject.FromObject(credentials);

            HttpResponseMessage loginResponse = await _backendHttpClient.Post("/_matrix/client/r0/login", false, loginJObject);

            string loginResponseContent = string.Empty;

            try
            {
                loginResponseContent = await loginResponse.Content.ReadAsStringAsync();

                loginResponse.EnsureSuccessStatusCode();
            }
            catch (HttpRequestException)
            {
                JObject error = JObject.Parse(loginResponseContent);

                switch (loginResponse.StatusCode)
                {
                case HttpStatusCode.BadRequest:
                    throw new MatrixRequestException($"{error["errcode"]} - {error["error"]}. Bad login request");

                case HttpStatusCode.Forbidden:
                    throw new MatrixRequestException($"{error["error"]}. Login credentials were incorrect");

                case HttpStatusCode.TooManyRequests:
                    var rateLimit = (int)error["retry_after_ms"];

                    Console.WriteLine($"You're being rate-limited, waiting {rateLimit}ms");
                    await Task.Delay(rateLimit);

                    return(false);

                default:
                    throw new MatrixRequestException(
                              $"{error["errcode"] ?? ""} - {error["error"] ?? ""}. Unknown error occured, error code {loginResponse.StatusCode.ToString()}");
                }
            }
            catch (NullReferenceException)
            {
                Console.WriteLine("Unknown error occurred in request");
                return(false);
            }

            JObject loginResponseJObject = JObject.Parse(loginResponseContent);

            AccessToken = (string)loginResponseJObject["access_token"];
            DeviceId    = (string)loginResponseJObject["device_id"];
            HomeServer  = (string)loginResponseJObject["home_server"];
            UserId      = (string)loginResponseJObject["user_id"];

            _backendHttpClient.SetAccessToken(AccessToken);

            bool filtersResult = await UploadFilters();

            if (!filtersResult)
            {
                Console.WriteLine("Failed to upload filters");
            }

            return(true);
        }