using HtmlAgilityPack; using System.Net; using System.Text; using System.Threading.Tasks; using CalDAV.NET;//https://github.com/markatk/CalDAV.NET namespace newsletter.Reporters { public class NextcloudCalendars : Reporter { public Uri url { get; set; } public string username_bot { get; set; } public string password_bot { get; set; } public string username_self { get; set; } public string password_self { get; set; } #pragma warning disable CS1998 public override async Task Report(Configuration.Reporter config) { url = new Uri(config.Misc.FirstOrDefault(kvp => kvp.Key == "url").Value); username_bot = config.Misc.FirstOrDefault(kvp => kvp.Key == "username_bot").Value; password_bot = config.Misc.FirstOrDefault(kvp => kvp.Key == "password_bot").Value; username_self = config.Misc.FirstOrDefault(kvp => kvp.Key == "username_self").Value; password_self = config.Misc.FirstOrDefault(kvp => kvp.Key == "password_self").Value; var sb = new StringBuilder(); sb.AppendLine("nextcloud calendars"); var client = new CalDAV.NET.Client(url, username_bot, password_bot); var cals = await client.GetCalendarsAsync(); if(cals != null && cals.Any()) { foreach(var cal in cals) { sb.AppendLine($"{cal.DisplayName}
"); } } else { sb.AppendLine("no cals found"); } // var clientParams = new WebDavClientParams // { // BaseAddress = url, // Credentials = new NetworkCredential(username_bot, password_bot) // }; // using (var client = new WebDavClient(clientParams)) // { // var result = await client.Propfind(url); // sb.AppendLine($"{result.StatusCode} - {result.Resources?.Count() ?? 0} items
"); // if (result.Resources.Any()) // { // foreach (var resource in result.Resources) // { // if (resource.Uri.EndsWith("/calendars/")) // { // sb.AppendLine($"calendars: {resource.Uri}"); // var resutl2 = await client.GetFileResponse if (resutl2.IsSuccessful && resutl2.Resources?.Any() == true) // { // foreach (var resource2 in result.Resources) // { // sb.AppendLine($"
{resource2.DisplayName} - {resource2.Uri} - is collection? {resource2.IsCollection} - {resource2}"); // } // } // } // } // } // } if (config.Misc?.Any() == true) foreach (var miscConfig in config.Misc) { sb.AppendLine($"{miscConfig.Key}: {miscConfig.Value}"); } return new Report() { ReportContent = HtmlNode.CreateNode($"
{sb.ToString()}
"), TextSummary = "dummy text for testing purposes" }; } #pragma warning restore CS1998 } }