Browse Source

ApiResult now works to retrieve data via GET using an access token!

master
Claire 4 years ago
parent
commit
3e07fd307c
  1. BIN
      MatrixDotNetLib/.vs/MatrixDotNetLib/v16/.suo
  2. 11
      MatrixDotNetLib/MatrixDotNetCmd/Program.cs
  3. BIN
      MatrixDotNetLib/MatrixDotNetCmd/obj/Debug/netcoreapp3.1/MatrixDotNetCmd.csprojAssemblyReference.cache
  4. 706
      MatrixDotNetLib/MatrixDotNetLib/MatrixApis.cs
  5. 118
      MatrixDotNetLib/MatrixDotNetLib/MatrixSessionManager.cs
  6. BIN
      MatrixDotNetLib/MatrixDotNetLib/bin/Debug/netcoreapp3.1/MatrixDotNetLib.dll
  7. BIN
      MatrixDotNetLib/MatrixDotNetLib/bin/Debug/netcoreapp3.1/MatrixDotNetLib.pdb
  8. 2
      MatrixDotNetLib/MatrixDotNetLib/obj/Debug/netcoreapp3.1/MatrixDotNetLib.csproj.CoreCompileInputs.cache
  9. BIN
      MatrixDotNetLib/MatrixDotNetLib/obj/Debug/netcoreapp3.1/MatrixDotNetLib.csprojAssemblyReference.cache
  10. BIN
      MatrixDotNetLib/MatrixDotNetLib/obj/Debug/netcoreapp3.1/MatrixDotNetLib.dll
  11. BIN
      MatrixDotNetLib/MatrixDotNetLib/obj/Debug/netcoreapp3.1/MatrixDotNetLib.pdb

BIN
MatrixDotNetLib/.vs/MatrixDotNetLib/v16/.suo

diff.bin_not_shown

11
MatrixDotNetLib/MatrixDotNetCmd/Program.cs

@ -51,6 +51,8 @@ namespace MatrixDotNetCmd
// stop once user hits Enter // stop once user hits Enter
while (key.Key != ConsoleKey.Enter); while (key.Key != ConsoleKey.Enter);
pass = pass.Trim();
Console.WriteLine(); Console.WriteLine();
Console.WriteLine("Logging in..."); Console.WriteLine("Logging in...");
@ -59,19 +61,20 @@ namespace MatrixDotNetCmd
try try
{ {
// create a new response object; trim password to remove added \r character // create a new response object; trim password to remove added \r character
MatrixLoginResponse response = session.Login(server, user, pass.Trim()); MatrixLoginResponse response = session.Login(server, user, pass);
// notify user is logged in // notify user is logged in
Console.WriteLine("Logged in!"); Console.WriteLine("Logged in!");
// assign globals // assign globals
globals.Token = response.Token; globals.Token = response.Token;
session.Token = response.Token;
globals.Server = server; globals.Server = server;
session.Server = server;
globals.Session = response; globals.Session = response;
MatrixUserRooms rooms = session.GetRooms(globals.Token); MatrixUserRooms rooms = session.GetRooms();
// prompt user to choose a room
// i guess we should find an alias for each room, if it exists
Console.WriteLine(rooms.Joined[0]); Console.WriteLine(rooms.Joined[0]);
} }

BIN
MatrixDotNetLib/MatrixDotNetCmd/obj/Debug/netcoreapp3.1/MatrixDotNetCmd.csprojAssemblyReference.cache

diff.bin_not_shown

706
MatrixDotNetLib/MatrixDotNetLib/MatrixApis.cs

