From 56ccb5b2abee755c4a53d045a2ce20940eb9a41b Mon Sep 17 00:00:00 2001 From: Audrius Butkevicius Date: Sat, 27 Dec 2014 23:12:12 +0000 Subject: [PATCH] New device, folder prompts (fixes #120, fixes #330) --- cmd/syncthing/main.go | 15 ++-- gui/assets/lang/lang-en.json | 13 ++- gui/index.html | 63 ++++++++++++++ .../core/controllers/syncthingController.js | 87 +++++++++++++++++-- internal/auto/gui.files.go | 6 +- internal/config/config.go | 18 ++-- internal/config/wrapper.go | 13 +++ internal/model/model.go | 2 +- 8 files changed, 194 insertions(+), 23 deletions(-) diff --git a/cmd/syncthing/main.go b/cmd/syncthing/main.go index b4b6a02bc..a4832f4df 100644 --- a/cmd/syncthing/main.go +++ b/cmd/syncthing/main.go @@ -975,11 +975,16 @@ next: } } - events.Default.Log(events.DeviceRejected, map[string]string{ - "device": remoteID.String(), - "address": conn.RemoteAddr().String(), - }) - l.Infof("Connection from %s with unknown device ID %s; ignoring", conn.RemoteAddr(), remoteID) + if !cfg.IgnoredDevice(remoteID) { + events.Default.Log(events.DeviceRejected, map[string]string{ + "device": remoteID.String(), + "address": conn.RemoteAddr().String(), + }) + l.Infof("Connection from %s with unknown device ID %s", conn.RemoteAddr(), remoteID) + } else { + l.Infof("Connection from %s with ignored device ID %s", conn.RemoteAddr(), remoteID) + } + conn.Close() } } diff --git a/gui/assets/lang/lang-en.json b/gui/assets/lang/lang-en.json index fd5dcd881..fb000a099 100644 --- a/gui/assets/lang/lang-en.json +++ b/gui/assets/lang/lang-en.json @@ -1,8 +1,10 @@ { "API Key": "API Key", "About": "About", + "Add": "Add", "Add Device": "Add Device", "Add Folder": "Add Folder", + "Add new folder?": "Add new folder?", "Address": "Address", "Addresses": "Addresses", "Allow Anonymous Usage Reporting?": "Allow Anonymous Usage Reporting?", @@ -22,6 +24,7 @@ "Device ID": "Device ID", "Device Identification": "Device Identification", "Device Name": "Device Name", + "Device {%device%} ({%address%}) wants to connect. Add new device?": "Device {{device}} ({{address}}) wants to connect. Add new device?", "Disconnected": "Disconnected", "Documentation": "Documentation", "Download Rate": "Download Rate", @@ -51,6 +54,7 @@ "Global Discovery Server": "Global Discovery Server", "Global State": "Global State", "Idle": "Idle", + "Ignore": "Ignore", "Ignore Patterns": "Ignore Patterns", "Ignore Permissions": "Ignore Permissions", "Incoming Rate Limit (KiB/s)": "Incoming Rate Limit (KiB/s)", @@ -59,12 +63,15 @@ "Keep Versions": "Keep Versions", "Last File Synced": "Last File Synced", "Last seen": "Last seen", + "Later": "Later", "Latest Release": "Latest Release", "Local Discovery": "Local Discovery", "Local State": "Local State", "Maximum Age": "Maximum Age", "Multi level wildcard (matches multiple directory levels)": "Multi level wildcard (matches multiple directory levels)", "Never": "Never", + "New Device": "New Device", + "New Folder": "New Folder", "No": "No", "No File Versioning": "No File Versioning", "Notice": "Notice", @@ -92,8 +99,11 @@ "Select the devices to share this folder with.": "Select the devices to share this folder with.", "Select the folders to share with this device.": "Select the folders to share with this device.", "Settings": "Settings", + "Share": "Share", + "Share Folder": "Share Folder", "Share Folders With Device": "Share Folders With Device", "Share With Devices": "Share With Devices", + "Share this folder?": "Share this folder?", "Shared With": "Shared With", "Short identifier for the folder. Must be the same on all cluster devices.": "Short identifier for the folder. Must be the same on all cluster devices.", "Show ID": "Show ID", @@ -149,5 +159,6 @@ "Yes": "Yes", "You must keep at least one version.": "You must keep at least one version.", "full documentation": "full documentation", - "items": "items" + "items": "items", + "{%device%} wants to share folder \"{%folder%}\".": "{{device}} wants to share folder \"{{folder}}\"." } diff --git a/gui/index.html b/gui/index.html index b1fb42516..bd0b1c626 100644 --- a/gui/index.html +++ b/gui/index.html @@ -308,6 +308,69 @@ + + +
+
+
+

New Device

+
+

+ {{ event.time | date:"H:mm:ss" }}: + + Device {%device%} ({%address%}) wants to connect. Add new device? + +

+
+ +
+
+
+ + + +
+
+
+
+

+ New Folder + Share Folder +

+
+
+

+ {{ event.time | date:"H:mm:ss" }}: + + {%device%} wants to share folder "{%folder%}". + + Share this folder? + Add new folder? +

+
+ +
+
+
+
diff --git a/gui/scripts/syncthing/core/controllers/syncthingController.js b/gui/scripts/syncthing/core/controllers/syncthingController.js index 387030d38..0d1acde13 100644 --- a/gui/scripts/syncthing/core/controllers/syncthingController.js +++ b/gui/scripts/syncthing/core/controllers/syncthingController.js @@ -47,6 +47,8 @@ angular.module('syncthing.core') $scope.model = {}; $scope.myID = ''; $scope.devices = []; + $scope.deviceRejections = {}; + $scope.folderRejections = {}; $scope.protocolChanged = false; $scope.reportData = {}; $scope.reportPreview = false; @@ -168,6 +170,14 @@ angular.module('syncthing.core') } }); + $scope.$on('DeviceRejected', function (event, arg) { + $scope.deviceRejections[arg.data.device] = arg; + }); + + $scope.$on('FolderRejected', function (event, arg) { + $scope.folderRejections[arg.data.folder + "-" + arg.data.device] = arg; + }); + $scope.$on('ConfigSaved', function (event, arg) { updateLocalConfig(arg.data); @@ -698,6 +708,11 @@ angular.module('syncthing.core') return n.DeviceID !== $scope.currentDevice.DeviceID; }); $scope.config.Devices = $scope.devices; + // In case we later added the device manually, remove the ignoral + // record. + $scope.config.IgnoredDevices = $scope.config.IgnoredDevices.filter(function (id) { + return id !== $scope.currentDevice.DeviceID; + }); for (var id in $scope.folders) { $scope.folders[id].Devices = $scope.folders[id].Devices.filter(function (n) { @@ -709,10 +724,24 @@ angular.module('syncthing.core') }; $scope.saveDevice = function () { - var deviceCfg, done, i; - $('#editDevice').modal('hide'); - deviceCfg = $scope.currentDevice; + $scope.saveDeviceConfig($scope.currentDevice); + }; + + $scope.addNewDeviceID = function (device) { + var deviceCfg = { + DeviceID: device, + AddressesStr: 'dynamic', + Compression: true, + Introducer: false, + selectedFolders: {} + }; + $scope.saveDeviceConfig(deviceCfg); + $scope.dismissDeviceRejection(device); + }; + + $scope.saveDeviceConfig = function (deviceCfg) { + var done, i; deviceCfg.Addresses = deviceCfg.AddressesStr.split(',').map(function (x) { return x.trim(); }); @@ -732,6 +761,11 @@ angular.module('syncthing.core') $scope.devices.sort(deviceCompare); $scope.config.Devices = $scope.devices; + // In case we are adding the device manually, remove the ignoral + // record. + $scope.config.IgnoredDevices = $scope.config.IgnoredDevices.filter(function (id) { + return id !== deviceCfg.DeviceID; + }); if (!$scope.editingSelf) { for (var id in deviceCfg.selectedFolders) { @@ -749,7 +783,6 @@ angular.module('syncthing.core') DeviceID: deviceCfg.DeviceID }); } - continue } else { $scope.folders[id].Devices = $scope.folders[id].Devices.filter(function (n) { return n.DeviceID != deviceCfg.DeviceID; @@ -761,6 +794,16 @@ angular.module('syncthing.core') $scope.saveConfig(); }; + $scope.dismissDeviceRejection = function (device) { + delete $scope.deviceRejections[device]; + }; + + $scope.ignoreRejectedDevice = function (device) { + $scope.config.IgnoredDevices.push(device); + $scope.saveConfig(); + $scope.dismissDeviceRejection(device); + }; + $scope.otherDevices = function () { return $scope.devices.filter(function (n) { return n.DeviceID !== $scope.myID; @@ -817,8 +860,8 @@ angular.module('syncthing.core') }); }); - $scope.editFolder = function (deviceCfg) { - $scope.currentFolder = angular.copy(deviceCfg); + $scope.editFolder = function (folderCfg) { + $scope.currentFolder = angular.copy(folderCfg); $scope.currentFolder.selectedDevices = {}; $scope.currentFolder.Devices.forEach(function (n) { $scope.currentFolder.selectedDevices[n.DeviceID] = true; @@ -867,6 +910,34 @@ angular.module('syncthing.core') $('#editFolder').modal(); }; + $scope.addFolderAndShare = function (folder, device) { + $scope.dismissFolderRejection(folder, device); + $scope.currentFolder = { + ID: folder, + selectedDevices: {} + }; + $scope.currentFolder.selectedDevices[device] = true; + + $scope.currentFolder.RescanIntervalS = 60; + $scope.currentFolder.FileVersioningSelector = "none"; + $scope.currentFolder.simpleKeep = 5; + $scope.currentFolder.staggeredMaxAge = 365; + $scope.currentFolder.staggeredCleanInterval = 3600; + $scope.currentFolder.staggeredVersionsPath = ""; + $scope.editingExisting = false; + $scope.folderEditor.$setPristine(); + $('#editFolder').modal(); + }; + + $scope.shareFolderWithDevice = function (folder, device) { + $scope.folders[folder].Devices.push({ + DeviceID: device + }); + $scope.config.Folders = folderList($scope.folders); + $scope.saveConfig(); + $scope.dismissFolderRejection(folder, device); + }; + $scope.saveFolder = function () { var folderCfg, done, i; @@ -916,6 +987,10 @@ angular.module('syncthing.core') $scope.saveConfig(); }; + $scope.dismissFolderRejection = function (folder, device) { + delete $scope.folderRejections[folder + "-" + device]; + }; + $scope.sharesFolder = function (folderCfg) { var names = []; folderCfg.Devices.forEach(function (device) { diff --git a/internal/auto/gui.files.go b/internal/auto/gui.files.go index 7b5b2ad09..5e35a866d 100644 --- a/internal/auto/gui.files.go +++ b/internal/auto/gui.files.go @@ -67,7 +67,7 @@ func Assets() map[string][]byte { bs, _ = ioutil.ReadAll(gr) assets["assets/lang/lang-de.json"] = bs - bs, _ = base64.StdEncoding.DecodeString("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") + bs, _ = base64.StdEncoding.DecodeString("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") gr, _ = gzip.NewReader(bytes.NewBuffer(bs)) bs, _ = ioutil.ReadAll(gr) assets["assets/lang/lang-en.json"] = bs @@ -147,7 +147,7 @@ func Assets() map[string][]byte { bs, _ = ioutil.ReadAll(gr) assets["assets/lang/valid-langs.js"] = bs - bs, _ = base64.StdEncoding.DecodeString("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") + bs, _ = base64.StdEncoding.DecodeString("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") gr, _ = gzip.NewReader(bytes.NewBuffer(bs)) bs, _ = ioutil.ReadAll(gr) assets["index.html"] = bs @@ -167,7 +167,7 @@ func Assets() map[string][]byte { bs, _ = ioutil.ReadAll(gr) assets["scripts/syncthing/core/controllers/eventController.js"] = bs - bs, _ = base64.StdEncoding.DecodeString("H4sIAAAJbogA/9R9e3PbtrL4//0UiH75RVKs0EkfmVM7bseNk3N9+0gmbnr+cN07tAhJrClS5cOObuPvfncBvkAsQFB2eno4GUcSFovFYrG7WCxAP14WkZ966yQoIj4ZZ9t4nq/CeOnNk5SPp58xeOBznKdJFPF0Mj6rIF7WP45nbFHAr2ESs8nDbJ5s+Iw9XOX5Bv6LkrmPJTP2A3yK+BlPr8M5n7I/BW58xkXGWZan4TwfH35W/7y/zzZpeO3nfH/Fow1PWcAXYRwitqwBu/ZTgOPXJwDIjtjTQ6Uk9q/DJRAQL49v/C2UL/wo4ypMEkdhzOmylGe5n2L9prwGqHuNVDX8mGDnaiB8lK57fpEnAL0Il/L3yfRQBU/5AtpdnW2znK+xlCiUCMyFMRekneV+nhmgTjiSY4N4nUQBT2sIBUQMsLfk+aRIo0sfhnCPjfeveZpBs+OplxXzOc+ySSMagZ/77XGvMQmR8cqqwGcErL6qdN26UZHyTZLmuxAha4Is+SUdO7VfbJapH/BdCCirnsaLxECBx9M0SVsYnbHFRRT19Cfj+Wmcg6D60aRmiZCFGXv2FJ6WoNx+pk7W4jKc74s69Ewt8c2T9SbiuRzqP28P9XKUbFvZaYxaCCDytOAUTCn8GY1E8A/Lzi+0MlCEPKKrrbenJ1AyHmslgZhIBoybNMmTeRK9XIGy5YGuZijJI5qX5W9B04X8xohlIWasoeMZ5/Er7DzdDZuwKD0VCoFuYtFoDBoA2LEEcapKm+LJTRgHyc3Uu4T/J+NLvgALVMRR4geKgelKu6bhVaFQJLyk4WEST0a1ZZIDcyYn6sjWlKrGwWqV+rtGBRz20/lqMvUiwDm1UxFzHhw3cqq0NE7X4wM2PuHReNYtCMK0LANlEqbTLgTacATAOdIty5NivsLC9xtQLXzcEKgNFJJ3OrcQl/J1cs2N9NHFFXEw0uXQGgj0wfalYXalkEgN5Pj96RthwBUp4dc8zmfMT5fdQQwXbFJa/EeP2IPGwFNqNOV5kXZtkKoxkUVJxL0oWbZo6djTroOgltYOiCq6kgDd/2iXP5yM/1/M85skvRIzG0wOqDBQ3uNVGGhkIHSDsR82WxU5jpQZ0jS9kBOLxcBh6Uzljx/ZA8maexqakiAT9wn2IlU9ImIcgWmXtl6eodrkpZ1wZBv6qIG0GVDq6f4C9qBt286FcyXV9IXFc9CBvSyXLrb4MU8Gd09oy9M44B+k9rm3Pire6qRF83CvFvwYSRxruSnY8SJjYJCYH0WsMvf5ys/ZDSxdVn7K4VuIIIia3YT5yvuM4GppnlW+Sj88g+/pKx+sR8tXFCUvFwbdVPr6FZ0NeIny9GTGzNy4dZnG70CL5/xvMGjtbiKs7Kupf8b+SMachFnpJTr3B2YDB6nQfczzqnteGFwMWWf10PhyIIFCVfWQZ5nvpiqa9a/biy832QF7OiNLkyK3FZ/G321znv2c5H5kBHpT5A5Qx0GA/uRBLWaeD79ooLeH5p5XkuXW8f/JJT2wHOprxUEpVoEAcLyJkaYGWVkKeW82Ysy89++OwYHd5LjCODpiT6mhBuV2umBF5i85k8sJ9CtWfsYuYWXAYg5qC7SXXyGKE4y5zNE8BjrzARsovxs/zlmeMD+7AhXIATtggO9r/4ozn81XCfrK7LtCqMogice5qEOhg2qXxRLRrFlQpEicWEX6Ea5Li82MZYlQuDxH1ElyFXKha0lkQEwerjlLFuLzIkyznF2HWZh77F8r6K/Q3yUW0N0bECNOE+bHQYMPQNeJUPh+DAq/SNkK/mTMXyYzpK7kBIXnjwJcCVwnfKaVor4UJP6CFKKVTebFGujxJIW4/ov8OZ/sT749gH+/ffQeH/6aPZ42leDbr0fwZ3L+2+HF46n3+OH042/wd3/GRg+fjab6DBA6o0FAyQw+HVKAuFFT6WjE9hgG37w4uYEl0x4bHa79D09AyETRF0/ZY/b5l/Dni+dPn+o03DIObpdJyQCBey22vGi39IRVWOE/DE6Y6McH3bTC6JzVxOjk7Tahz/xrZ81dCMMqvKMyqlfpIbdok9QE+2JptUPEqRNTEfqv/dsOXsNJubp7Wy72B/gMWRk6oJ0GGexVIgjtYvTQJmImST8slL5bZnGfSv+DdD3wqVo7L701olW15TDidbvnFj+77jBgVIDPEcUFLZ8yJA06FuNIz4TgZ947+cM+fBSm0lwVRijkwes0Wb9Jw2UYt5C87BYNQvcKpvAN2A5OYmxKHZBuClgit7v3Vv7gWFWulNt18ZeeyqCa/wUKPd2iCUqTAtR9sanRoXXLI+5naHU2PJ2D/KIlEvYDlNJNUkQBmNAW1GUoTc0lrD6Niq3C/4I9w1BE2fE9kq17+tjtVZLw4oh9/bVN97X44qr2RLWO6EvBNPpF+EhRPCgpox02fLrSdqB1z6VuzZ4DimdmDFKiDkqO2+GAbwcVA82QbT8185pvPTVOkpjXFfALDU/oG5NZwofQgp3gKyUswheYNFVqWJNkOSrQCncrrAgDJZsBR7WsZ5Gpsp2foKK9FcJ4S99i5+YFJyuN3uFhn26v+v2gRqDVtFUd1PPquUy5f2UGoae5u8+Djx7Grz4eGmNvo64/MJppEmnwKkQYgV+CSp7DsMFfbeOgdixIeSQ8jCuOuwQjBRwdVVmDiP+p7Z9DfXLQCTB0p8pfe/brBGtJ704E4r6VxB2N4Scez+Gn9+9OMSQCOiPOq84Ocf464ynDfY2Po7texsFVGTkr+SgjM6aZSvx+KzcYZyIIboydGhg9Ubclq481G3QXW3q4lHzAevhltQX5IMxerTf59s3l73yeq0tvzTnvbF/KD4dmmHrt/kOY5TwuAxlnOW7POQB6vych+NozpkXuybr/jJJLPzqOY9y/4qm1nS6s0hTVVrMDqiIsQ5skfcFuYU89aqOHPe8neEOztSI7S9K8ohRo8VNu4E2zJSs//ehvOjEcOXWyTntS5jwQ72yiopoSPDMbMkc73YlQ3zE43Wq4J0BtJKjLfy1XQSjnerZaZOUhX4d5J9Rm3p0xm5YqIafTEq23MwG8y4K8TDQQC3H8bBwr2YRRW5dQfhwLdVnOZeGXVuj5h/y4LH7zPftWkTkdYOpFPF7mK3bAiECO8Dj9UC7ezokFbO2XZoISdImINiyRoAc6+LnEZfXCJFHepshWEwm+Y/THzNTXVb9lWzp6ymJKcRqRlvK2x6CZ5tbM4NEi+ySECA+3JG3HvVXdk2poQW+qbOxv61Y19uNbSarwrWqqx48+mcelbtR0rJhVkEVvTBUNgalm+AZj7LiDLYhDPX5dPSgXYGMxE9O8+MVnHudqumb3qdXFfL1prb+GswwZjjhQ8EfSARj11REUJnEext2MjO5jZiw+yIq9IwuPgTBDrK8mIxYoDKEbOwnGdj3JB8w5AQr3sRHLoFLaqzXdZ0xVPjPLWP1NFgSmRFkn097aKx1k30VCcoLJe80uBj1JcrQlE4R9Uic3T2GYBENo+xgQ49fKiwZcBoscBpUl7re94G29uYlhGb/hab6FqtYYhn0C0VKLQVgzRiTiPAwuPLH7DN360c9X3tr/MAE5mdSl7e1l4CCxxd2FQubmgSW8UuOWO9vGppVNa3PbCpi18Vs29/P5ik3ILCgjYyyKVe+KAXiAP6Qm3dL+KK1F6np3coRE6pXr/JUJwLu45nXqsPRExTe3jkoC7+jsyZR/Vx0FwIP6qAdJDCEcw0BCDXP/nEn+d+xjmnnejr068H20jwHmKlo3ujffcecINjVU2Ce3OJ3SpHFe37owVu5cdvOh3Dx5mtNi03Rf+hWjHeRFzWWnu1b7oOXCoHFDW7WNCw8Nsva+fvCz/AxzbsAw8xvhDkwcwO3DZKt54m8z4VJUrU0b22RtsXQ64L9/PP+SzN9wUg+tMXfQgTP2lThpQknPa+WEwR2lR86BXaRHPejQIz3aRlyrts3p0qHruBwO0OswsjoFDtW945yQwZ4adwifULLRam0X2VCPKWEMxigKjgfrHM7OVf5GizCdpKZjRabQJQuI0CkOer7d8GRBbcxg4FQEt0Htj4tYHLLCUKYxgoNQVzEm8FtjOdhq00IV8S1jfS9g6WlvQeQ/B/1NmHsEXuu1H8FC5AH2zNqhLE82m77WKmAM3lhaFQntDiP4MvKzv3oAMRFdjp2RFWG8SD7BwIqW5Zgam77x0xhPkHzaMQdKxDyzEBLgYYnUTkeVVsbFsbdBIlF1o6wO9cMg4nYBlZZEI8mMEh1ecRzHgnWThms/3Q7BOvfj+D7QGsSNmC3YkbcyPwpTjPUJM2y2DFF0z7quic4aqgVvKXY6xVLcnDdtbkOTs808r9PPyAZDsRaRDe7TIC2aurZH0CECD4soSdIJNGc3QdKfw3N8ynAY9+7UBPM6ZEFssfYsU3r2Zx89ctvIreOUR4Kr5q1GKaPJ1ZjwUG0ZxlXN0q5T1V0szTqMi8w+Oxo3u+MNuAyGhCk3ils1KmXeJ7swizAjz1lh/ycOfhiL0MGOAlBp4YECADaqfZqIFI6gfdzIQUZ0f+OTiogw+Cgd92bu/xOlh7bbop8u4kNbUskmC9NcxKff8MreY16Qm9TI5O04VvJ1bCOme0RYwaJvsNgrE5VcnItvneZF++aIv083W2TtsfH/d3Km7N0Fdyc4KXfrtY7qW/bYzzVuErQzsOr0qjDKefu6EFt/4poX6ENW7ZlX4xWbytYrVfPAvmasPToHTpWYz59eOAjIT/6a4ph9nVbDDHA3R6M+b7ORLiTKgkoFdOCILrdeVlxmeYobUc/t7iAeUj6hWUUe4K1kUKveDYto/BzCzEkZpSirTh2Z68bZYWzdgac8CPMznuNZyszKUdD1P8pTkXhZAB7IgPpbBaTi83pTpmLiSajyji4Epg9/0omKDRLv/btXsX8pM5QmVHF9dvQb9rQXmyJAhGQQHNeRHBd58l5eOGOlrQVXXUz0X1Yq//n+1M40AKCuuihHkDohSC11/WteZwnbJ9EcNQv777M3P3l4yVm8DBdbLZO4WynZ5PrFK/isuI/+3YHBHcEkxxzW309+hsko7lHZbKJQ3k6z/3uWxOM+/6TDGhE83yQZubs4w87NBLFUCJ0Mn9/r1l9rRIZt/4mu2sLM9JAPmudZkcKfZM3FfXlsLi/20OWjvhjqQSW1/I/CjzJ6ss/0yTQVV6VYK4PQz9RJQijwkhLDGuHlis+vEM54gJyXExmPjYeZ+Gzz80kF1Xj3tIJ6YVjEtAaKrigWAebzx+2svJ0I+2Znup4QqV23ejJPewjwCsEn5X1d98F/XRu794XU0EeugCC5zz4fuOZypoHcrrQytrqtjd2EUcRw41vcSsDrWSpSA8R9QPYlbDXrvPcZ//mHMxHlVuZfWdDDZ/32OP2OKHO3jkH5b8XuXmXeGF5VFkVbXS8b7Dg5ko0HoFNCKi2DRW6psD5EZrNeqzMNw/lYOTCD51e6J1vGF8TJhiu+dTI2Ve+qpGRjIe44n+Xp6MLLwBrnk/1zNrvY2wdXw9+02v1gPwYp3NQPHvgQ2t5lLQaGcxQm5jZujH5dVb+LNMLbwEZ2q1lOlp5t2dYlZ7p8G24t6zpxtKdSVrSekercJ9k15mc3ISbg3fDLDRq+WkXAfJeZMaYwWGfymlJCa4SwYMJOjInxsukWk9R08ZKxLb0pGOafwzVPitwhuV5e2ujVFyC22qw+Eo3O2OedTfzqMao94nK2W5vcVcbxjnIn0QwXO9sNsKZb5Ppl3EwVeYWf612xQzDaXeTyvsA7cZ1maOsqQneOavcXWrrT6ob1lllDBMAYriOCT1UzRZrCUq2u+RCPNvE4mPx5O2uiPDSJ2CRw8NUHMHBGTiqgZzxa4BJbDx+xzoEgmidtYqvILi9PkTY46wLj6dS2o90izZbYqTSd8UiEyl+TN912qqp7IhS+YWcpXalqHZ0x+GvWAw0K9a+ASUnqPQS9/DYVw61F31DWGyF0DGGEVIhZE1XAHAZ/tO4VzVbJzdiO2Q+cUJORALFXBp7Ztrx8vv0QMz/lS2BJ2uev1ViBoqoKNSh6k/mKxy6HzOgpbXbn2jMI78Pdxv467N7X235wlwFrABkHQqjMoKd40WxQzDlgFnbTDNqR2wOYTLRjSfubRm1EmGu6TqmW+uGdJ0Ndr3dS1J3ry6HAqx8dJwvRImlJCTVYsW/HE5nqvs/9bQS1Vq6qzjtx2h5SvdYTA3UdV7DOnJWHk5RsPDJjVoUQp1u0pohCR6bcC2Mo5tBDSK/KDCFJB7lstnJeYrg2wIuGWNg9kzFAeFtbZiQHDNCNd0D7DKAKywXyeDZ2WhxbF8Xawhc7TusaeRBORIxYyF50p47c1oSivb2e3IWyxnl40XavjohNO6dTA4iozSta05X9oj0NfAz3AlkzE+Shv4S+fLvDH3G03uSxWtUUfY0GAT9MfwxwMjuqphmojmm05ekbK50bLt2tHnk4AO+bs5rAmk5dRCml1iOuXerNmDpiPECKVcplB83y2X567rDCx3zemQhnVI+86xRJcTxiT3FWCHp/jyvuHBAcs/fMcgLV3OvqnC3tudki6fh8etNZPZQJJThkYcHO17beycwmeC1ywxNbaEN08P4dL/0amB6ftYnj93oG4Yx1L3S4mzmMNe0MekQfOPHGB9VKtqMQPW5YvzWzcMePIpfhbPym1lRoC0PX41DsIbGjop0lamWeZPYQE8bxcDdjgPzJ48m6+NlyZriHsV/2TT1HqlcGDZK+ecT99FV1VtqyYOo00nBZ0n6u9qTMLnvCnl0IMp0Ch6LuvqCoJ2yxSEMeB9GWEo0s1+JBjeOw60RpskMcpksmIm3wt74JfK7co6UlwmF5V+LIzCfAaeeLUP6uwtdAd28tsy+ywxQcpyTdlu3gBVJdmIc3mAw4GZdrDeljeW/9fKVcMB3zm2s/KjQxpwNOuJVeJhLz/ZoKQKiPF3in/hpjJKyk4IBVbWmHoHc4j9zhAP32ufZnTUmAp1sdDB8eh65rKpusPXFodSgq77eZQd3YLFmt9ii0SCxpKV2aPo+VywB115PKYiUR/yLfQ4hhrVbmuQHEw7QredFQFqJMkRcN0R0Q8HjCttWiyWkmMah1zwRDhE6taHHEI6G/53wDdff6evxWTArvCsA7HNYu370nxub+cslTHgzgbVXlE7G3psiVw1WFH/0Px+KkXOtMlyvH17JueTDfkkBBN/0SLGJcJcsMGOh5u97QRkt0GepsLXZkbPK6VYuUMUcxMI9gnMTd6UHuyFgmSh/Ex4/sKxcVahqfIdDQlv6yjbuPDA0MjWE6vNLW/j7ryvjcj5k48BttMZ/qf3mKr0tZhSKzgmUrcYl+nOSsdG+6+PA9L+IlLAFf+EWUM2l3kwV09SuPnSX4IreteDdMGwrUT5iPsy42f54XmAfVnEXwNHOgnkztmcH92e6OmgB64xI/G7ABLP2vAduIkjbHbUQ/CAifw9HV0LnUsePahpSLP/GO4+HnajacQTvPXebCIPXQrxAGzXbz8A/TEnec9t1zLUP29/4SacOYjYO4NZeuOOx4dAggdzxqZAbdaIBuRdK6N+I2MF3XtRUFoX3Xzq1EpycYuDbiM+1YmAkIGs/5SLZvisbol0v0REi7kVFDPJTMY7SY5/LtfMYuEdsDDaxp3vd48Q0CxaOk+z6uzmNIhIZ9/rF0eMam0x0CBj1txDSuL9cVHa5Vj2uEVOewzkViTeJc7XvbisCR+1ZXf8cBqHDeZQyk712NQnsqdRT649I7N2dgjBWHmhhYUtVb8LW9ZQu6tua/T5Ghl1pDakrWDanx0r4mMVf8RVlZuC0tNGymXtKO20LJEKtvBGrw2bY/m6Q3W5iNjLE65xTgzT8ZYWONdx6Ja239dY+VMwd5ylOfBjPVOZeJW0YO2wSCHiUO3wqMVgyrT1l3G5l246ZyOJVvHQjZoNjNpqP8EkBkRY5mbETfkkilLbqfdV/UFfRhUG6ikx5Df1YNuQGiCjBetFAOLaGg9Qi5Y2gcn2b077gRXVIsxaEi27LTatmC7t1p1HbSZNMWwShB7NFxoXNc1lkDfNr7T0FTX5JcCQq5AtFuW/jLFR12+XQZJ2nPLuAnyNQrB6ls/bsizxPMUffzPJ2Mq6N7mDtdfyZPHXS3MkKJr+dlUYbhmDrl29oO4so3JwsaqgO45bePH9X9HIoZLhJbPeIlA/geEJioqJhUfooiMGK+9rai6qnqeuAuTFqElknrv8JgmKp22mqWrUZt4uEbUaE3AY+9y0yCK/tVvfkovQvl7kMkMivUYA73jsTUrFsk80LbAFeJIGzoHTKsDZMm5evkmh+rU2d4ki+qjX+TNqD3re82mantS4nxwDJdxHyYVjmYOA2MPg/FQp4fvz39XrwUpmHgXPdVcOO6hkz9OEjWZ+JmhMkXn/c5p8nN+3dvUzD6/KbXEGoHFkmlIt8MXeJsZtdO07bvJgkHLsq3r79/5xRONb8DXp52x1D3D366xHey4+vKMTIe4fcsZ7yK5smT/KxcN7rb1IZ5ZgaTvox4o/zde9g9N/8piEWBw/vSiZWQgWL1fnby9Ue97/VEQiWeu8ojSZPh/iWtghm0R4ax+vFcu6hrQdxXLRYlJ9JvPGJfPv36+SFRXqVGoFw//+IfXxLxPIHdex35y4w9grZKnHut2tOpCCuRReaUqHG6DkLtitkmlKU2XCJXWrIjd8fcECuRuxCfJ8W8e6ulMbTRvgvReI0ZlSAJuiMNA5crX0lrN5JvOd2v8Di+QMGuRy+Twp6whLNMQA063IYg74TGdDJDslLaqdB7pDQVW1jGKIwjVxHHffDyslhvMJ5HUDJj1Kw20IN43OhB8EeI2QiHrf71r9CoOPEXvT+jNRRgyTcZL4KErf0w9hhe4yHvI4EPTGjpUN614WcZuHqtawmwBO+FShOoklZWERv6PwAAAP//AQAA//+RNJGuAJgAAA==") + bs, _ = base64.StdEncoding.DecodeString("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") gr, _ = gzip.NewReader(bytes.NewBuffer(bs)) bs, _ = ioutil.ReadAll(gr) assets["scripts/syncthing/core/controllers/syncthingController.js"] = bs diff --git a/internal/config/config.go b/internal/config/config.go index c0bd1b4e8..1c597c080 100644 --- a/internal/config/config.go +++ b/internal/config/config.go @@ -38,12 +38,13 @@ var l = logger.DefaultLogger const CurrentVersion = 7 type Configuration struct { - Version int `xml:"version,attr"` - Folders []FolderConfiguration `xml:"folder"` - Devices []DeviceConfiguration `xml:"device"` - GUI GUIConfiguration `xml:"gui"` - Options OptionsConfiguration `xml:"options"` - XMLName xml.Name `xml:"configuration" json:"-"` + Version int `xml:"version,attr"` + Folders []FolderConfiguration `xml:"folder"` + Devices []DeviceConfiguration `xml:"device"` + GUI GUIConfiguration `xml:"gui"` + Options OptionsConfiguration `xml:"options"` + IgnoredDevices []protocol.DeviceID `xml:"ignoredDevice"` + XMLName xml.Name `xml:"configuration" json:"-"` OriginalVersion int `xml:"-" json:"-"` // The version we read from disk, before any conversion Deprecated_Repositories []FolderConfiguration `xml:"repository" json:"-"` @@ -241,10 +242,13 @@ func (cfg *Configuration) WriteXML(w io.Writer) error { func (cfg *Configuration) prepare(myID protocol.DeviceID) { fillNilSlices(&cfg.Options) - // Initialize an empty slice for folders if the config has none + // Initialize an empty slices if cfg.Folders == nil { cfg.Folders = []FolderConfiguration{} } + if cfg.IgnoredDevices == nil { + cfg.IgnoredDevices = []protocol.DeviceID{} + } // Check for missing, bad or duplicate folder ID:s var seenFolders = map[string]*FolderConfiguration{} diff --git a/internal/config/wrapper.go b/internal/config/wrapper.go index ae01f1e0f..f21d0b568 100644 --- a/internal/config/wrapper.go +++ b/internal/config/wrapper.go @@ -245,6 +245,19 @@ func (w *Wrapper) InvalidateFolder(id string, err string) { } } +// Returns whether or not connection attempts from the given device should be +// silently ignored. +func (w *Wrapper) IgnoredDevice(id protocol.DeviceID) bool { + w.mut.Lock() + defer w.mut.Unlock() + for _, device := range w.cfg.IgnoredDevices { + if device == id { + return true + } + } + return false +} + // Save writes the configuration to disk, and generates a ConfigSaved event. func (w *Wrapper) Save() error { fd, err := ioutil.TempFile(filepath.Dir(w.path), "cfg") diff --git a/internal/model/model.go b/internal/model/model.go index c17bc3665..403113404 100644 --- a/internal/model/model.go +++ b/internal/model/model.go @@ -477,7 +477,7 @@ func (m *Model) Index(deviceID protocol.DeviceID, folder string, fs []protocol.F "folder": folder, "device": deviceID.String(), }) - l.Warnf("Unexpected folder ID %q sent from device %q; ensure that the folder exists and that this device is selected under \"Share With\" in the folder configuration.", folder, deviceID) + l.Infof("Unexpected folder ID %q sent from device %q; ensure that the folder exists and that this device is selected under \"Share With\" in the folder configuration.", folder, deviceID) return }