示例#1
0
        public void SecureStringToProtectedData()
        {
            AdapterRegistry.RegisterAdapter(
                BackblazeB2Adapter.TargetTypeId,
                typeof(BackblazeB2Adapter),
                typeof(BackblazeB2AdapterConfiguration));

            BackblazeB2AdapterConfiguration config = new BackblazeB2AdapterConfiguration();

            config.AccountId      = "1234";
            config.ApplicationKey = new SecureString();
            config.ApplicationKey.AppendChar('a');
            config.ApplicationKey.AppendChar('b');
            config.ApplicationKey.AppendChar('c');
            config.ApplicationKey.AppendChar('1');
            config.ApplicationKey.AppendChar('2');
            config.ApplicationKey.AppendChar('3');

            string s1 = JsonConvert.SerializeObject(config);

            BackblazeB2AdapterConfiguration config2 =
                JsonConvert.DeserializeObject <BackblazeB2AdapterConfiguration>(s1);

            Assert.IsNotNull(config2);
            Assert.IsNotNull(config2.ApplicationKey);
            Assert.AreEqual(6, config2.ApplicationKey.Length);
            Assert.AreEqual("abc123", config2.ApplicationKey.GetDecrytped());
        }
示例#2
0
文件: Program.cs 项目: yvanam/SyncPro
        private static void SetToken(Dictionary <string, string> args)
        {
            Global.Initialize(false);

            AdapterBase adapter = GetAdapter(args);
            string      file;

            if (!args.TryGetValue("file", out file))
            {
                throw new Exception("/file is required");
            }

            if (adapter.Configuration.AdapterTypeId == OneDriveAdapter.TargetTypeId)
            {
                string        tokenContent = File.ReadAllText(file);
                TokenResponse token        = JsonConvert.DeserializeObject <TokenResponse>(tokenContent);

                // Encrypt the token if not already encrypted
                token.Protect();

                ((OneDriveAdapterConfiguration)adapter.Configuration).CurrentToken = token;

                adapter.SaveConfiguration();
            }
            else
            {
                AdapterRegistration registration =
                    AdapterRegistry.GetRegistrationByTypeId(adapter.Configuration.AdapterTypeId);

                throw new Exception(
                          string.Format("Cannot set token from adapter with type {0} ({1})",
                                        registration.AdapterType.Name, adapter.Configuration.AdapterTypeId));
            }
        }
示例#3
0
        public static void ClassInitialize(TestContext testContext)
        {
            if (!GlobalTestSettings.RunNetworkTests)
            {
                return;
            }

            AdapterRegistry.RegisterAdapter(
                AzureStorageAdapter.TargetTypeId,
                typeof(AzureStorageAdapter),
                typeof(AzureStorageAdapterConfiguration));


            string accountInfoFilePath = Path.Combine(
                Environment.GetFolderPath(Environment.SpecialFolder.DesktopDirectory),
                "SyncProTesting",
                "AzureStorageAccountInfo.json");

            if (File.Exists(accountInfoFilePath))
            {
                string fileContent = File.ReadAllText(accountInfoFilePath);
                accountInfo = JsonConvert.DeserializeObject <AzureStorageAdapterConfiguration>(fileContent);

                return;
            }

            CredentialResult credentials;

            try
            {
                credentials = CredentialHelper.PromptForCredentials(
                    "Enter your storage account name (username) and account key (password)");
            }
            catch (Win32Exception win32Exception)
                when(win32Exception.NativeErrorCode ==
                     (int)NativeMethods.CredUI.CredUIReturnCodes.ERROR_CANCELLED)
                {
                    Assert.Inconclusive("Azure storage credentials are required to run tests");

                    // ReSharper disable once HeuristicUnreachableCode
                    return;
                }

            accountInfo = new AzureStorageAdapterConfiguration
            {
                AccountName   = credentials.Username,
                AccountKey    = credentials.Password,
                ContainerName = DefaultContainerName
            };

            string serializedInfo = JsonConvert.SerializeObject(accountInfo, Formatting.Indented);

            File.WriteAllText(accountInfoFilePath, serializedInfo);
        }
示例#4
0
文件: Program.cs 项目: yvanam/SyncPro
        private static void DumpConfig()
        {
            Global.Initialize(false);

            string localAppDataPath = Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData);
            string appDataRoot      = Path.Combine(localAppDataPath, "SyncPro");

            DirectoryInfo appDataRootDir = new DirectoryInfo(appDataRoot);

            foreach (DirectoryInfo relationshipDir in appDataRootDir.GetDirectories())
            {
                Guid guid;
                if (!Guid.TryParse(relationshipDir.Name, out guid))
                {
                    WriteWarning("Failed to parse relationship directory '{0}' as a GUID", relationshipDir.Name);
                    continue;
                }

                SyncRelationship relationship = SyncRelationship.Load(guid);
                //relationship.BeginInitialize();

                // TODO: Do we really need to initialize the relationship in order to dump the configuration?
                //relationship.InitializeAsync().Wait();

                Console.WriteLine("---------------------------- [Relationship] ----------------------------");
                Console.WriteLine("RelationshipId: " + relationship.Configuration.RelationshipId);
                Console.WriteLine("Name: " + relationship.Configuration.Name);
                Console.WriteLine("Description: " + relationship.Configuration.Description);
                Console.WriteLine("Scope: " + relationship.Configuration.Scope);
                Console.WriteLine("SyncAttributes: " + relationship.Configuration.SyncAttributes);
                Console.WriteLine("TriggerType: " + relationship.Configuration.TriggerConfiguration.TriggerType);
                Console.WriteLine("SourceAdapter: " + relationship.Configuration.SourceAdapterId);
                Console.WriteLine("DestinationAdapter: " + relationship.Configuration.DestinationAdapterId);
                Console.WriteLine();
                Console.WriteLine("---------- [Adapters] ---------- ");

                foreach (AdapterBase adapter in relationship.Adapters)
                {
                    Console.WriteLine("Id: " + adapter.Configuration.Id);
                    Console.WriteLine("AdapterTypeId: " + adapter.Configuration.AdapterTypeId);
                    Console.WriteLine("AdapterTypeName: " +
                                      AdapterRegistry.GetRegistrationByTypeId(adapter.Configuration.AdapterTypeId).AdapterType.Name);
                    Console.WriteLine("IsOriginator: " + adapter.Configuration.IsOriginator);
                    Console.WriteLine("Flags: " +
                                      string.Join(",", StringExtensions.GetSetFlagNames <Data.AdapterFlags>(adapter.Configuration.Flags)));
                    Console.WriteLine();
                }

                Console.WriteLine();
            }
        }
