예제 #1
0
        public SynologyConnection(ISynologyConnectionSettings settings)
        {
            Settings = settings;

            var factory = new LoggerFactory();

            Logger = factory.CreateLogger <SynologyConnection>();

            Logger.LogDebug($"Creating new connection to {Settings.BaseHost} with{(Settings.SslEnabled ? "" : "out")} SSL to port {Settings.Port}");

            _client = new HttpClient
            {
                BaseAddress = new Uri(Settings.WebApiUrl),
            };

            _client.DefaultRequestHeaders.ExpectContinue = false;

            var builder = new ContainerBuilder();

            builder.RegisterInstance(this).As <SynologyConnection>();

            _container = builder.Build();

            _containerScope = _container.BeginLifetimeScope();
        }
        // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
        public void Configure(
            IApplicationBuilder app,
            IHostingEnvironment env,
            ISynologyConnection connection,
            ISynologyConnectionSettings synologyConnectionSettings)
        {
            if (env.IsDevelopment())
            {
                app.UseBrowserLink();
                app.UseDeveloperExceptionPage();
            }
            else
            {
                app.UseExceptionHandler("/Home/Error");
            }

            app.UseStaticFiles();

            connection.Api().Auth().Login(new LoginParameters
            {
                Username = synologyConnectionSettings.Username,
                Password = synologyConnectionSettings.Password
            });

            app.UseMvc(routes =>
            {
                routes.MapRoute(
                    name: "default",
                    template: "{controller=Home}/{action=Index}/{id?}");
            });
        }
예제 #3
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="settings"></param>
        /// <param name="loggerFactory"></param>
        /// <param name="serviceProvider"></param>
        /// <param name="httpClient"></param>
        public SynologyConnection(ISynologyConnectionSettings settings, ILoggerFactory loggerFactory, IServiceProvider serviceProvider, SynologyHttpClient httpClient)
        {
            Settings        = settings;
            ServiceProvider = serviceProvider;
            Logger          = loggerFactory.CreateLogger <SynologyConnection>();

            Logger.LogDebug($"Creating new connection to {Settings.BaseHost} with{(Settings.Ssl ? "" : "out")} SSL to port {Settings.Port}");

            httpClient.BaseAddress = new Uri(Settings.WebApiUrl);
            Client = httpClient;
        }
예제 #4
0
        /// <summary>
        /// Initializes a new instance of the <see cref="T:Synology.SynologyConnection"/> class.
        /// </summary>
        /// <param name="settings">Settings.</param>
        /// <param name="sidContainer">Sid container.</param>
        /// <param name="loggerFactory">Logger factory.</param>
        /// <param name="serviceProvider">Service provider.</param>
        /// <param name="client">Client.</param>
        /// <param name="clientHandler">Client.</param>
        public SynologyConnection(ISynologyConnectionSettings settings, SidContainer sidContainer, ILoggerFactory loggerFactory, IServiceProvider serviceProvider, HttpClient client, HttpClientHandler clientHandler)
        {
            Settings        = settings;
            SidContainer    = sidContainer;
            ServiceProvider = serviceProvider;
            Logger          = loggerFactory.CreateLogger <SynologyConnection>();

            Logger.LogDebug($"Creating new connection to {Settings.BaseHost} with{(Settings.Ssl ? "" : "out")} SSL to port {Settings.Port}");

            ClientHandler = clientHandler;
            Client        = client;

            Client.BaseAddress = new Uri(Settings.WebApiUrl);
            Client.DefaultRequestHeaders.ExpectContinue = false;
        }
예제 #5
0
        public async Task <bool> ConnectUser(string url, string username, string password)
        {
            try
            {
                Regex r = new Regex(@"^(?<proto>\w+)://[^/]+?(?<port>:\d+)?/", RegexOptions.None, TimeSpan.FromMilliseconds(150));
                Match m = r.Match(url);
                if (m.Success)
                {
                    Console.WriteLine(m.Result("${proto}${port}"));
                    int port = 80;
                    if (string.IsNullOrEmpty(m.Groups["port"].Value))
                    {
                        port = (m.Groups["proto"].Value == "https") ? 443 : 80;
                    }
                    else
                    {
                        port = int.Parse(m.Groups["port"].Value.Replace(":", ""));
                    }

                    Uri uri = new Uri(url);

                    settingsSave = _scope.ServiceProvider.GetService <ISynologyConnectionSettings>();

                    settingsSave.BaseHost    = uri.Host;
                    settingsSave.Ssl         = (m.Groups["proto"].Value == "https");
                    settingsSave.Port        = port;
                    settingsSave.SslPort     = port;
                    settingsSave.Username    = username;
                    settingsSave.Password    = password;
                    settingsSave.SessionName = "SynoConnect";

                    ISynologyConnection      syno     = _scope.ServiceProvider.GetService <ISynologyConnection>();
                    ResultData <IAuthResult> resLogin = await syno.Api().Auth().LoginAsync();

                    if (resLogin.Error == null || (resLogin.Error != null && resLogin.Error.Code == 403))
                    {
                        return(true);
                    }
                }
            }
            catch (Exception e)
            {
                Console.WriteLine(e.Message);
            }
            return(false);
        }
예제 #6
0
 public static SynologyConnection Create(ISynologyConnectionSettings settings)
 {
     return(new SynologyConnection(settings));
 }