diff --git a/src/BirdsiteLive/Controllers/WellKnownController.cs b/src/BirdsiteLive/Controllers/WellKnownController.cs index 9c889a0..3fce212 100644 --- a/src/BirdsiteLive/Controllers/WellKnownController.cs +++ b/src/BirdsiteLive/Controllers/WellKnownController.cs @@ -4,6 +4,7 @@ using System.Linq; using System.Threading.Tasks; using BirdsiteLive.Common.Settings; using BirdsiteLive.Models; +using BirdsiteLive.Models.WellKnownModels; using BirdsiteLive.Twitter; using Microsoft.AspNetCore.Mvc; using Microsoft.Extensions.Options; @@ -35,44 +36,85 @@ namespace BirdsiteLive.Controllers { rel = "http://nodeinfo.diaspora.software/ns/schema/2.0", href = $"https://{_settings.Domain}/nodeinfo/2.0.json" + }, + new Link() + { + rel = "http://nodeinfo.diaspora.software/ns/schema/2.1", + href = $"https://{_settings.Domain}/nodeinfo/2.1.json" } } }; return new JsonResult(nodeInfo); } - [Route("/nodeinfo/2.0.json")] - public IActionResult NodeInfo() + [Route("/nodeinfo/{id}.json")] + public IActionResult NodeInfo(string id) { - var nodeInfo = new NodeInfo + if (id == "2.0") { - version = "2.0", - usage = new Usage() + var nodeInfo = new NodeInfoV20 { - localPosts = 0, - users = new Users() + version = "2.0", + usage = new Usage() { - total = 0 + localPosts = 0, + users = new Users() + { + total = 0 + } + }, + software = new Software() + { + name = "birdsitelive", + version = "0.1.0" + }, + protocols = new[] + { + "activitypub" + }, + openRegistrations = false, + services = new Models.WellKnownModels.Services() + { + inbound = new object[0], + outbound = new object[0] } - }, - software = new Software() + }; + return new JsonResult(nodeInfo); + } + if (id == "2.1") + { + var nodeInfo = new NodeInfoV21 { - name = "birdsitelive", - version = "0.1.0" - }, - protocols = new [] - { - "activitypub" - }, - openRegistrations = false, - services = new Services() - { - inbound = new object[0], - outbound = new object[0] - } - }; + version = "2.1", + usage = new Usage() + { + localPosts = 0, + users = new Users() + { + total = 0 + } + }, + software = new SoftwareV21() + { + name = "birdsitelive", + version = "0.1.0", + repository = "https://github.com/NicolasConstant/BirdsiteLive" + }, + protocols = new[] + { + "activitypub" + }, + openRegistrations = false, + services = new Models.WellKnownModels.Services() + { + inbound = new object[0], + outbound = new object[0] + } + }; + return new JsonResult(nodeInfo); + } - return new JsonResult(nodeInfo); + return NotFound(); } [Route("/.well-known/webfinger")] @@ -135,63 +177,4 @@ namespace BirdsiteLive.Controllers return new JsonResult(result); } } - - public class WebFingerResult - { - public string subject { get; set; } - public string[] aliases { get; set; } - public List links { get; set; } = new List(); - } - - public class WebFingerLink - { - public string rel { get; set; } - public string type { get; set; } - public string href { get; set; } - } - - public class WellKnownNodeInfo - { - public Link[] links { get; set; } - } - - public class Link - { - public string href { get; set; } - public string rel { get; set; } - } - - public class NodeInfo - { - public string version { get; set; } - public string[] protocols { get; set; } - public Software software { get; set; } - public Usage usage { get; set; } - public bool openRegistrations { get; set; } - public Services services { get; set; } - //public object metadata { get; set; } - } - - public class Services - { - public object[] inbound { get; set; } - public object[] outbound { get; set; } - } - - public class Software - { - public string name { get; set; } - public string version { get; set; } - } - - public class Usage - { - public int localPosts { get; set; } - public Users users { get; set; } - } - - public class Users - { - public int total { get; set; } - } } \ No newline at end of file diff --git a/src/BirdsiteLive/Models/WellKnownModels/Link.cs b/src/BirdsiteLive/Models/WellKnownModels/Link.cs new file mode 100644 index 0000000..e4bedfe --- /dev/null +++ b/src/BirdsiteLive/Models/WellKnownModels/Link.cs @@ -0,0 +1,8 @@ +namespace BirdsiteLive.Models.WellKnownModels +{ + public class Link + { + public string href { get; set; } + public string rel { get; set; } + } +} \ No newline at end of file diff --git a/src/BirdsiteLive/Models/WellKnownModels/NodeInfoV20.cs b/src/BirdsiteLive/Models/WellKnownModels/NodeInfoV20.cs new file mode 100644 index 0000000..f2c1f92 --- /dev/null +++ b/src/BirdsiteLive/Models/WellKnownModels/NodeInfoV20.cs @@ -0,0 +1,13 @@ +namespace BirdsiteLive.Models.WellKnownModels +{ + public class NodeInfoV20 + { + public string version { get; set; } + public string[] protocols { get; set; } + public Software software { get; set; } + public Usage usage { get; set; } + public bool openRegistrations { get; set; } + public Services services { get; set; } + //public object metadata { get; set; } + } +} \ No newline at end of file diff --git a/src/BirdsiteLive/Models/WellKnownModels/NodeInfoV21.cs b/src/BirdsiteLive/Models/WellKnownModels/NodeInfoV21.cs new file mode 100644 index 0000000..ba50f5b --- /dev/null +++ b/src/BirdsiteLive/Models/WellKnownModels/NodeInfoV21.cs @@ -0,0 +1,13 @@ +namespace BirdsiteLive.Models.WellKnownModels +{ + public class NodeInfoV21 + { + public string version { get; set; } + public string[] protocols { get; set; } + public Usage usage { get; set; } + public bool openRegistrations { get; set; } + public SoftwareV21 software { get; set; } + public Services services { get; set; } + //public object metadata { get; set; } + } +} \ No newline at end of file diff --git a/src/BirdsiteLive/Models/WellKnownModels/Services.cs b/src/BirdsiteLive/Models/WellKnownModels/Services.cs new file mode 100644 index 0000000..fa25074 --- /dev/null +++ b/src/BirdsiteLive/Models/WellKnownModels/Services.cs @@ -0,0 +1,8 @@ +namespace BirdsiteLive.Models.WellKnownModels +{ + public class Services + { + public object[] inbound { get; set; } + public object[] outbound { get; set; } + } +} \ No newline at end of file diff --git a/src/BirdsiteLive/Models/WellKnownModels/Software.cs b/src/BirdsiteLive/Models/WellKnownModels/Software.cs new file mode 100644 index 0000000..9cbefa6 --- /dev/null +++ b/src/BirdsiteLive/Models/WellKnownModels/Software.cs @@ -0,0 +1,8 @@ +namespace BirdsiteLive.Models.WellKnownModels +{ + public class Software + { + public string name { get; set; } + public string version { get; set; } + } +} \ No newline at end of file diff --git a/src/BirdsiteLive/Models/WellKnownModels/SoftwareV21.cs b/src/BirdsiteLive/Models/WellKnownModels/SoftwareV21.cs new file mode 100644 index 0000000..c6fa851 --- /dev/null +++ b/src/BirdsiteLive/Models/WellKnownModels/SoftwareV21.cs @@ -0,0 +1,9 @@ +namespace BirdsiteLive.Models.WellKnownModels +{ + public class SoftwareV21 + { + public string name { get; set; } + public string repository { get; set; } + public string version { get; set; } + } +} \ No newline at end of file diff --git a/src/BirdsiteLive/Models/WellKnownModels/Usage.cs b/src/BirdsiteLive/Models/WellKnownModels/Usage.cs new file mode 100644 index 0000000..693875f --- /dev/null +++ b/src/BirdsiteLive/Models/WellKnownModels/Usage.cs @@ -0,0 +1,8 @@ +namespace BirdsiteLive.Models.WellKnownModels +{ + public class Usage + { + public int localPosts { get; set; } + public Users users { get; set; } + } +} \ No newline at end of file diff --git a/src/BirdsiteLive/Models/WellKnownModels/Users.cs b/src/BirdsiteLive/Models/WellKnownModels/Users.cs new file mode 100644 index 0000000..3abdb70 --- /dev/null +++ b/src/BirdsiteLive/Models/WellKnownModels/Users.cs @@ -0,0 +1,7 @@ +namespace BirdsiteLive.Models.WellKnownModels +{ + public class Users + { + public int total { get; set; } + } +} \ No newline at end of file diff --git a/src/BirdsiteLive/Models/WellKnownModels/WebFingerLink.cs b/src/BirdsiteLive/Models/WellKnownModels/WebFingerLink.cs new file mode 100644 index 0000000..9945336 --- /dev/null +++ b/src/BirdsiteLive/Models/WellKnownModels/WebFingerLink.cs @@ -0,0 +1,9 @@ +namespace BirdsiteLive.Models.WellKnownModels +{ + public class WebFingerLink + { + public string rel { get; set; } + public string type { get; set; } + public string href { get; set; } + } +} \ No newline at end of file diff --git a/src/BirdsiteLive/Models/WellKnownModels/WebFingerResult.cs b/src/BirdsiteLive/Models/WellKnownModels/WebFingerResult.cs new file mode 100644 index 0000000..96c2e84 --- /dev/null +++ b/src/BirdsiteLive/Models/WellKnownModels/WebFingerResult.cs @@ -0,0 +1,11 @@ +using System.Collections.Generic; + +namespace BirdsiteLive.Models.WellKnownModels +{ + public class WebFingerResult + { + public string subject { get; set; } + public string[] aliases { get; set; } + public List links { get; set; } = new List(); + } +} \ No newline at end of file diff --git a/src/BirdsiteLive/Models/WellKnownModels/WellKnownNodeInfo.cs b/src/BirdsiteLive/Models/WellKnownModels/WellKnownNodeInfo.cs new file mode 100644 index 0000000..d34abe6 --- /dev/null +++ b/src/BirdsiteLive/Models/WellKnownModels/WellKnownNodeInfo.cs @@ -0,0 +1,7 @@ +namespace BirdsiteLive.Models.WellKnownModels +{ + public class WellKnownNodeInfo + { + public Link[] links { get; set; } + } +} \ No newline at end of file