Ejemplo n.º 1
0
        private static RSAAsymmetricKey GetKey(string keypath)
        {
            if (!File.Exists(keypath))
            {
                var           rsa        = new RSACrypto();
                RSAParameters parameters = rsa.ExportKey(true);

                using (var stream = File.OpenWrite(keypath)) {
                    var writer = new StreamValueWriter(stream);
                    RSAParametersSerializer.Serialize(writer, parameters);
                }
            }

            RSAAsymmetricKey key;

            using (var stream = File.OpenRead(keypath)) {
                var           reader     = new StreamValueReader(stream);
                RSAParameters parameters = RSAParametersSerializer.Deserialize(reader);
                key = new RSAAsymmetricKey(parameters);
            }

            return(key);
        }
Ejemplo n.º 2
0
        public static Task <RSAAsymmetricKey> GetCryptoKeyAsync(CancellationToken cancelToken = default(CancellationToken))
        {
            return(Task.Run(() => {
                RSAAsymmetricKey key = null;
                if (KeyFile.Exists)
                {
                    try {
                        using (var stream = File.OpenRead(KeyFile.FullName)) {
                            var reader = new StreamValueReader(stream);
                            RSAParameters parameters = RSAParametersSerializer.Deserialize(reader);
                            key = new RSAAsymmetricKey(parameters);
                        }
                    } catch (Exception ex) {
                        Trace.TraceWarning("Failed to read key: {0}", ex);
                        KeyFile.Delete();
                    }
                }

                cancelToken.ThrowIfCancellationRequested();

                if (!KeyFile.Exists)
                {
                    var rsa = new RSACrypto();
                    RSAParameters parameters = rsa.ExportKey(true);
                    key = new RSAAsymmetricKey(parameters);

                    cancelToken.ThrowIfCancellationRequested();

                    using (var stream = File.OpenWrite(KeyFile.FullName)) {
                        var writer = new StreamValueWriter(stream);
                        RSAParametersSerializer.Serialize(writer, parameters);
                    }
                }

                return key;
            }, cancelToken));
        }
Ejemplo n.º 3
0
        public static void Main()
        {
            Trace.Listeners.Add(new ConsoleTraceListener());

            log4net.Config.XmlConfigurator.Configure();

            var serverConfig = (BarrelConfiguration)ConfigurationManager.GetSection("barrel");

            if (serverConfig == null)
            {
                LogManager.GetLogger("Barrel").Fatal("Section 'barrel' not found in configuration.");
                return;
            }

            var log = LogManager.GetLogger(serverConfig.Name.Remove(" "));

            log.Info("Checking configuration");
            if (!serverConfig.CheckConfiguration(log))
            {
                log.Fatal("Errors found in configuration, shutting down.");
                return;
            }

            ServerProviders providers = serverConfig.GetProviders(log);

            if (providers == null)
            {
                log.Fatal("Errors loading server configuration, shutting down.");
                return;
            }

            log.Info("Setting up");

            GablarskiServer server = new GablarskiServer(new ServerSettings
            {
                Name           = serverConfig.Name,
                Description    = serverConfig.Description,
                ServerPassword = serverConfig.Password,
                ServerLogo     = serverConfig.LogoURL
            }, providers.Users, providers.Permissions, providers.Channels);

            if (serverConfig.Network)
            {
                var keyFile          = new FileInfo("server.key");
                RSAAsymmetricKey key = null;
                if (keyFile.Exists)
                {
                    try {
                        using (var stream = File.OpenRead(keyFile.FullName)) {
                            var           reader     = new StreamValueReader(stream);
                            RSAParameters parameters = RSAParametersSerializer.Deserialize(reader);
                            key = new RSAAsymmetricKey(parameters);
                        }
                    } catch (Exception ex) {
                        Trace.TraceWarning("Failed to read key: {0}", ex);
                        keyFile.Delete();
                    }
                }

                if (!keyFile.Exists)
                {
                    var           rsa        = new RSACrypto();
                    RSAParameters parameters = rsa.ExportKey(true);
                    key = new RSAAsymmetricKey(parameters);

                    using (var stream = File.OpenWrite(keyFile.FullName)) {
                        var writer = new StreamValueWriter(stream);
                        RSAParametersSerializer.Serialize(writer, parameters);
                    }
                }

                server.AddConnectionProvider(new UdpConnectionProvider(serverConfig.Port, GablarskiProtocol.Instance, key), ExecutionMode.GlobalOrder);
            }

            foreach (IConnectionProvider provider in providers.ConnectionProviders)
            {
                server.AddConnectionProvider(provider, ExecutionMode.GlobalOrder);
            }

            server.Start();

            log.Info("Server started");

            while (true)
            {
                Console.ReadKey();
            }
        }