implement ssurl scan

This commit is contained in:
clowwindy
2015-01-12 01:55:03 +08:00
parent f6939f1119
commit e878b41519
5 changed files with 72 additions and 19 deletions
@@ -80,6 +80,23 @@ namespace Shadowsocks.Controller
SaveConfig(_config);
}
public bool AddServerBySSURL(string ssURL)
{
try
{
var server = new Server(ssURL);
_config.configs.Add(server);
_config.index = _config.configs.Count - 1;
SaveConfig(_config);
return true;
}
catch (Exception e)
{
Logging.LogUsefulException(e);
return false;
}
}
public void ToggleEnable(bool enabled)
{
_config.enabled = enabled;
+2 -1
View File
@@ -3,12 +3,13 @@ Enable=启用代理
Mode=代理模式
PAC=PAC 模式
Global=全局模式
Servers=服务器选择
Servers=服务器
Edit Servers...=编辑服务器...
Start on Boot=开机启动
Share over LAN=在局域网共享代理
Edit PAC File...=编辑 PAC 文件...
Show QRCode...=显示二维码...
Scan QRCode from Screen...=扫描屏幕上的二维码...
Show Logs...=显示日志...
About...=关于...
Quit=退出
+1 -9
View File
@@ -94,15 +94,7 @@ namespace Shadowsocks.Model
public static Server GetDefaultServer()
{
return new Server()
{
server = "",
server_port = 8388,
local_port = 1080,
method = "aes-256-cfb",
password = "",
remarks = ""
};
return new Server();
}
private static void Assert(bool condition)
+37
View File
@@ -5,6 +5,7 @@ using System.IO;
using System.Diagnostics;
using SimpleJson;
using Shadowsocks.Controller;
using System.Text.RegularExpressions;
namespace Shadowsocks.Model
{
@@ -33,5 +34,41 @@ namespace Shadowsocks.Model
return remarks + " (" + server + ":" + server_port + ")";
}
}
public Server()
{
this.server = "";
this.server_port = 8388;
this.local_port = 1080;
this.method = "aes-256-cfb";
this.password = "";
this.remarks = "";
}
public Server(string ssURL) : this()
{
string[] r1 = Regex.Split(ssURL, "ss://", RegexOptions.IgnoreCase);
string base64 = r1[1].ToString();
byte[] bytes = null;
for (var i = 0; i < 3; i++) {
try
{
bytes = System.Convert.FromBase64String(base64);
}
catch (FormatException)
{
base64 += "=";
}
}
if (bytes == null)
{
throw new FormatException();
}
string[] parts = Encoding.UTF8.GetString(bytes).Split(new char[2] { ':', '@' });
this.method = parts[0].ToString();
this.password = parts[1].ToString();
this.server = parts[2].ToString();
this.server_port = int.Parse(parts[3].ToString());
}
}
}
+15 -9
View File
@@ -135,7 +135,9 @@ namespace Shadowsocks.View
}),
this.ServersItem = CreateMenuGroup("Servers", new MenuItem[] {
this.SeperatorItem = new MenuItem("-"),
this.ConfigItem = CreateMenuItem("Edit Servers...", new EventHandler(this.Config_Click))
this.ConfigItem = CreateMenuItem("Edit Servers...", new EventHandler(this.Config_Click)),
CreateMenuItem("Show QRCode...", new EventHandler(this.QRCodeItem_Click)),
CreateMenuItem("Scan QRCode from Screen...", new EventHandler(this.ScanQRCodeItem_Click))
}),
new MenuItem("-"),
this.AutoStartupItem = CreateMenuItem("Start on Boot", new EventHandler(this.AutoStartupItem_Click)),
@@ -143,8 +145,6 @@ namespace Shadowsocks.View
CreateMenuItem("Edit PAC File...", new EventHandler(this.EditPACFileItem_Click)),
CreateMenuItem("Update PAC from GFWList", new EventHandler(this.UpdatePACFromGFWListItem_Click)),
new MenuItem("-"),
CreateMenuItem("Show QRCode...", new EventHandler(this.QRCodeItem_Click)),
CreateMenuItem("Scan QRCode...", new EventHandler(this.ScanQRCodeItem_Click)),
CreateMenuItem("Show Logs...", new EventHandler(this.ShowLogItem_Click)),
CreateMenuItem("About...", new EventHandler(this.AboutItem_Click)),
new MenuItem("-"),
@@ -228,8 +228,10 @@ namespace Shadowsocks.View
private void UpdateServersMenu()
{
var items = ServersItem.MenuItems;
items.Clear();
while (items[0] != SeperatorItem)
{
items.RemoveAt(0);
}
Configuration configuration = controller.GetConfiguration();
for (int i = 0; i < configuration.configs.Count; i++)
@@ -238,10 +240,8 @@ namespace Shadowsocks.View
MenuItem item = new MenuItem(server.FriendlyName());
item.Tag = i;
item.Click += AServerItem_Click;
items.Add(item);
items.Add(i, item);
}
items.Add(SeperatorItem);
items.Add(ConfigItem);
if (configuration.index >= 0 && configuration.index < configuration.configs.Count)
{
@@ -384,8 +384,14 @@ namespace Shadowsocks.View
var result = reader.Decode(image);
if (result != null)
{
Console.WriteLine(result.Text);
var success = controller.AddServerBySSURL(result.Text);
if (success)
{
ShowConfigForm();
return;
}
}
MessageBox.Show(I18N.GetString("Failed to scan QRCode"));
}
}