@ -7,120 +7,636 @@ namespace MatrixDotNetLib
public class MatrixApis public class MatrixApis
{ {
public class Server public static class Server
{ {
/// <summary>
/// Gets discovery information about the domain.
/// </summary>
/// <remarks>
/// https://matrix.org/docs/api/client-server/#!/Server32administration/getWellknown
/// </remarks>
public static string Discovery = "/.well-known/matrix/client"; public static string Discovery = "/.well-known/matrix/client";
/// <summary>
/// Gets the versions of the specifications supported by the server.
/// </summary>
/// <remarks>
/// https://matrix.org/docs/api/client-server/#!/Server32administration/getVersions
/// </remarks>
public static string Versions = "/_matrix/client/versions"; public static string Versions = "/_matrix/client/versions";
/// <summary>
/// Gets information about the server's supported feature set and other relevant capabilities.
/// </summary>
/// <remarks>
/// https://matrix.org/docs/api/client-server/#!/Capabilities/getCapabilities
/// </remarks>
public static string Capabilities = "/_matrix/client/r0/capabilities"; public static string Capabilities = "/_matrix/client/r0/capabilities";
/// <summary>
/// Gets information about a particular user.
/// </summary>
/// <remarks>
/// https://matrix.org/docs/api/client-server/#!/Server32administration/getWhoIs
/// </remarks>
public static string Whois = "/_matrix/client/r0/admin/whois/{userid}"; public static string Whois = "/_matrix/client/r0/admin/whois/{userid}";
/// <summary>
/// Performs a full text search across different categories. Posts with a search object.
/// </summary>
/// <remarks>
/// https://matrix.org/docs/api/client-server/#!/Search/search
/// </remarks>
public static string Search = "/_matrix/client/r0/search"; public static string Search = "/_matrix/client/r0/search";
/// <summary>
/// Performs a user search. Posts with a user search object.
/// </summary>
/// <remarks>
/// https://matrix.org/docs/api/client-server/#!/User32data/searchUserDirectory
/// </remarks>
public static string UserSearch = "/_matrix/client/r0/user_directory/search"; public static string UserSearch = "/_matrix/client/r0/user_directory/search";
/// <summary>
/// Lists the public rooms on the server. Posts with a filter object.
/// </summary>
/// <remarks>
/// https://matrix.org/docs/api/client-server/#!/Room32discovery/getPublicRooms
/// </remarks>
public static string RoomList = "/_matrix/client/r0/publicrooms"; public static string RoomList = "/_matrix/client/r0/publicrooms";
public static string ManageRooms = "/_matrix/client/r0/directory/list/appservice/{networkid}/{roomid}";
public static string UpgradeRoom = "/_matrix/client/r0/rooms/{roomid}/upgrade";
public static string Openid = "/_matrix/client/r0/user/{userid}/openid/request_token";
public static string Voip = "/_matrix/client/r0/voip/turnserver";
}
public class Key /// <summary>
{ /// Updates the visibility of a given room in the directory. Puts a visibility object.
public static string Latest = "/_matrix/client/r0/keys/changes"; /// </summary>
public static string Claim = "/_matrix/client/r0/keys/claim"; /// <remarks>
public static string Download = "/_matrix/client/r0/keys/query"; /// https://matrix.org/docs/api/client-server/#!/Application32service32room32directory32management/updateAppserviceRoomDirectoryVsibility
public static string Upload = "/_matrix/client/r0/keys/upload"; /// </remarks>
} public static string ManageRooms = "/_matrix/client/r0/directory/list/appservice/{networkid}/{roomid}";
public class Device /// <summary>
{ /// Upgrades the given room to a particular room version. Posts with a room upgrade object.
public static string Manage = "/_matrix/client/r0/devices"; /// </summary>
public static string MultiDelete = "/_matrix/client/r0/delete_devices"; /// <remarks>
public static string Send = "/_matrix/client/r0/sendtodevice/{eventtype}/{txnid}"; /// https://matrix.org/docs/api/client-server/#!/Room32upgrades/upgradeRoom
} /// </remarks>
public static string UpgradeRoom = "/_matrix/client/r0/rooms/{roomid}/upgrade";
public class Media /// <summary>
{ /// Gets an OpenID token object for use with another service. Posts with a userId parameter.
public static string Config = "/_matrix/media/r0/config"; /// </summary>
public static string Save = "/_matrix/media/r0/download/{servername}/{mediaid}"; /// <remarks>
public static string Saveas = "/_matrix/media/r0/download/{servername}/{mediaid}/{filename}"; /// https://matrix.org/docs/api/client-server/#!/OpenID/requestOpenIdToken
public static string Preview = "/_matrix/media/r0/preview_url"; /// </remarks>
public static string Thumb = "/_matrix/media/r0/thumbnail/{servername}/{mediaid}"; public static string Openid = "/_matrix/client/r0/user/{userid}/openid/request_token";
public static string Upload = "/_matrix/media/r0/upload";
}
public class Notifier /// <summary>
{ /// Gets client credentials for use when initiating a call.
public static string Notifiers = "/_matrix/client/r0/notifications"; /// </summary>
public static string Pushers = "/_matrix/client/r0/pushers"; /// <remarks>
public static string Set = "/_matrix/client/r0/pushers/set"; /// https://matrix.org/docs/api/client-server/#!/VOIP/getTurnServer
public static string Rules = "/_matrix/client/r0/pushrules/"; /// </remarks>
public static string Voip = "/_matrix/client/r0/voip/turnserver";
} }
public class NotifierRule public static class Key
{ {
public static string Manage = "/_matrix/client/r0/pushrules/{scope}/{kind}/{ruleid}"; /// <summary>
public static string Actions = "/_matrix/client/r0/pushrules/{scope}/{kind}/{ruleid}/actions"; /// Gets a list of users who have updated their device identity keys.
public static string Toggle = "/_matrix/client/r0/pushrules/{scope}/{kind}/{ruleid}/enabled"; /// </summary>
} /// <remarks>
/// https://matrix.org/docs/api/client-server/#!/End45to45end32encryption/getKeysChanges
/// </remarks>
public static string Latest = "/_matrix/client/r0/keys/changes";
public static class User /// <summary>
{ /// Claims one-time keys for use in pre-key messages. Posts with a key object.
public static string Thirdparty = "/_matrix/client/r0/account/3pid"; /// </summary>
public static string Deactivate = "/_matrix/client/r0/account/deactivate"; /// <remarks>
public static string Password = "/_matrix/client/r0/account/password"; /// https://matrix.org/docs/api/client-server/#!/End45to45end32encryption/claimKeys
public static string Register = "/_matrix/client/r0/register"; /// </remarks>
public static string WhoAmI = "/_matrix/client/r0/account/whoami"; public static string Claim = "/_matrix/client/r0/keys/claim";
public static string Profile = "/_matrix/client/r0/profile/{userid}";
public static string Avatar = "/_matrix/client/r0/profile/{userid}/avtatar_url";
public static string DisplayName = "/_matrix/client/r0/profile/{userid}/displayname";
public static string ExtraInfo = "/_matrix/client/r0/user/{userid}/account_data/{type}";
public static string EventFilter = "/_matrix/client/r0/user/{userid}/filter";
public static string Rooms = "/_matrix/client/r0/joined_rooms";
public static string Login = "/_matrix/client/r0/login";
public static string Logout = "/_matrix/client/r0/logout";
public static string Status = "/_matrix/client/r0/presence/{userid}/status";
}
public class UserRoom /// <summary>
{ /// Returns the current devices and identity keys for the given users. Posts with a key object.
public static string Extrainfo = "/_matrix/client/r0/user/{userid}/rooms/{roomid}/account_data/{type}"; /// </summary>
public static string Tags = "/_matrix/client/r0/user/{userid}/rooms/{roomid}/tags"; /// <remarks>
} /// https://matrix.org/docs/api/client-server/#!/End45to45end32encryption/queryKeys
/// </remarks>
public static string Download = "/_matrix/client/r0/keys/query";
public class Room /// <summary>
{ /// Publishes end-to-end encryption keys for the device. Posts with a key object.
public static string Create = "/_matrix/client/r0/createroom"; /// </summary>
public static string Aliases = "/_matrix/client/unstable/org.matrix.msc2432/rooms/{roomid}/aliases"; /// <remarks>
public static string Active = "/_matrix/client/r0/rooms/{roomid}/joined_members"; /// https://matrix.org/docs/api/client-server/#!/End45to45end32encryption/uploadKeys
public static string Members = "/_matrix/client/r0/rooms/{roomid}/members"; /// </remarks>
public static string Messages = "/_matrix/client/r0/rooms/{roomid}/messages"; public static string Upload = "/_matrix/client/r0/keys/upload";
public static string Join = "/_matrix/client/r0/join/{roomidoralias}"; }
public static string Ban = "/_matrix/client/r0/rooms/{roomid}/ban";
public static string Forget = "/_matrix/client/r0/rooms/{roomid}/forget";
public static string Invite = "/_matrix/client/r0/rooms/{roomid}/invite";
public static string IdJoin = "/_matrix/client/r0/rooms/{roomid}/join";
public static string Kick = "/_matrix/client/r0/rooms/{roomid}/kick";
public static string Leave = "/_matrix/client/r0/rooms/{roomid}/leave";
public static string Unban = "/_matrix/client/r0/rooms/{roomid}/unban";
public static string Marker = "/_matrix/client/r0/rooms/{roomid}/read_markers";
}
public class RoomEvent public static class Device
{ {
public static string Context = "/_matrix/client/r0/rooms/{roomid}/context/{eventid}"; /// <summary>
public static string Event = "/_matrix/client/r0/rooms/{roomid}/event/{eventid}"; /// Private string for device URL
public static string Receipt = "/_matrix/client/r0/rooms/{roomid}/receipt/{receipttype}/{eventid}"; /// </summary>
public static string Redact = "/_matrix/client/r0/rooms/{roomid}/redact/{eventid}/{txnid}"; private static string _deviceIdUrl = "/_matrix/client/r0/devices/{deviceId}";
public static string Send = "/_matrix/client/r0/rooms/{roomid}/send/{eventtype}/{txnid}";
public static string Typing = "/_matrix/client/r0/rooms/{roomid}/typing/{userid}";
public static string Flag = "/_matrix/client/r0/rooms/{roomid}/report/{eventid}";
}
public class RoomState /// <summary>
{ /// Gets information about all devices for the current user.
public static string List = "/_matrix/client/r0/rooms/{roomid}/state"; /// </summary>
public static string State = "/_matrix/client/r0/rooms/{roomid}/state/{eventtype}/{statekey}"; /// <remarks>
} /// https://matrix.org/docs/api/client-server/#!/Device32management/getDevices
} /// </remarks>
public static string Manage = "/_matrix/client/r0/devices";
/// <summary>
/// Deletes the given device, and invalidates any access token associated with it. Deletes with interactive auth object and deviceId parameter.
/// </summary>
/// <remarks>
/// https://matrix.org/docs/api/client-server/#!/Device32management/deleteDevice
/// </remarks>
public static string Delete = _deviceIdUrl;
/// <summary>
/// Gets information on a single device, by device id. Gets with deviceId parameter.
/// </summary>
/// <remarks>
/// https://matrix.org/docs/api/client-server/#!/Device32management/getDevice
/// </remarks>
public static string Info = _deviceIdUrl;
/// <summary>
/// Updates the metadata (display name) on the given device. Puts a device metadata object with deviceId parameter.
/// </summary>
/// <remarks>
/// https://matrix.org/docs/api/client-server/#!/Device32management/updateDevice
/// </remarks>
public static string Update = _deviceIdUrl;
/// <summary>
/// Deletes the given devices, and invalidates any access token associated with them. Posts with an interactive auth + device list object.
/// </summary>
/// <remarks>
/// https://matrix.org/docs/api/client-server/#!/Device32management/deleteDevices
/// </remarks>
public static string MultiDelete = "/_matrix/client/r0/delete_devices";
/// <summary>
/// Sends send-to-device events to the given devices. Puts a device message object with eventType and txnId parameters.
/// </summary>
/// <remarks>
/// https://matrix.org/docs/api/client-server/#!/Send45to45Device32messaging/sendToDevice
/// </remarks>
public static string Send = "/_matrix/client/r0/sendtodevice/{eventtype}/{txnid}";
}
public static class Media
{
/// <summary>
///
/// </summary>
/// <remarks>
///
/// </remarks>
public static string Config = "/_matrix/media/r0/config";
/// <summary>
///
/// </summary>
/// <remarks>
///
/// </remarks>
public static string Save = "/_matrix/media/r0/download/{servername}/{mediaid}";
/// <summary>
///
/// </summary>
/// <remarks>
///
/// </remarks>
public static string Saveas = "/_matrix/media/r0/download/{servername}/{mediaid}/{filename}";
/// <summary>
///
/// </summary>
/// <remarks>
///
/// </remarks>
public static string Preview = "/_matrix/media/r0/preview_url";
/// <summary>
///
/// </summary>
/// <remarks>
///
/// </remarks>
public static string Thumb = "/_matrix/media/r0/thumbnail/{servername}/{mediaid}";
/// <summary>
///
/// </summary>
/// <remarks>
///
/// </remarks>
public static string Upload = "/_matrix/media/r0/upload";
}
public static class Notifier
{
/// <summary>
///
/// </summary>
/// <remarks>
///
/// </remarks>
public static string Notifiers = "/_matrix/client/r0/notifications";
/// <summary>
///
/// </summary>
/// <remarks>
///
/// </remarks>
public static string Pushers = "/_matrix/client/r0/pushers";
/// <summary>
///
/// </summary>
/// <remarks>
///
/// </remarks>
public static string Set = "/_matrix/client/r0/pushers/set";
/// <summary>
///
/// </summary>
/// <remarks>
///
/// </remarks>
public static string Rules = "/_matrix/client/r0/pushrules/";
}
public static class NotifierRule
{
/// <summary>
///
/// </summary>
/// <remarks>
///
/// </remarks>
public static string Manage = "/_matrix/client/r0/pushrules/{scope}/{kind}/{ruleid}";
/// <summary>
///
/// </summary>
/// <remarks>
///
/// </remarks>
public static string Actions = "/_matrix/client/r0/pushrules/{scope}/{kind}/{ruleid}/actions";
/// <summary>
///
/// </summary>
/// <remarks>
///
/// </remarks>
public static string Toggle = "/_matrix/client/r0/pushrules/{scope}/{kind}/{ruleid}/enabled";
}
public static class User
{
/// <summary>
///
/// </summary>
/// <remarks>
///
/// </remarks>
public static string Thirdparty = "/_matrix/client/r0/account/3pid";
/// <summary>
///
/// </summary>
/// <remarks>
///
/// </remarks>
public static string Deactivate = "/_matrix/client/r0/account/deactivate";
/// <summary>
///
/// </summary>
/// <remarks>
///
/// </remarks>
public static string Password = "/_matrix/client/r0/account/password";
/// <summary>
///
/// </summary>
/// <remarks>
///
/// </remarks>
public static string Register = "/_matrix/client/r0/register";
/// <summary>
///
/// </summary>
/// <remarks>
///
/// </remarks>
public static string WhoAmI = "/_matrix/client/r0/account/whoami";
/// <summary>
///
/// </summary>
/// <remarks>
///
/// </remarks>
public static string Profile = "/_matrix/client/r0/profile/{userid}";
/// <summary>
///
/// </summary>
/// <remarks>
///
/// </remarks>
public static string Avatar = "/_matrix/client/r0/profile/{userid}/avtatar_url";
/// <summary>
///
/// </summary>
/// <remarks>
///
/// </remarks>
public static string DisplayName = "/_matrix/client/r0/profile/{userid}/displayname";
/// <summary>
///
/// </summary>
/// <remarks>
///
/// </remarks>
public static string ExtraInfo = "/_matrix/client/r0/user/{userid}/account_data/{type}";
/// <summary>
///
/// </summary>
/// <remarks>
///
/// </remarks>
public static string EventFilter = "/_matrix/client/r0/user/{userid}/filter";
/// <summary>
/// Gets a list of the user's current rooms.
/// </summary>
/// <remarks>
/// https://matrix.org/docs/api/client-server/#!/Room32membership/getJoinedRooms
/// </remarks>
public static string Rooms = "/_matrix/client/r0/joined_rooms";
/// <summary>
///
/// </summary>
/// <remarks>
///
/// </remarks>
public static string Login = "/_matrix/client/r0/login";
/// <summary>
///
/// </summary>
/// <remarks>
///
/// </remarks>
public static string Logout = "/_matrix/client/r0/logout";
/// <summary>
///
/// </summary>
/// <remarks>
///
/// </remarks>
public static string Status = "/_matrix/client/r0/presence/{userid}/status";
}
public static class UserRoom
{
/// <summary>
///
/// </summary>
/// <remarks>
///
/// </remarks>
public static string Extrainfo = "/_matrix/client/r0/user/{userid}/rooms/{roomid}/account_data/{type}";
/// <summary>
///
/// </summary>
/// <remarks>
///
/// </remarks>
public static string Tags = "/_matrix/client/r0/user/{userid}/rooms/{roomid}/tags";
}
public static class Room
{
/// <summary>
///
/// </summary>
/// <remarks>
///
/// </remarks>
public static string Create = "/_matrix/client/r0/createroom";
/// <summary>
///
/// </summary>
/// <remarks>
///
/// </remarks>
public static string Aliases = "/_matrix/client/unstable/org.matrix.msc2432/rooms/{roomid}/aliases";
/// <summary>
///
/// </summary>
/// <remarks>
///
/// </remarks>
public static string Active = "/_matrix/client/r0/rooms/{roomid}/joined_members";
/// <summary>
///
/// </summary>
/// <remarks>
///
/// </remarks>
public static string Members = "/_matrix/client/r0/rooms/{roomid}/members";
/// <summary>
///
/// </summary>
/// <remarks>
///
/// </remarks>
public static string Messages = "/_matrix/client/r0/rooms/{roomid}/messages";
/// <summary>
///
/// </summary>
/// <remarks>
///
/// </remarks>
public static string Join = "/_matrix/client/r0/join/{roomidoralias}";
/// <summary>
///
/// </summary>
/// <remarks>
///
/// </remarks>
public static string Ban = "/_matrix/client/r0/rooms/{roomid}/ban";
/// <summary>
///
/// </summary>
/// <remarks>
///
/// </remarks>
public static string Forget = "/_matrix/client/r0/rooms/{roomid}/forget";
/// <summary>
///
/// </summary>
/// <remarks>
///
/// </remarks>
public static string Invite = "/_matrix/client/r0/rooms/{roomid}/invite";
/// <summary>
///
/// </summary>
/// <remarks>
///
/// </remarks>
public static string IdJoin = "/_matrix/client/r0/rooms/{roomid}/join";
/// <summary>
///
/// </summary>
/// <remarks>
///
/// </remarks>
public static string Kick = "/_matrix/client/r0/rooms/{roomid}/kick";
/// <summary>
///
/// </summary>
/// <remarks>
///
/// </remarks>
public static string Leave = "/_matrix/client/r0/rooms/{roomid}/leave";
/// <summary>
///
/// </summary>
/// <remarks>
///
/// </remarks>
public static string Unban = "/_matrix/client/r0/rooms/{roomid}/unban";
/// <summary>
///
/// </summary>
/// <remarks>
///
/// </remarks>
public static string Marker = "/_matrix/client/r0/rooms/{roomid}/read_markers";
}
public static class RoomEvent
{
/// <summary>
///
/// </summary>
/// <remarks>
///
/// </remarks>
public static string Context = "/_matrix/client/r0/rooms/{roomid}/context/{eventid}";
/// <summary>
///
/// </summary>
/// <remarks>
///
/// </remarks>
public static string Event = "/_matrix/client/r0/rooms/{roomid}/event/{eventid}";
/// <summary>
///
/// </summary>
/// <remarks>
///
/// </remarks>
public static string Receipt = "/_matrix/client/r0/rooms/{roomid}/receipt/{receipttype}/{eventid}";
/// <summary>
///
/// </summary>
/// <remarks>
///
/// </remarks>
public static string Redact = "/_matrix/client/r0/rooms/{roomid}/redact/{eventid}/{txnid}";
/// <summary>
///
/// </summary>
/// <remarks>
///
/// </remarks>
public static string Send = "/_matrix/client/r0/rooms/{roomid}/send/{eventtype}/{txnid}";
/// <summary>
///
/// </summary>
/// <remarks>
///
/// </remarks>
public static string Typing = "/_matrix/client/r0/rooms/{roomid}/typing/{userid}";
/// <summary>
///
/// </summary>
/// <remarks>
///
/// </remarks>
public static string Flag = "/_matrix/client/r0/rooms/{roomid}/report/{eventid}";
}
public static class RoomState
{
/// <summary>
///
/// </summary>
/// <remarks>
///
/// </remarks>
public static string List = "/_matrix/client/r0/rooms/{roomid}/state";
/// <summary>
///
/// </summary>
/// <remarks>
///
/// </remarks>
public static string State = "/_matrix/client/r0/rooms/{roomid}/state/{eventtype}/{statekey}";
}
}
public class MatrixApiEntities public class MatrixApiEntities
{ {

118
MatrixDotNetLib/MatrixDotNetLib/MatrixSessionManager.cs

@ -1,6 +1,7 @@
using Newtonsoft.Json; using Newtonsoft.Json;
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Diagnostics;
using System.Net; using System.Net;
using System.Net.Http; using System.Net.Http;
using System.Net.Http.Headers; using System.Net.Http.Headers;
@ -13,10 +14,21 @@ namespace MatrixDotNetLib
{ {
public class MatrixSessionManager public class MatrixSessionManager
{ {
/// <summary>
/// Gets or sets the authentication token.
/// </summary>
public string Token { get; set; } public string Token { get; set; }
/// <summary>
/// Gets or sets the Matrix homeserver FQDN.
/// </summary>
public string Server { get; set; } public string Server { get; set; }
/// <summary>
/// Gets or sets the login session as a MatrixLoginResponse object.
/// </summary>
public MatrixLoginResponse LoginSession { get; set; }
/// <summary> /// <summary>
/// Logs the user in with specified server and credentials. /// Logs the user in with specified server and credentials.
/// </summary> /// </summary>
@ -27,6 +39,9 @@ namespace MatrixDotNetLib
/// <returns></returns> /// <returns></returns>
public MatrixLoginResponse Login(string server, string user, string pass, string device = "") public MatrixLoginResponse Login(string server, string user, string pass, string device = "")
{ {
// set the object's server
this.Server = server;
MatrixLoginIdentifier userId = new MatrixLoginIdentifier() MatrixLoginIdentifier userId = new MatrixLoginIdentifier()
{ {
IdType = "m.id.user", IdType = "m.id.user",
@ -45,51 +60,34 @@ namespace MatrixDotNetLib
theRequest.DeviceId = device; theRequest.DeviceId = device;
} }
// create a web request
string loginUrl = "https://" + server + MatrixApis.User.Login;
// serialize object into JSON // serialize object into JSON
string requestJson = JsonConvert.SerializeObject(theRequest); string requestJson = JsonConvert.SerializeObject(theRequest);
string responseJson = ApiResult(MatrixApis.User.Login, httpAction.GET, requestJson); string responseJson = ApiResult(MatrixApis.User.Login, httpAction.POST, requestJson);
MatrixLoginResponse response = JsonConvert.DeserializeObject<MatrixLoginResponse>(responseJson); MatrixLoginResponse response = JsonConvert.DeserializeObject<MatrixLoginResponse>(responseJson);
return response;
//// simplest implementation // we're logged in, so set the object's token
//// might not work for UWP this.Token = response.Token;
//// sauce: https://stackoverflow.com/questions/5527316/how-to-set-the-content-of-an-httpwebrequest-in-c
//HttpContent requestContent = new StringContent(requestJson, Encoding.UTF8, "application/json");
//HttpClient client = new HttpClient(); // also set the object's session data
//client.BaseAddress = new Uri(loginUrl); this.LoginSession = response;
//client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
//HttpResponseMessage responseMessage = client.PostAsync(loginUrl, requestContent).Result; return response;
//string responseString = responseMessage.Content.ReadAsStringAsync().Result; }
//if(responseString.Contains("errcode"))
//{
// // deserialize into error object
// MatrixError error = JsonConvert.DeserializeObject<MatrixError>(responseString);
// // convert error object to a string /// <summary>
// string errMsg = error.ErrorCode + ": " + error.ErrorMessage; /// Gets the logged-in user's currently-joined rooms.
/// </summary>
/// <returns></returns>
public MatrixUserRooms GetRooms()
{
// // throw exception (can be caught and handled gracefully) string responseJson = ApiResult(MatrixApis.User.Rooms, httpAction.GET);
// throw new Exception(errMsg);
//}
//else
//{
// MatrixLoginResponse response = JsonConvert.DeserializeObject<MatrixLoginResponse>(responseString);
// return response; MatrixUserRooms theRooms = JsonConvert.DeserializeObject<MatrixUserRooms>(responseJson);
//}
}
public MatrixUserRooms GetRooms(string token) return theRooms;
{
} }
public enum httpAction public enum httpAction
@ -109,10 +107,17 @@ namespace MatrixDotNetLib
// replace all entities in param // replace all entities in param
string url = "https://" + this.Server + api; string url = "https://" + this.Server + api;
HttpClient client = new HttpClient(); HttpClient client = new HttpClient();
client.BaseAddress = new Uri(url); client.BaseAddress = new Uri(url);
// if an access token exists, create a bearer authorization header
if (this.Token != null)
{
client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", this.Token);
}
// init empty string // init empty string
string responseString = ""; string responseString = "";
@ -143,6 +148,7 @@ namespace MatrixDotNetLib
// get value of property through GetType().GetProperty().GetValue() // get value of property through GetType().GetProperty().GetValue()
// sauce: https://www.techrepublic.com/article/applied-reflection-dynamically-accessing-properties-of-a-class-at-runtime/ // sauce: https://www.techrepublic.com/article/applied-reflection-dynamically-accessing-properties-of-a-class-at-runtime/
string newVal = entities.GetType().GetProperty(prop).GetValue(entities).ToString(); string newVal = entities.GetType().GetProperty(prop).GetValue(entities).ToString();
// return URL with entities replaced and URL-encoded // return URL with entities replaced and URL-encoded
url = WebUtility.UrlEncode(url.Replace(oldVal, newVal)); url = WebUtility.UrlEncode(url.Replace(oldVal, newVal));
} }
@ -171,8 +177,6 @@ namespace MatrixDotNetLib
responseMessage = client.PutAsync(url, requestContent).Result; responseMessage = client.PutAsync(url, requestContent).Result;
break; break;
} }
responseString = responseMessage.Content.ReadAsStringAsync().Result;
} }
else else
{ {
@ -188,6 +192,8 @@ namespace MatrixDotNetLib
} }
} }
responseString = responseMessage.Content.ReadAsStringAsync().Result;
if (responseString.Contains("errcode")) if (responseString.Contains("errcode"))
{ {
// deserialize into error object // deserialize into error object
@ -199,10 +205,48 @@ namespace MatrixDotNetLib
// throw exception (can be caught and handled gracefully) // throw exception (can be caught and handled gracefully)
throw new Exception(errMsg); throw new Exception(errMsg);
} }
else if (responseMessage.StatusCode != HttpStatusCode.OK)
{
// web server responded with an HTTP status code other than 200 OK
string errMsg = "Server returned " + (int)responseMessage.StatusCode + ": " + responseMessage.StatusCode.ToString();
throw new Exception(errMsg);
}
else else
{ {
return responseString; return responseString;
} }
} }
} }
} }
//// simplest implementation
//// might not work for UWP
//// sauce: https://stackoverflow.com/questions/5527316/how-to-set-the-content-of-an-httpwebrequest-in-c
//HttpContent requestContent = new StringContent(requestJson, Encoding.UTF8, "application/json");
//HttpClient client = new HttpClient();
//client.BaseAddress = new Uri(loginUrl);
//client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
//HttpResponseMessage responseMessage = client.PostAsync(loginUrl, requestContent).Result;
//string responseString = responseMessage.Content.ReadAsStringAsync().Result;
//if(responseString.Contains("errcode"))
//{
// // deserialize into error object
// MatrixError error = JsonConvert.DeserializeObject<MatrixError>(responseString);
// // convert error object to a string
// string errMsg = error.ErrorCode + ": " + error.ErrorMessage;
// // throw exception (can be caught and handled gracefully)
// throw new Exception(errMsg);
//}
//else
//{
// MatrixLoginResponse response = JsonConvert.DeserializeObject<MatrixLoginResponse>(responseString);
// return response;
//}

BIN
MatrixDotNetLib/MatrixDotNetLib/bin/Debug/netcoreapp3.1/MatrixDotNetLib.dll

diff.bin_not_shown

BIN
MatrixDotNetLib/MatrixDotNetLib/bin/Debug/netcoreapp3.1/MatrixDotNetLib.pdb

diff.bin_not_shown

2
MatrixDotNetLib/MatrixDotNetLib/obj/Debug/netcoreapp3.1/MatrixDotNetLib.csproj.CoreCompileInputs.cache

@ -1 +1 @@
f16bca70409c8e2ae88277b1bedf2f151bb03767 533436dc4ebb032189320843d6e1e024aef4bca8

BIN
MatrixDotNetLib/MatrixDotNetLib/obj/Debug/netcoreapp3.1/MatrixDotNetLib.csprojAssemblyReference.cache

diff.bin_not_shown

BIN
MatrixDotNetLib/MatrixDotNetLib/obj/Debug/netcoreapp3.1/MatrixDotNetLib.dll

diff.bin_not_shown

BIN
MatrixDotNetLib/MatrixDotNetLib/obj/Debug/netcoreapp3.1/MatrixDotNetLib.pdb

diff.bin_not_shown
Loading…
Cancel
Save