diff --git a/Streetwriters.Common/Constants.cs b/Streetwriters.Common/Constants.cs index 3f986a8..2c5f1c7 100644 --- a/Streetwriters.Common/Constants.cs +++ b/Streetwriters.Common/Constants.cs @@ -1,81 +1,81 @@ -/* -This file is part of the Notesnook Sync Server project (https://notesnook.com/) - -Copyright (C) 2023 Streetwriters (Private) Limited - -This program is free software: you can redistribute it and/or modify -it under the terms of the Affero GNU General Public License as published by -the Free Software Foundation, either version 3 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -Affero GNU General Public License for more details. - -You should have received a copy of the Affero GNU General Public License -along with this program. If not, see . -*/ - -using System; - -namespace Streetwriters.Common -{ - public class Constants - { - public static int COMPATIBILITY_VERSION = 1; - public static bool IS_SELF_HOSTED => Environment.GetEnvironmentVariable("SELF_HOSTED") == "1"; - public static bool DISABLE_ACCOUNT_CREATION => Environment.GetEnvironmentVariable("DISABLE_ACCOUNT_CREATION") == "1"; - public static string INSTANCE_NAME => Environment.GetEnvironmentVariable("INSTANCE_NAME") ?? "default"; - - // S3 related - public static string S3_ACCESS_KEY => Environment.GetEnvironmentVariable("S3_ACCESS_KEY"); - public static string S3_ACCESS_KEY_ID => Environment.GetEnvironmentVariable("S3_ACCESS_KEY_ID"); - public static string S3_SERVICE_URL => Environment.GetEnvironmentVariable("S3_SERVICE_URL"); - public static string S3_REGION => Environment.GetEnvironmentVariable("S3_REGION"); - public static string S3_BUCKET_NAME => Environment.GetEnvironmentVariable("S3_BUCKET_NAME"); - public static string S3_INTERNAL_BUCKET_NAME => Environment.GetEnvironmentVariable("S3_INTERNAL_BUCKET_NAME"); - public static string S3_INTERNAL_SERVICE_URL => Environment.GetEnvironmentVariable("S3_INTERNAL_SERVICE_URL"); - - // SMTP settings - public static string SMTP_USERNAME => Environment.GetEnvironmentVariable("SMTP_USERNAME"); - public static string SMTP_PASSWORD => Environment.GetEnvironmentVariable("SMTP_PASSWORD"); - public static string SMTP_HOST => Environment.GetEnvironmentVariable("SMTP_HOST"); - public static string SMTP_PORT => Environment.GetEnvironmentVariable("SMTP_PORT"); - public static string SMTP_REPLYTO_EMAIL => Environment.GetEnvironmentVariable("SMTP_REPLYTO_EMAIL"); - public static string NOTESNOOK_SENDER_EMAIL => Environment.GetEnvironmentVariable("NOTESNOOK_SENDER_EMAIL") ?? Environment.GetEnvironmentVariable("SMTP_USERNAME"); - - public static string NOTESNOOK_APP_HOST => Environment.GetEnvironmentVariable("NOTESNOOK_APP_HOST"); - public static string NOTESNOOK_API_SECRET => Environment.GetEnvironmentVariable("NOTESNOOK_API_SECRET"); - - // MessageBird is used for SMS sending - public static string TWILIO_ACCOUNT_SID => Environment.GetEnvironmentVariable("TWILIO_ACCOUNT_SID"); - public static string TWILIO_AUTH_TOKEN => Environment.GetEnvironmentVariable("TWILIO_AUTH_TOKEN"); - public static string TWILIO_SERVICE_SID => Environment.GetEnvironmentVariable("TWILIO_SERVICE_SID"); - // Server discovery - public static int NOTESNOOK_SERVER_PORT => int.Parse(Environment.GetEnvironmentVariable("NOTESNOOK_SERVER_PORT") ?? "80"); - public static string NOTESNOOK_SERVER_HOST => Environment.GetEnvironmentVariable("NOTESNOOK_SERVER_HOST"); - public static string NOTESNOOK_CERT_PATH => Environment.GetEnvironmentVariable("NOTESNOOK_CERT_PATH"); - public static string NOTESNOOK_CERT_KEY_PATH => Environment.GetEnvironmentVariable("NOTESNOOK_CERT_KEY_PATH"); - - public static int IDENTITY_SERVER_PORT => int.Parse(Environment.GetEnvironmentVariable("IDENTITY_SERVER_PORT") ?? "80"); - public static string IDENTITY_SERVER_HOST => Environment.GetEnvironmentVariable("IDENTITY_SERVER_HOST"); - public static string IDENTITY_SERVER_DOMAIN => Environment.GetEnvironmentVariable("IDENTITY_SERVER_DOMAIN"); - public static string IDENTITY_CERT_PATH => Environment.GetEnvironmentVariable("IDENTITY_CERT_PATH"); - public static string IDENTITY_CERT_KEY_PATH => Environment.GetEnvironmentVariable("IDENTITY_CERT_KEY_PATH"); - - public static int SSE_SERVER_PORT => int.Parse(Environment.GetEnvironmentVariable("SSE_SERVER_PORT") ?? "80"); - public static string SSE_SERVER_HOST => Environment.GetEnvironmentVariable("SSE_SERVER_HOST"); - public static string SSE_CERT_PATH => Environment.GetEnvironmentVariable("SSE_CERT_PATH"); - public static string SSE_CERT_KEY_PATH => Environment.GetEnvironmentVariable("SSE_CERT_KEY_PATH"); - - // internal - public static string MONGODB_CONNECTION_STRING => Environment.GetEnvironmentVariable("MONGODB_CONNECTION_STRING"); - public static string MONGODB_DATABASE_NAME => Environment.GetEnvironmentVariable("MONGODB_DATABASE_NAME"); - public static int SUBSCRIPTIONS_SERVER_PORT => int.Parse(Environment.GetEnvironmentVariable("SUBSCRIPTIONS_SERVER_PORT") ?? "80"); - public static string SUBSCRIPTIONS_SERVER_HOST => Environment.GetEnvironmentVariable("SUBSCRIPTIONS_SERVER_HOST"); - public static string SUBSCRIPTIONS_CERT_PATH => Environment.GetEnvironmentVariable("SUBSCRIPTIONS_CERT_PATH"); - public static string SUBSCRIPTIONS_CERT_KEY_PATH => Environment.GetEnvironmentVariable("SUBSCRIPTIONS_CERT_KEY_PATH"); - public static string[] NOTESNOOK_CORS_ORIGINS => Environment.GetEnvironmentVariable("NOTESNOOK_CORS")?.Split(",") ?? new string[] { }; - } +/* +This file is part of the Notesnook Sync Server project (https://notesnook.com/) + +Copyright (C) 2023 Streetwriters (Private) Limited + +This program is free software: you can redistribute it and/or modify +it under the terms of the Affero GNU General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +Affero GNU General Public License for more details. + +You should have received a copy of the Affero GNU General Public License +along with this program. If not, see . +*/ + +using System; + +namespace Streetwriters.Common +{ + public class Constants + { + public static int COMPATIBILITY_VERSION = 1; + public static bool IS_SELF_HOSTED => Environment.GetEnvironmentVariable("SELF_HOSTED") == "1"; + public static bool DISABLE_ACCOUNT_CREATION => Environment.GetEnvironmentVariable("DISABLE_ACCOUNT_CREATION") == "1"; + public static string INSTANCE_NAME => Environment.GetEnvironmentVariable("INSTANCE_NAME") ?? "default"; + + // S3 related + public static string S3_ACCESS_KEY => Environment.GetEnvironmentVariable("S3_ACCESS_KEY"); + public static string S3_ACCESS_KEY_ID => Environment.GetEnvironmentVariable("S3_ACCESS_KEY_ID"); + public static string S3_SERVICE_URL => Environment.GetEnvironmentVariable("S3_SERVICE_URL"); + public static string S3_REGION => Environment.GetEnvironmentVariable("S3_REGION"); + public static string S3_BUCKET_NAME => Environment.GetEnvironmentVariable("S3_BUCKET_NAME"); + public static string S3_INTERNAL_BUCKET_NAME => Environment.GetEnvironmentVariable("S3_INTERNAL_BUCKET_NAME"); + public static string S3_INTERNAL_SERVICE_URL => Environment.GetEnvironmentVariable("S3_INTERNAL_SERVICE_URL"); + + // SMTP settings + public static string SMTP_USERNAME => Environment.GetEnvironmentVariable("SMTP_USERNAME"); + public static string SMTP_PASSWORD => Environment.GetEnvironmentVariable("SMTP_PASSWORD"); + public static string SMTP_HOST => Environment.GetEnvironmentVariable("SMTP_HOST"); + public static string SMTP_PORT => Environment.GetEnvironmentVariable("SMTP_PORT"); + public static string SMTP_REPLYTO_EMAIL => Environment.GetEnvironmentVariable("SMTP_REPLYTO_EMAIL"); + public static string NOTESNOOK_SENDER_EMAIL => Environment.GetEnvironmentVariable("NOTESNOOK_SENDER_EMAIL") ?? Environment.GetEnvironmentVariable("SMTP_USERNAME"); + + public static string NOTESNOOK_APP_HOST => Environment.GetEnvironmentVariable("NOTESNOOK_APP_HOST"); + public static string NOTESNOOK_API_SECRET => Environment.GetEnvironmentVariable("NOTESNOOK_API_SECRET"); + + // MessageBird is used for SMS sending + public static string TWILIO_ACCOUNT_SID => Environment.GetEnvironmentVariable("TWILIO_ACCOUNT_SID"); + public static string TWILIO_AUTH_TOKEN => Environment.GetEnvironmentVariable("TWILIO_AUTH_TOKEN"); + public static string TWILIO_SERVICE_SID => Environment.GetEnvironmentVariable("TWILIO_SERVICE_SID"); + // Server discovery + public static int NOTESNOOK_SERVER_PORT => int.Parse(Environment.GetEnvironmentVariable("NOTESNOOK_SERVER_PORT") ?? "80"); + public static string NOTESNOOK_SERVER_HOST => Environment.GetEnvironmentVariable("NOTESNOOK_SERVER_HOST"); + public static string NOTESNOOK_CERT_PATH => Environment.GetEnvironmentVariable("NOTESNOOK_CERT_PATH"); + public static string NOTESNOOK_CERT_KEY_PATH => Environment.GetEnvironmentVariable("NOTESNOOK_CERT_KEY_PATH"); + + public static int IDENTITY_SERVER_PORT => int.Parse(Environment.GetEnvironmentVariable("IDENTITY_SERVER_PORT") ?? "80"); + public static string IDENTITY_SERVER_HOST => Environment.GetEnvironmentVariable("IDENTITY_SERVER_HOST"); + public static Uri IDENTITY_SERVER_URL => new(Environment.GetEnvironmentVariable("IDENTITY_SERVER_URL")); + public static string IDENTITY_CERT_PATH => Environment.GetEnvironmentVariable("IDENTITY_CERT_PATH"); + public static string IDENTITY_CERT_KEY_PATH => Environment.GetEnvironmentVariable("IDENTITY_CERT_KEY_PATH"); + + public static int SSE_SERVER_PORT => int.Parse(Environment.GetEnvironmentVariable("SSE_SERVER_PORT") ?? "80"); + public static string SSE_SERVER_HOST => Environment.GetEnvironmentVariable("SSE_SERVER_HOST"); + public static string SSE_CERT_PATH => Environment.GetEnvironmentVariable("SSE_CERT_PATH"); + public static string SSE_CERT_KEY_PATH => Environment.GetEnvironmentVariable("SSE_CERT_KEY_PATH"); + + // internal + public static string MONGODB_CONNECTION_STRING => Environment.GetEnvironmentVariable("MONGODB_CONNECTION_STRING"); + public static string MONGODB_DATABASE_NAME => Environment.GetEnvironmentVariable("MONGODB_DATABASE_NAME"); + public static int SUBSCRIPTIONS_SERVER_PORT => int.Parse(Environment.GetEnvironmentVariable("SUBSCRIPTIONS_SERVER_PORT") ?? "80"); + public static string SUBSCRIPTIONS_SERVER_HOST => Environment.GetEnvironmentVariable("SUBSCRIPTIONS_SERVER_HOST"); + public static string SUBSCRIPTIONS_CERT_PATH => Environment.GetEnvironmentVariable("SUBSCRIPTIONS_CERT_PATH"); + public static string SUBSCRIPTIONS_CERT_KEY_PATH => Environment.GetEnvironmentVariable("SUBSCRIPTIONS_CERT_KEY_PATH"); + public static string[] NOTESNOOK_CORS_ORIGINS => Environment.GetEnvironmentVariable("NOTESNOOK_CORS")?.Split(",") ?? new string[] { }; + } } \ No newline at end of file diff --git a/Streetwriters.Common/Servers.cs b/Streetwriters.Common/Servers.cs index d81b16b..afd320c 100644 --- a/Streetwriters.Common/Servers.cs +++ b/Streetwriters.Common/Servers.cs @@ -1,122 +1,122 @@ -/* -This file is part of the Notesnook Sync Server project (https://notesnook.com/) - -Copyright (C) 2023 Streetwriters (Private) Limited - -This program is free software: you can redistribute it and/or modify -it under the terms of the Affero GNU General Public License as published by -the Free Software Foundation, either version 3 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -Affero GNU General Public License for more details. - -You should have received a copy of the Affero GNU General Public License -along with this program. If not, see . -*/ - -using System.Net.NetworkInformation; -using System.Net.Sockets; -using System.Security.Cryptography.X509Certificates; -#if !DEBUG -using System; -using System.Security.Cryptography.X509Certificates; -#endif - -namespace Streetwriters.Common -{ - public class Server - { - public Server(string originCertPath = null, string originCertKeyPath = null) - { - if (!string.IsNullOrEmpty(originCertPath) && !string.IsNullOrEmpty(originCertKeyPath)) - this.SSLCertificate = X509Certificate2.CreateFromPemFile(originCertPath, originCertKeyPath); - } - public string Id { get; set; } - public int Port { get; set; } - public string Hostname { get; set; } - public string Domain { get; set; } - public X509Certificate2 SSLCertificate { get; } - public bool IsSecure { get => this.SSLCertificate != null; } - - public override string ToString() - { - var url = ""; - url += "http"; - url += $"://{Hostname}"; - url += Port == 80 || Port == 443 ? "" : $":{Port}"; - return url; - } - - public string WS() - { - var url = ""; - url += IsSecure ? "ws" : "ws"; - url += $"://{Hostname}"; - url += Port == 80 ? "" : $":{Port}"; - return url; - } - } - - public class Servers - { -#if DEBUG - public static string GetLocalIPv4() - { - var interfaces = NetworkInterface.GetAllNetworkInterfaces(); - string output = ""; - foreach (NetworkInterface item in interfaces) - { - if ((item.NetworkInterfaceType == NetworkInterfaceType.Ethernet || item.NetworkInterfaceType == NetworkInterfaceType.Wireless80211) && item.OperationalStatus == OperationalStatus.Up) - { - foreach (UnicastIPAddressInformation ip in item.GetIPProperties().UnicastAddresses) - { - if (ip.Address.AddressFamily == AddressFamily.InterNetwork) - { - output = ip.Address.ToString(); - } - } - } - } - return output; - } - public readonly static string HOST = GetLocalIPv4(); - public static Server S3Server { get; } = new() - { - Port = 4568, - Hostname = HOST, - Domain = HOST - }; -#endif - public static Server NotesnookAPI { get; } = new(Constants.NOTESNOOK_CERT_PATH, Constants.NOTESNOOK_CERT_KEY_PATH) - { - Port = Constants.NOTESNOOK_SERVER_PORT, - Hostname = Constants.NOTESNOOK_SERVER_HOST, - Id = "notesnook-sync" - }; - - public static Server MessengerServer { get; } = new(Constants.SSE_CERT_PATH, Constants.SSE_CERT_KEY_PATH) - { - Port = Constants.SSE_SERVER_PORT, - Hostname = Constants.SSE_SERVER_HOST, - Id = "sse" - }; - - public static Server IdentityServer { get; } = new(Constants.IDENTITY_CERT_PATH, Constants.IDENTITY_CERT_KEY_PATH) - { - Domain = Constants.IDENTITY_SERVER_DOMAIN, - Port = Constants.IDENTITY_SERVER_PORT, - Hostname = Constants.IDENTITY_SERVER_HOST, - Id = "auth" - }; - - public static Server SubscriptionServer { get; } = new(Constants.SUBSCRIPTIONS_CERT_PATH, Constants.SUBSCRIPTIONS_CERT_KEY_PATH) - { - Port = Constants.SUBSCRIPTIONS_SERVER_PORT, - Hostname = Constants.SUBSCRIPTIONS_SERVER_HOST, - Id = "subscription" - }; - } -} +/* +This file is part of the Notesnook Sync Server project (https://notesnook.com/) + +Copyright (C) 2023 Streetwriters (Private) Limited + +This program is free software: you can redistribute it and/or modify +it under the terms of the Affero GNU General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +Affero GNU General Public License for more details. + +You should have received a copy of the Affero GNU General Public License +along with this program. If not, see . +*/ + +using System; +using System.Net.NetworkInformation; +using System.Net.Sockets; +using System.Security.Cryptography.X509Certificates; +#if !DEBUG +using System; +using System.Security.Cryptography.X509Certificates; +#endif + +namespace Streetwriters.Common +{ + public class Server + { + public Server(string originCertPath = null, string originCertKeyPath = null) + { + if (!string.IsNullOrEmpty(originCertPath) && !string.IsNullOrEmpty(originCertKeyPath)) + this.SSLCertificate = X509Certificate2.CreateFromPemFile(originCertPath, originCertKeyPath); + } + public string Id { get; set; } + public int Port { get; set; } + public string Hostname { get; set; } + public Uri PublicURL { get; set; } + public X509Certificate2 SSLCertificate { get; } + public bool IsSecure { get => this.SSLCertificate != null; } + + public override string ToString() + { + var url = ""; + url += "http"; + url += $"://{Hostname}"; + url += Port == 80 || Port == 443 ? "" : $":{Port}"; + return url; + } + + public string WS() + { + var url = ""; + url += IsSecure ? "ws" : "ws"; + url += $"://{Hostname}"; + url += Port == 80 ? "" : $":{Port}"; + return url; + } + } + + public class Servers + { +#if DEBUG + public static string GetLocalIPv4() + { + var interfaces = NetworkInterface.GetAllNetworkInterfaces(); + string output = ""; + foreach (NetworkInterface item in interfaces) + { + if ((item.NetworkInterfaceType == NetworkInterfaceType.Ethernet || item.NetworkInterfaceType == NetworkInterfaceType.Wireless80211) && item.OperationalStatus == OperationalStatus.Up) + { + foreach (UnicastIPAddressInformation ip in item.GetIPProperties().UnicastAddresses) + { + if (ip.Address.AddressFamily == AddressFamily.InterNetwork) + { + output = ip.Address.ToString(); + } + } + } + } + return output; + } + public readonly static string HOST = GetLocalIPv4(); + public static Server S3Server { get; } = new() + { + Port = 4568, + Hostname = HOST + }; +#endif + public static Server NotesnookAPI { get; } = new(Constants.NOTESNOOK_CERT_PATH, Constants.NOTESNOOK_CERT_KEY_PATH) + { + Port = Constants.NOTESNOOK_SERVER_PORT, + Hostname = Constants.NOTESNOOK_SERVER_HOST, + Id = "notesnook-sync" + }; + + public static Server MessengerServer { get; } = new(Constants.SSE_CERT_PATH, Constants.SSE_CERT_KEY_PATH) + { + Port = Constants.SSE_SERVER_PORT, + Hostname = Constants.SSE_SERVER_HOST, + Id = "sse" + }; + + public static Server IdentityServer { get; } = new(Constants.IDENTITY_CERT_PATH, Constants.IDENTITY_CERT_KEY_PATH) + { + PublicURL = Constants.IDENTITY_SERVER_URL, + Port = Constants.IDENTITY_SERVER_PORT, + Hostname = Constants.IDENTITY_SERVER_HOST, + Id = "auth" + }; + + public static Server SubscriptionServer { get; } = new(Constants.SUBSCRIPTIONS_CERT_PATH, Constants.SUBSCRIPTIONS_CERT_KEY_PATH) + { + Port = Constants.SUBSCRIPTIONS_SERVER_PORT, + Hostname = Constants.SUBSCRIPTIONS_SERVER_HOST, + Id = "subscription" + }; + } +}