示例#5
0
        public static SyncRelationship Load(Guid relationshipId)
        {
            string relationshipDir           = Path.Combine(Global.AppDataRoot, relationshipId.ToString("N"));
            RelationshipConfiguration config = RelationshipConfiguration.Load(relationshipDir);

            Logger.RelationshipLoaded(
                config.RelationshipId,
                new Dictionary <string, object>()
            {
                { "Name", config.Name },
                { "RelationshipId", config.RelationshipId },
                { "InitiallyCreatedUtc", config.InitiallyCreatedUtc },
                { "Scope", config.Scope }
            });

            SyncRelationship relationship = new SyncRelationship(config);

            // Get the adapters from the configuration for this relationship
            foreach (AdapterConfiguration adapterConfig in config.Adapters)
            {
                // Get the adapter registration information for this type of adapter
                AdapterRegistration registration =
                    AdapterRegistry.GetRegistrationByTypeId(adapterConfig.AdapterTypeId);

                if (registration == null)
                {
                    throw new Exception("No adapter registration found with TypeId " + adapterConfig.AdapterTypeId);
                }

                // Create the adapter object based on its config from the database
                AdapterBase adapter = (AdapterBase)Activator.CreateInstance(
                    registration.AdapterType,
                    relationship,
                    adapterConfig);

                relationship.Adapters.Add(adapter);

                // Load adapter-specific configuration settings
                adapter.LoadConfiguration();
            }

            return(relationship);
        }
示例#6
0
文件: Program.cs 项目: yvanam/SyncPro
        private static void ExtractToken(Dictionary <string, string> args)
        {
            Global.Initialize(false);

            AdapterBase adapter = GetAdapter(args);

            bool   formatToken = args.ContainsKey("formatToken");
            string file;

            args.TryGetValue("file", out file);

            if (adapter.Configuration.AdapterTypeId == OneDriveAdapter.TargetTypeId)
            {
                TokenResponse token = ((OneDriveAdapterConfiguration)adapter.Configuration).CurrentToken;

                if (args.ContainsKey("decrypt"))
                {
                    token.Unprotect();
                }

                string formattedToken = JsonConvert.SerializeObject(token, formatToken ? Formatting.Indented : Formatting.None);

                if (string.IsNullOrEmpty(file))
                {
                    Console.WriteLine(formattedToken);
                }
                else
                {
                    File.WriteAllText(file, formattedToken);
                }
            }
            else
            {
                AdapterRegistration registration =
                    AdapterRegistry.GetRegistrationByTypeId(adapter.Configuration.AdapterTypeId);

                throw new Exception(
                          string.Format("Cannot extract token from adapter with type {0} ({1})",
                                        registration.AdapterType.Name, adapter.Configuration.AdapterTypeId));
            }
        }
示例#7
0
        public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
        {
            JObject jObject = JObject.Load(reader);
            Guid    typeId  = Guid.Parse(jObject["AdapterTypeId"].Value <string>());

            //if (typeId == OneDriveAdapter.TargetTypeId)
            //{
            //    return JsonConvert.DeserializeObject<OneDriveAdapterConfiguration>(
            //        jObject.ToString(),
            //        SerializerSettings);
            //}

            //if (typeId == WindowsFileSystemAdapter.TargetTypeId)
            //{
            //    return JsonConvert.DeserializeObject<WindowsFileSystemAdapterConfiguration>(
            //        jObject.ToString(),
            //        SerializerSettings);
            //}

            //if (typeId == BackblazeB2Adapter.TargetTypeId)
            //{
            //    return JsonConvert.DeserializeObject<BackblazeB2AdapterConfiguration>(
            //        jObject.ToString(),
            //        SerializerSettings);
            //}

            AdapterRegistration registration = AdapterRegistry.GetRegistrationByTypeId(typeId);

            if (registration == null)
            {
                throw new Exception("No adapter registration found with TypeId " + typeId);
            }

            return(JsonConvert.DeserializeObject(
                       jObject.ToString(),
                       registration.AdapterConfigurationType,
                       SerializerSettings));

            //throw new NotImplementedException("Cannot read adapter configuration for type ID " + typeId);
        }