Compare commits

...
21 Commits
Author SHA1 Message Date
Frank Denis dcb209aa2c Remove about/release notes on OSX 10.6. 2012-08-08 08:53:22 -07:00
Frank Denis 8475fe5287 alloc/init the pipe instead of using an autoreleased object 2012-08-08 02:00:50 -07:00
Frank Denis 9aa4fea0ed Require restart after a menu bar app update. 2012-08-08 01:37:26 -07:00
Frank Denis 4ec53b807f 0.13 2012-08-08 01:36:07 -07:00
Frank Denis 33d17cdcd2 Support OSX 10.6 again. 2012-08-08 01:30:15 -07:00
Frank Denis e3c16df9fc Update release notes. 2012-08-08 01:25:41 -07:00
Frank Denis fcaae563c9 Kill NSLog() 2012-08-08 01:17:40 -07:00
Frank Denis 2a1aaa33b9 Have opendnsButtonPressed actually disable OpenDNS 2012-08-08 01:13:05 -07:00
Frank Denis 35277a3e08 Back to 64 bit 2012-08-08 00:36:39 -07:00
Frank Denis 0f8823d73d un-arc the pref pane 2012-08-08 00:36:39 -07:00
Frank Denis ed1c7d679c Embed about & release notes, so that these files can eventually match the current app. 2012-08-08 00:36:39 -07:00
Frank Denis ebfc8e667a More reordering for old Xcode versions. 2012-08-08 00:36:39 -07:00
Frank Denis 1ce77e1aee Reorder functions to make old Xcode versions happy. 2012-08-08 00:36:39 -07:00
Frank Denis 5d4ba56a8d hamlize the "about" page. 2012-08-08 00:36:39 -07:00
Frank Denis b6e5cf0427 Update and hamlize release notes. 2012-08-08 00:36:39 -07:00
Frank Denis 39a64fb476 Die, screen.css 2012-08-08 00:36:39 -07:00
Frank Denis e41fd947f0 Update the pages and php code with what we ((could|should) have used|will use) 2012-08-08 00:36:39 -07:00
Frank Denis 11826e20ee Don't install on OSX 10.6 and older. 2012-08-08 00:36:38 -07:00
Frank Denis 7fca88fc2d Head towards 0.13 2012-08-08 00:36:31 -07:00
Frank Denis 4b53063514 Explicitly flush the DNS cache after switching to a new resolver. 2012-08-07 10:36:23 -07:00
Frank Denis edc601496f Some code snippets come from dnssec-trigger. Mention it. 2012-08-07 10:31:13 -07:00
23 changed files with 601 additions and 505 deletions
+29 -35
View File
@@ -61,22 +61,18 @@ DNSConfigurationState currentState = kDNS_CONFIGURATION_UNKNOWN;
_fallbackMenuItem.state = 0;
res = [self fromCommand: @"/bin/ksh" withArguments: [NSArray arrayWithObjects: @"-c", @"cd '" kDNSCRIPT_SCRIPTS_BASE_DIR @"' && exec ./get-dnscrypt-status.sh", nil]];
NSLog(@"%@", res);
if ([res isEqualToString: @"yes"]) {
[_dnscryptMenuItem setState: 1];
}
res = [self fromCommand: @"/bin/ksh" withArguments: [NSArray arrayWithObjects: @"-c", @"cd '" kDNSCRIPT_SCRIPTS_BASE_DIR @"' && exec ./get-familyshield-status.sh", nil]];
NSLog(@"%@", res);
if ([res isEqualToString: @"yes"]) {
[_familyShieldMenuItem setState: 1];
}
res = [self fromCommand: @"/bin/ksh" withArguments: [NSArray arrayWithObjects: @"-c", @"cd '" kDNSCRIPT_SCRIPTS_BASE_DIR @"' && exec ./get-insecure-opendns-status.sh", nil]];
NSLog(@"%@", res);
if ([res isEqualToString: @"yes"]) {
[_opendnsMenuItem setState: 1];
}
res = [self fromCommand: @"/bin/ksh" withArguments: [NSArray arrayWithObjects: @"-c", @"cd '" kDNSCRIPT_SCRIPTS_BASE_DIR @"' && exec ./get-fallback-status.sh", nil]];
NSLog(@"%@", res);
if ([res isEqualToString: @"yes"]) {
[_fallbackMenuItem setState: 1];
}
@@ -99,22 +95,6 @@ DNSConfigurationState currentState = kDNS_CONFIGURATION_UNKNOWN;
return FALSE;
}
- (void) showSpinners
{
[self setCheckBoxesEnabled: FALSE];
NSBundle *bundle = [NSBundle mainBundle];
NSImage *led = [[NSImage alloc] initWithContentsOfFile: [bundle pathForImageResource: @"no-network.png"]];
_statusItem.image = led;
[led release];
[self fromCommand: @"/bin/ksh" withArguments: [NSArray arrayWithObjects: @"-c", @"cd '" kDNSCRIPT_SCRIPTS_BASE_DIR @"' && exec ./gui-push-conf-change.sh prefpane", nil]];
[NSObject cancelPreviousPerformRequestsWithTarget: self selector: @selector(periodicallyUpdateStatusWithCurrentConfig) object: nil];
[NSObject cancelPreviousPerformRequestsWithTarget: self selector: @selector(waitForUpdate) object: nil];
[self performSelector: @selector(waitForUpdate) withObject: self afterDelay:kREFRESH_DELAY];
}
- (void) updateLedStatus
{
NSBundle *bundle = [NSBundle mainBundle];
@@ -138,9 +118,8 @@ DNSConfigurationState currentState = kDNS_CONFIGURATION_UNKNOWN;
}
- (BOOL) updateStatusWithCurrentConfig
{
{
NSString *stateDescription = [self fromCommand: @"/bin/ksh" withArguments: [NSArray arrayWithObjects: @"-c", @"cd '" kDNSCRIPT_SCRIPTS_BASE_DIR @"' && ./get-current-resolvers.sh | ./get-resolvers-description.sh", nil]];
NSLog(@"%@", stateDescription);
if ([stateDescription isEqualToString: @"FamilyShield"]) {
currentState = kDNS_CONFIGURATION_OPENDNS;
} else if ([stateDescription isEqualToString: @"DNSCrypt"]) {
@@ -162,15 +141,20 @@ DNSConfigurationState currentState = kDNS_CONFIGURATION_UNKNOWN;
_statusResolversMenuItem.title = currentResolvers;
NSString *res = [self fromCommand: @"/bin/ksh" withArguments: [NSArray arrayWithObjects: @"-c", @"cd '" kDNSCRIPT_SCRIPTS_BASE_DIR @"' && exec ./gui-pop-conf-change.sh menubar", nil]];
NSLog(@"%@", res);
if ([res isEqualToString: @"yes"]) {
[self initState];
}
[self setCheckBoxesEnabled: TRUE];
return TRUE;
}
- (void) periodicallyUpdateStatusWithCurrentConfig {
[self updateStatusWithCurrentConfig];
[NSObject cancelPreviousPerformRequestsWithTarget: self selector: @selector(periodicallyUpdateStatusWithCurrentConfig) object: nil];
[self performSelector: @selector(periodicallyUpdateStatusWithCurrentConfig) withObject:nil afterDelay: 5.0];
}
- (void) waitForUpdate {
NSString *res;
static unsigned int tries;
@@ -186,10 +170,20 @@ DNSConfigurationState currentState = kDNS_CONFIGURATION_UNKNOWN;
[self performSelector: @selector(waitForUpdate) withObject: self afterDelay:kREFRESH_DELAY];
}
- (void) periodicallyUpdateStatusWithCurrentConfig {
[self updateStatusWithCurrentConfig];
- (void) showSpinners
{
[self setCheckBoxesEnabled: FALSE];
NSBundle *bundle = [NSBundle mainBundle];
NSImage *led = [[NSImage alloc] initWithContentsOfFile: [bundle pathForImageResource: @"no-network.png"]];
_statusItem.image = led;
[led release];
[self fromCommand: @"/bin/ksh" withArguments: [NSArray arrayWithObjects: @"-c", @"cd '" kDNSCRIPT_SCRIPTS_BASE_DIR @"' && exec ./gui-push-conf-change.sh prefpane", nil]];
[NSObject cancelPreviousPerformRequestsWithTarget: self selector: @selector(periodicallyUpdateStatusWithCurrentConfig) object: nil];
[self performSelector: @selector(periodicallyUpdateStatusWithCurrentConfig) withObject:nil afterDelay: 5.0];
[NSObject cancelPreviousPerformRequestsWithTarget: self selector: @selector(waitForUpdate) object: nil];
[self performSelector: @selector(waitForUpdate) withObject: self afterDelay:kREFRESH_DELAY];
}
- (void) awakeFromNib
@@ -230,56 +224,56 @@ DNSConfigurationState currentState = kDNS_CONFIGURATION_UNKNOWN;
- (BOOL) setDNSCryptOn {
[self showSpinners];
NSString *res = [self fromCommand: @"/bin/ksh" withArguments: [NSArray arrayWithObjects: @"-c", @"cd '" kDNSCRIPT_SCRIPTS_BASE_DIR @"' && ./create-ticket.sh && ./switch-to-dnscrypt.sh", nil]];
NSLog(@"%@", res);
(void) res;
return TRUE;
}
- (BOOL) setDNSCryptOff {
[self showSpinners];
NSString *res = [self fromCommand: @"/bin/ksh" withArguments: [NSArray arrayWithObjects: @"-c", @"cd '" kDNSCRIPT_SCRIPTS_BASE_DIR @"' && ./create-ticket.sh && ./switch-to-dhcp.sh", nil]];
NSLog(@"%@", res);
(void) res;
return TRUE;
}
- (BOOL) setFamilyShieldOn {
[self showSpinners];
NSString *res = [self fromCommand: @"/bin/ksh" withArguments: [NSArray arrayWithObjects: @"-c", @"cd '" kDNSCRIPT_SCRIPTS_BASE_DIR @"' && ./create-ticket.sh && ./switch-familyshield-on.sh", nil]];
NSLog(@"%@", res);
(void) res;
return TRUE;
}
- (BOOL) setFamilyShieldOff {
[self showSpinners];
NSString *res = [self fromCommand: @"/bin/ksh" withArguments: [NSArray arrayWithObjects: @"-c", @"cd '" kDNSCRIPT_SCRIPTS_BASE_DIR @"' && ./create-ticket.sh && ./switch-familyshield-off.sh", nil]];
NSLog(@"%@", res);
(void) res;
return TRUE;
}
- (BOOL) setInsecureOpenDNSOn {
[self showSpinners];
NSString *res = [self fromCommand: @"/bin/ksh" withArguments: [NSArray arrayWithObjects: @"-c", @"cd '" kDNSCRIPT_SCRIPTS_BASE_DIR @"' && ./create-ticket.sh && ./switch-insecure-opendns-on.sh", nil]];
NSLog(@"%@", res);
(void) res;
return TRUE;
}
- (BOOL) setInsecureOpenDNSOff {
[self showSpinners];
NSString *res = [self fromCommand: @"/bin/ksh" withArguments: [NSArray arrayWithObjects: @"-c", @"cd '" kDNSCRIPT_SCRIPTS_BASE_DIR @"' && ./create-ticket.sh && ./switch-insecure-opendns-off.sh", nil]];
NSLog(@"%@", res);
(void) res;
return TRUE;
}
- (BOOL) setFallbackOn {
[self showSpinners];
NSString *res = [self fromCommand: @"/bin/ksh" withArguments: [NSArray arrayWithObjects: @"-c", @"cd '" kDNSCRIPT_SCRIPTS_BASE_DIR @"' && ./create-ticket.sh && ./switch-fallback-on.sh", nil]];
NSLog(@"%@", res);
(void) res;
return TRUE;
}
- (BOOL) setFallbackOff {
[self showSpinners];
NSString *res = [self fromCommand: @"/bin/ksh" withArguments: [NSArray arrayWithObjects: @"-c", @"cd '" kDNSCRIPT_SCRIPTS_BASE_DIR @"' && ./create-ticket.sh && ./switch-fallback-off.sh", nil]];
NSLog(@"%@", res);
(void) res;
return TRUE;
}
@@ -17,11 +17,11 @@
<key>CFBundlePackageType</key>
<string>APPL</string>
<key>CFBundleShortVersionString</key>
<string>0.12 (beta)</string>
<string>0.13 (beta)</string>
<key>CFBundleSignature</key>
<string>????</string>
<key>CFBundleVersion</key>
<string>0.12</string>
<string>0.13</string>
<key>LSApplicationCategoryType</key>
<string>public.app-category.utilities</string>
<key>LSMinimumSystemVersion</key>
@@ -1241,7 +1241,7 @@
<key>USE_HFS+_COMPRESSION</key>
<true/>
<key>VERSION</key>
<string>0.12</string>
<string>0.13</string>
</dict>
<key>TYPE</key>
<integer>0</integer>
@@ -1722,7 +1722,7 @@
<key>AUTHENTICATION</key>
<integer>1</integer>
<key>CONCLUSION_ACTION</key>
<integer>4</integer>
<integer>2</integer>
<key>IDENTIFIER</key>
<string>com.opendns.osx.dnscryptClient.DNSCrypt-Menubar</string>
<key>LOCATION</key>
@@ -1734,7 +1734,7 @@
<key>USE_HFS+_COMPRESSION</key>
<true/>
<key>VERSION</key>
<string>0.12</string>
<string>0.13</string>
</dict>
<key>TYPE</key>
<integer>0</integer>
+1 -1
View File
@@ -1,6 +1,6 @@
#! /bin/sh
VERSION='0.12'
VERSION='0.13'
cd build || exit 1
(
+5
View File
@@ -13,3 +13,8 @@
* ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
* OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
*/
The get-dhcp-resolvers.sh and check-network-change.sh scripts use code
snippets from the dnssec-trigger project, by Wouter Wijngaards, NLnet
Labs. (great and similar project, check it out:
http://www.nlnetlabs.nl/projects/dnssec-trigger/)
@@ -16,6 +16,7 @@
0946B0E413F48065008277C6 /* Security.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 0946B0E313F48065008277C6 /* Security.framework */; };
09640E95145CA4AD008B37EC /* opendns_logo_300.png in Resources */ = {isa = PBXBuildFile; fileRef = 09640E94145CA4AD008B37EC /* opendns_logo_300.png */; };
09A13ABC145F2D8700B227A4 /* ajax-loader.gif in Resources */ = {isa = PBXBuildFile; fileRef = 09A13ABB145F2D8700B227A4 /* ajax-loader.gif */; };
09AD01A015D2483500638DCE /* html in Resources */ = {isa = PBXBuildFile; fileRef = 09AD019F15D2483500638DCE /* html */; };
09FB094415C9DE6400B8AAB6 /* usr in Resources */ = {isa = PBXBuildFile; fileRef = 09FB094315C9DE6400B8AAB6 /* usr */; };
4B36C4651468B87A0085B07C /* WebKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4B36C4641468B87A0085B07C /* WebKit.framework */; };
4B89D983147CA39200872F60 /* dnscrypt_256.png in Resources */ = {isa = PBXBuildFile; fileRef = 4B89D982147CA39200872F60 /* dnscrypt_256.png */; };
@@ -45,6 +46,7 @@
0946B0E313F48065008277C6 /* Security.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Security.framework; path = System/Library/Frameworks/Security.framework; sourceTree = SDKROOT; };
09640E94145CA4AD008B37EC /* opendns_logo_300.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = opendns_logo_300.png; sourceTree = "<group>"; };
09A13ABB145F2D8700B227A4 /* ajax-loader.gif */ = {isa = PBXFileReference; lastKnownFileType = image.gif; path = "ajax-loader.gif"; sourceTree = "<group>"; };
09AD019F15D2483500638DCE /* html */ = {isa = PBXFileReference; lastKnownFileType = folder; name = html; path = extra/html; sourceTree = "<group>"; };
09FB094315C9DE6400B8AAB6 /* usr */ = {isa = PBXFileReference; lastKnownFileType = folder; name = usr; path = extra/usr; sourceTree = "<group>"; };
4B36C4641468B87A0085B07C /* WebKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = WebKit.framework; path = System/Library/Frameworks/WebKit.framework; sourceTree = SDKROOT; };
4B89D982147CA39200872F60 /* dnscrypt_256.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = dnscrypt_256.png; sourceTree = "<group>"; };
@@ -119,6 +121,7 @@
0946B0D713F47F53008277C6 /* DNSCrypt.tiff */,
4B89D982147CA39200872F60 /* dnscrypt_256.png */,
0946B0D913F47F53008277C6 /* DNSCrypt.xib */,
09AD019F15D2483500638DCE /* html */,
09FB094315C9DE6400B8AAB6 /* usr */,
0946B0CE13F47F53008277C6 /* Supporting Files */,
);
@@ -226,6 +229,7 @@
09A13ABC145F2D8700B227A4 /* ajax-loader.gif in Resources */,
4B89D983147CA39200872F60 /* dnscrypt_256.png in Resources */,
09FB094415C9DE6400B8AAB6 /* usr in Resources */,
09AD01A015D2483500638DCE /* html in Resources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
@@ -277,7 +281,7 @@
buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO;
ARCHS = "$(ARCHS_STANDARD_64_BIT)";
CLANG_ENABLE_OBJC_ARC = YES;
CLANG_ENABLE_OBJC_ARC = NO;
COMBINE_HIDPI_IMAGES = YES;
COPY_PHASE_STRIP = NO;
GCC_C_LANGUAGE_STANDARD = gnu99;
@@ -306,7 +310,7 @@
buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO;
ARCHS = "$(ARCHS_STANDARD_64_BIT)";
CLANG_ENABLE_OBJC_ARC = YES;
CLANG_ENABLE_OBJC_ARC = NO;
COMBINE_HIDPI_IMAGES = YES;
COPY_PHASE_STRIP = NO;
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
@@ -17,11 +17,11 @@
<key>CFBundlePackageType</key>
<string>BNDL</string>
<key>CFBundleShortVersionString</key>
<string>0.12</string>
<string>0.13</string>
<key>CFBundleSignature</key>
<string>????</string>
<key>CFBundleVersion</key>
<string>0.12</string>
<string>0.13</string>
<key>NSHumanReadableCopyright</key>
<string>Copyright © 2011-2012 OpenDNS Inc. All rights reserved.</string>
<key>NSMainNibFile</key>
+15 -12
View File
@@ -9,7 +9,7 @@
#import <PreferencePanes/PreferencePanes.h>
#import <WebKit/WebKit.h>
#define kDNSCRYPT_PACKAGE_VERSION @"0.12"
#define kDNSCRYPT_PACKAGE_VERSION @"0.13"
#define kDNSCRYPT_PREFPANE_APP_PATH @"/Library/PreferencePanes/DNSCrypt.prefPane"
#define kDNSCRYPT_USR_BASE_DIR kDNSCRYPT_PREFPANE_APP_PATH @"/Contents/Resources/usr"
@@ -32,19 +32,22 @@ typedef enum {
@interface DNSCrypt : NSPreferencePane {
AuthorizationRef auth;
}
@property (assign) IBOutlet NSTabView *tabView;
@property (assign) IBOutlet NSTabViewItem *aboutTabViewItem;
@property (assign) IBOutlet NSTabViewItem *releaseNotesTabViewItem;
@property (weak) IBOutlet NSButton *dnscryptButton;
@property (weak) IBOutlet NSButton *opendnsButton;
@property (weak) IBOutlet NSButton *familyShieldButton;
@property (weak) IBOutlet NSButton *fallbackButton;
@property (strong) IBOutlet NSButton *dnscryptButton;
@property (strong) IBOutlet NSButton *opendnsButton;
@property (strong) IBOutlet NSButton *familyShieldButton;
@property (strong) IBOutlet NSButton *fallbackButton;
@property (weak) IBOutlet NSTextField *currentResolverTextField;
@property (weak) IBOutlet NSImageView *statusImageView;
@property (weak) IBOutlet NSTextField *statusText;
@property (weak) IBOutlet WebView *previewNotesWebView;
@property (weak) IBOutlet WebView *releaseNotesWebView;
@property (weak) IBOutlet WebView *feedbackWebView;
@property (weak) IBOutlet WebView *aboutWebView;
@property (strong) IBOutlet NSTextField *currentResolverTextField;
@property (strong) IBOutlet NSImageView *statusImageView;
@property (strong) IBOutlet NSTextField *statusText;
@property (strong) IBOutlet WebView *previewNotesWebView;
@property (strong) IBOutlet WebView *releaseNotesWebView;
@property (strong) IBOutlet WebView *feedbackWebView;
@property (strong) IBOutlet WebView *aboutWebView;
- (void) mainViewDidLoad;
+125 -124
View File
@@ -34,7 +34,7 @@ DNSConfigurationState currentState = kDNS_CONFIGURATION_UNKNOWN;
- (NSString *) fromCommand: (NSString *) launchPath withArguments: (NSArray *) arguments
{
NSPipe *pipe = [NSPipe pipe];
NSPipe *pipe = [[NSPipe alloc] init];
NSTask *task = [[NSTask alloc] init];
NSData *data;
NSString *result;
@@ -45,6 +45,7 @@ DNSConfigurationState currentState = kDNS_CONFIGURATION_UNKNOWN;
data = [[pipe fileHandleForReading] readDataToEndOfFile];
[task waitUntilExit];
[task release];
[pipe release];
result = [[[NSString alloc] initWithData: data encoding: NSUTF8StringEncoding] autorelease];
if ([result hasSuffix: @"\n"]) {
result = [result substringToIndex: result.length - 1];
@@ -62,119 +63,23 @@ DNSConfigurationState currentState = kDNS_CONFIGURATION_UNKNOWN;
_fallbackButton.state = 0;
res = [self fromCommand: @"/bin/ksh" withArguments: [NSArray arrayWithObjects: @"-c", @"cd '" kDNSCRIPT_SCRIPTS_BASE_DIR @"' && exec ./get-dnscrypt-status.sh", nil]];
NSLog(@"%@", res);
if ([res isEqualToString: @"yes"]) {
[_dnscryptButton setState: 1];
}
res = [self fromCommand: @"/bin/ksh" withArguments: [NSArray arrayWithObjects: @"-c", @"cd '" kDNSCRIPT_SCRIPTS_BASE_DIR @"' && exec ./get-familyshield-status.sh", nil]];
NSLog(@"%@", res);
if ([res isEqualToString: @"yes"]) {
[_familyShieldButton setState: 1];
}
res = [self fromCommand: @"/bin/ksh" withArguments: [NSArray arrayWithObjects: @"-c", @"cd '" kDNSCRIPT_SCRIPTS_BASE_DIR @"' && exec ./get-insecure-opendns-status.sh", nil]];
NSLog(@"%@", res);
if ([res isEqualToString: @"yes"]) {
[_opendnsButton setState: 1];
}
res = [self fromCommand: @"/bin/ksh" withArguments: [NSArray arrayWithObjects: @"-c", @"cd '" kDNSCRIPT_SCRIPTS_BASE_DIR @"' && exec ./get-fallback-status.sh", nil]];
NSLog(@"%@", res);
if ([res isEqualToString: @"yes"]) {
[_fallbackButton setState: 1];
}
}
- (BOOL) setDNSCryptOn {
[self showSpinners];
NSString *res = [self fromCommand: @"/bin/ksh" withArguments: [NSArray arrayWithObjects: @"-c", @"cd '" kDNSCRIPT_SCRIPTS_BASE_DIR @"' && ./create-ticket.sh && ./switch-to-dnscrypt.sh", nil]];
NSLog(@"%@", res);
return TRUE;
}
- (BOOL) setDNSCryptOff {
[self showSpinners];
NSString *res = [self fromCommand: @"/bin/ksh" withArguments: [NSArray arrayWithObjects: @"-c", @"cd '" kDNSCRIPT_SCRIPTS_BASE_DIR @"' && ./create-ticket.sh && ./switch-to-dhcp.sh", nil]];
NSLog(@"%@", res);
return TRUE;
}
- (BOOL) setFamilyShieldOn {
[self showSpinners];
NSString *res = [self fromCommand: @"/bin/ksh" withArguments: [NSArray arrayWithObjects: @"-c", @"cd '" kDNSCRIPT_SCRIPTS_BASE_DIR @"' && ./create-ticket.sh && ./switch-familyshield-on.sh", nil]];
NSLog(@"%@", res);
return TRUE;
}
- (BOOL) setFamilyShieldOff {
[self showSpinners];
NSString *res = [self fromCommand: @"/bin/ksh" withArguments: [NSArray arrayWithObjects: @"-c", @"cd '" kDNSCRIPT_SCRIPTS_BASE_DIR @"' && ./create-ticket.sh && ./switch-familyshield-off.sh", nil]];
NSLog(@"%@", res);
return TRUE;
}
- (BOOL) setInsecureOpenDNSOn {
[self showSpinners];
NSString *res = [self fromCommand: @"/bin/ksh" withArguments: [NSArray arrayWithObjects: @"-c", @"cd '" kDNSCRIPT_SCRIPTS_BASE_DIR @"' && ./create-ticket.sh && ./switch-insecure-opendns-on.sh", nil]];
NSLog(@"%@", res);
return TRUE;
}
- (BOOL) setInsecureOpenDNSOff {
[self showSpinners];
NSString *res = [self fromCommand: @"/bin/ksh" withArguments: [NSArray arrayWithObjects: @"-c", @"cd '" kDNSCRIPT_SCRIPTS_BASE_DIR @"' && ./create-ticket.sh && ./switch-insecure-opendns-off.sh", nil]];
NSLog(@"%@", res);
return TRUE;
}
- (BOOL) setFallbackOn {
[self showSpinners];
NSString *res = [self fromCommand: @"/bin/ksh" withArguments: [NSArray arrayWithObjects: @"-c", @"cd '" kDNSCRIPT_SCRIPTS_BASE_DIR @"' && ./create-ticket.sh && ./switch-fallback-on.sh", nil]];
NSLog(@"%@", res);
return TRUE;
}
- (BOOL) setFallbackOff {
[self showSpinners];
NSString *res = [self fromCommand: @"/bin/ksh" withArguments: [NSArray arrayWithObjects: @"-c", @"cd '" kDNSCRIPT_SCRIPTS_BASE_DIR @"' && ./create-ticket.sh && ./switch-fallback-off.sh", nil]];
NSLog(@"%@", res);
return TRUE;
}
- (IBAction)dnscryptButtonPressed:(NSButton *)sender
{
if (sender.state != 0) {
[self setDNSCryptOn];
} else {
[self setDNSCryptOff];
}
}
- (IBAction)opendnsButtonPressed:(NSButton *)sender
{
if (sender.state != 0) {
[self setInsecureOpenDNSOn];
} else {
[self setInsecureOpenDNSOn];
}
}
- (IBAction)familyShieldButtonPressed:(NSButton *)sender
{
if (sender.state != 0) {
[self setFamilyShieldOn];
} else {
[self setFamilyShieldOff];
}
}
- (IBAction)fallbackButtonPressed:(NSButton *)sender
{
if (sender.state != 0) {
[self setFallbackOn];
} else {
[self setFallbackOff];
}
}
- (void) updateLedStatus
{
NSBundle *bundle = [NSBundle bundleWithIdentifier: @"com.opendns.osx.DNSCrypt"];
@@ -203,7 +108,6 @@ DNSConfigurationState currentState = kDNS_CONFIGURATION_UNKNOWN;
- (BOOL) updateStatusWithCurrentConfig
{
NSString *stateDescription = [self fromCommand: @"/bin/ksh" withArguments: [NSArray arrayWithObjects: @"-c", @"cd '" kDNSCRIPT_SCRIPTS_BASE_DIR @"' && ./get-current-resolvers.sh | ./get-resolvers-description.sh", nil]];
NSLog(@"%@", stateDescription);
if ([stateDescription isEqualToString: @"FamilyShield"]) {
currentState = kDNS_CONFIGURATION_OPENDNS;
} else if ([stateDescription isEqualToString: @"DNSCrypt"]) {
@@ -224,7 +128,6 @@ DNSConfigurationState currentState = kDNS_CONFIGURATION_UNKNOWN;
_currentResolverTextField.stringValue = currentResolvers;
NSString *res = [self fromCommand: @"/bin/ksh" withArguments: [NSArray arrayWithObjects: @"-c", @"cd '" kDNSCRIPT_SCRIPTS_BASE_DIR @"' && exec ./gui-pop-conf-change.sh prefpane", nil]];
NSLog(@"%@", res);
if ([res isEqualToString: @"yes"]) {
[self initState];
}
@@ -233,6 +136,119 @@ DNSConfigurationState currentState = kDNS_CONFIGURATION_UNKNOWN;
return TRUE;
}
- (void) periodicallyUpdateStatusWithCurrentConfig {
[self updateStatusWithCurrentConfig];
[NSObject cancelPreviousPerformRequestsWithTarget: self selector: @selector(periodicallyUpdateStatusWithCurrentConfig) object: nil];
[self performSelector: @selector(periodicallyUpdateStatusWithCurrentConfig) withObject:nil afterDelay: kREFRESH_DELAY];
}
- (void) showSpinners {
NSBundle *bundle = [NSBundle bundleWithIdentifier: kBUNDLE_IDENTIFIER];
[self setCheckBoxesEnabled: FALSE];
_statusText.stringValue = NSLocalizedString(@"Updating", @"Updating network configuraiton");
_statusImageView.image = [[[NSImage alloc] initWithContentsOfFile: [bundle pathForImageResource: @"ajax-loader.gif"]] autorelease];
_currentResolverTextField.stringValue = @"";
[self fromCommand: @"/bin/ksh" withArguments: [NSArray arrayWithObjects: @"-c", @"cd '" kDNSCRIPT_SCRIPTS_BASE_DIR @"' && exec ./gui-push-conf-change.sh menubar", nil]];
[NSObject cancelPreviousPerformRequestsWithTarget: self selector: @selector(periodicallyUpdateStatusWithCurrentConfig) object: nil];
[NSObject cancelPreviousPerformRequestsWithTarget: self selector: @selector(waitForUpdate) object: nil];
[self performSelector: @selector(waitForUpdate) withObject: self afterDelay:kREFRESH_DELAY];
}
- (BOOL) setDNSCryptOn {
[self showSpinners];
NSString *res = [self fromCommand: @"/bin/ksh" withArguments: [NSArray arrayWithObjects: @"-c", @"cd '" kDNSCRIPT_SCRIPTS_BASE_DIR @"' && ./create-ticket.sh && ./switch-to-dnscrypt.sh", nil]];
(void) res;
return TRUE;
}
- (BOOL) setDNSCryptOff {
[self showSpinners];
NSString *res = [self fromCommand: @"/bin/ksh" withArguments: [NSArray arrayWithObjects: @"-c", @"cd '" kDNSCRIPT_SCRIPTS_BASE_DIR @"' && ./create-ticket.sh && ./switch-to-dhcp.sh", nil]];
(void) res;
return TRUE;
}
- (BOOL) setFamilyShieldOn {
[self showSpinners];
NSString *res = [self fromCommand: @"/bin/ksh" withArguments: [NSArray arrayWithObjects: @"-c", @"cd '" kDNSCRIPT_SCRIPTS_BASE_DIR @"' && ./create-ticket.sh && ./switch-familyshield-on.sh", nil]];
(void) res;
return TRUE;
}
- (BOOL) setFamilyShieldOff {
[self showSpinners];
NSString *res = [self fromCommand: @"/bin/ksh" withArguments: [NSArray arrayWithObjects: @"-c", @"cd '" kDNSCRIPT_SCRIPTS_BASE_DIR @"' && ./create-ticket.sh && ./switch-familyshield-off.sh", nil]];
(void) res;
return TRUE;
}
- (BOOL) setInsecureOpenDNSOn {
[self showSpinners];
NSString *res = [self fromCommand: @"/bin/ksh" withArguments: [NSArray arrayWithObjects: @"-c", @"cd '" kDNSCRIPT_SCRIPTS_BASE_DIR @"' && ./create-ticket.sh && ./switch-insecure-opendns-on.sh", nil]];
(void) res;
return TRUE;
}
- (BOOL) setInsecureOpenDNSOff {
[self showSpinners];
NSString *res = [self fromCommand: @"/bin/ksh" withArguments: [NSArray arrayWithObjects: @"-c", @"cd '" kDNSCRIPT_SCRIPTS_BASE_DIR @"' && ./create-ticket.sh && ./switch-insecure-opendns-off.sh", nil]];
(void) res;
return TRUE;
}
- (BOOL) setFallbackOn {
[self showSpinners];
NSString *res = [self fromCommand: @"/bin/ksh" withArguments: [NSArray arrayWithObjects: @"-c", @"cd '" kDNSCRIPT_SCRIPTS_BASE_DIR @"' && ./create-ticket.sh && ./switch-fallback-on.sh", nil]];
(void) res;
return TRUE;
}
- (BOOL) setFallbackOff {
[self showSpinners];
NSString *res = [self fromCommand: @"/bin/ksh" withArguments: [NSArray arrayWithObjects: @"-c", @"cd '" kDNSCRIPT_SCRIPTS_BASE_DIR @"' && ./create-ticket.sh && ./switch-fallback-off.sh", nil]];
(void) res;
return TRUE;
}
- (IBAction)dnscryptButtonPressed:(NSButton *)sender
{
if (sender.state != 0) {
[self setDNSCryptOn];
} else {
[self setDNSCryptOff];
}
}
- (IBAction)opendnsButtonPressed:(NSButton *)sender
{
if (sender.state != 0) {
[self setInsecureOpenDNSOn];
} else {
[self setInsecureOpenDNSOff];
}
}
- (IBAction)familyShieldButtonPressed:(NSButton *)sender
{
if (sender.state != 0) {
[self setFamilyShieldOn];
} else {
[self setFamilyShieldOff];
}
}
- (IBAction)fallbackButtonPressed:(NSButton *)sender
{
if (sender.state != 0) {
[self setFallbackOn];
} else {
[self setFallbackOff];
}
}
- (void) waitForUpdate {
NSString *res;
static unsigned int tries;
@@ -248,27 +264,6 @@ DNSConfigurationState currentState = kDNS_CONFIGURATION_UNKNOWN;
[self performSelector: @selector(waitForUpdate) withObject: self afterDelay:kREFRESH_DELAY];
}
- (void) showSpinners {
NSBundle *bundle = [NSBundle bundleWithIdentifier: kBUNDLE_IDENTIFIER];
[self setCheckBoxesEnabled: FALSE];
_statusText.stringValue = NSLocalizedString(@"Updating", @"Updating network configuraiton");
_statusImageView.image = [[[NSImage alloc] initWithContentsOfFile: [bundle pathForImageResource: @"ajax-loader.gif"]] autorelease];
_currentResolverTextField.stringValue = @"";
[self fromCommand: @"/bin/ksh" withArguments: [NSArray arrayWithObjects: @"-c", @"cd '" kDNSCRIPT_SCRIPTS_BASE_DIR @"' && exec ./gui-push-conf-change.sh menubar", nil]];
[NSObject cancelPreviousPerformRequestsWithTarget: self selector: @selector(periodicallyUpdateStatusWithCurrentConfig) object: nil];
[NSObject cancelPreviousPerformRequestsWithTarget: self selector: @selector(waitForUpdate) object: nil];
[self performSelector: @selector(waitForUpdate) withObject: self afterDelay:kREFRESH_DELAY];
}
- (void) periodicallyUpdateStatusWithCurrentConfig {
[self updateStatusWithCurrentConfig];
[NSObject cancelPreviousPerformRequestsWithTarget: self selector: @selector(periodicallyUpdateStatusWithCurrentConfig) object: nil];
[self performSelector: @selector(periodicallyUpdateStatusWithCurrentConfig) withObject:nil afterDelay: kREFRESH_DELAY];
}
- (void) mainViewDidLoad
{
currentState = kDNS_CONFIGURATION_UNKNOWN;
@@ -303,17 +298,23 @@ DNSConfigurationState currentState = kDNS_CONFIGURATION_UNKNOWN;
NSString *feedbackURLText = @"http://dnscrypt.opendns.com/feedback.php";
[[_feedbackWebView mainFrame] loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:feedbackURLText]]];
SInt32 OSXversionMajor, OSXversionMinor;
if (Gestalt(gestaltSystemVersionMajor, &OSXversionMajor) != noErr || Gestalt(gestaltSystemVersionMinor, &OSXversionMinor) != noErr || OSXversionMajor < 10 || OSXversionMinor < 7) {
[_tabView removeTabViewItem: _aboutTabViewItem];
[_tabView removeTabViewItem:_releaseNotesTabViewItem];
return;
}
[_releaseNotesWebView setDrawsBackground:false];
[_releaseNotesWebView setShouldUpdateWhileOffscreen:true];
[_releaseNotesWebView setUIDelegate:self];
NSString *releaseNotesURLText = @"http://dnscrypt.opendns.com/releasenotes.php";
[[_releaseNotesWebView mainFrame] loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:releaseNotesURLText]]];
NSURL *releaseNotesURL = [NSURL fileURLWithPath: [[NSBundle bundleForClass:[self class]] pathForResource: @"html/releasenotes" ofType: @"html"] isDirectory: NO];
[[_releaseNotesWebView mainFrame] loadRequest:[NSURLRequest requestWithURL: releaseNotesURL]];
[_aboutWebView setDrawsBackground:false];
[_aboutWebView setShouldUpdateWhileOffscreen:true];
[_aboutWebView setUIDelegate:self];
NSString *aboutURLText = @"http://dnscrypt.opendns.com/about.php";
[[_aboutWebView mainFrame] loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:aboutURLText]]];
NSURL *aboutURL = [NSURL fileURLWithPath: [[NSBundle bundleForClass:[self class]] pathForResource: @"html/about" ofType: @"html"] isDirectory: NO];
[[_aboutWebView mainFrame] loadRequest:[NSURLRequest requestWithURL: aboutURL]];
}
- (NSArray *)webView:(WebView *)sender contextMenuItemsForElement:(NSDictionary *)element
@@ -3,12 +3,12 @@
<data>
<int key="IBDocument.SystemTarget">1070</int>
<string key="IBDocument.SystemVersion">12A269</string>
<string key="IBDocument.InterfaceBuilderVersion">2818</string>
<string key="IBDocument.InterfaceBuilderVersion">2829</string>
<string key="IBDocument.AppKitVersion">1187</string>
<string key="IBDocument.HIToolboxVersion">624.00</string>
<dictionary class="NSMutableDictionary" key="IBDocument.PluginVersions">
<string key="com.apple.InterfaceBuilder.CocoaPlugin">2818</string>
<string key="com.apple.WebKitIBPlugin">1804</string>
<string key="com.apple.InterfaceBuilder.CocoaPlugin">2829</string>
<string key="com.apple.WebKitIBPlugin">1809</string>
</dictionary>
<array key="IBDocument.IntegratedClassDependencies">
<string>NSBox</string>
@@ -64,7 +64,6 @@
<int key="NSvFlags">274</int>
<string key="NSFrame">{{13, 10}, {563, 359}}</string>
<reference key="NSSuperview" ref="1037298196"/>
<reference key="NSWindow"/>
<reference key="NSNextKeyView" ref="1025762247"/>
<string key="NSReuseIdentifierKey">_NS:461</string>
<array class="NSMutableArray" key="NSTabViewItems">
@@ -79,7 +78,6 @@
<int key="NSvFlags">268</int>
<string key="NSFrame">{{15, 238}, {204, 22}}</string>
<reference key="NSSuperview" ref="1025762247"/>
<reference key="NSWindow"/>
<reference key="NSNextKeyView" ref="300098131"/>
<string key="NSReuseIdentifierKey">_NS:239</string>
<bool key="NSEnabled">YES</bool>
@@ -115,7 +113,6 @@
<int key="NSvFlags">268</int>
<string key="NSFrame">{{15, 212}, {245, 24}}</string>
<reference key="NSSuperview" ref="1025762247"/>
<reference key="NSWindow"/>
<reference key="NSNextKeyView" ref="891532389"/>
<string key="NSReuseIdentifierKey">_NS:239</string>
<bool key="NSEnabled">YES</bool>
@@ -142,7 +139,6 @@
<int key="NSvFlags">268</int>
<string key="NSFrame">{{15, 157}, {244, 22}}</string>
<reference key="NSSuperview" ref="1025762247"/>
<reference key="NSWindow"/>
<reference key="NSNextKeyView" ref="384170040"/>
<string key="NSReuseIdentifierKey">_NS:239</string>
<bool key="NSEnabled">YES</bool>
@@ -173,7 +169,6 @@
<int key="NSvFlags">268</int>
<string key="NSFrame">{{15, 133}, {204, 22}}</string>
<reference key="NSSuperview" ref="1025762247"/>
<reference key="NSWindow"/>
<reference key="NSNextKeyView" ref="240318099"/>
<string key="NSReuseIdentifierKey">_NS:239</string>
<bool key="NSEnabled">YES</bool>
@@ -200,7 +195,6 @@
<int key="NSvFlags">268</int>
<string key="NSFrame">{{14, 96}, {176, 19}}</string>
<reference key="NSSuperview" ref="1025762247"/>
<reference key="NSWindow"/>
<reference key="NSNextKeyView" ref="496861916"/>
<string key="NSReuseIdentifierKey">_NS:3936</string>
<bool key="NSEnabled">YES</bool>
@@ -241,7 +235,6 @@
<int key="NSvFlags">268</int>
<string key="NSFrame">{{54, 284}, {72, 19}}</string>
<reference key="NSSuperview" ref="1025762247"/>
<reference key="NSWindow"/>
<reference key="NSNextKeyView" ref="908408940"/>
<string key="NSReuseIdentifierKey">_NS:3936</string>
<bool key="NSEnabled">YES</bool>
@@ -266,7 +259,6 @@
<int key="NSvFlags">268</int>
<string key="NSFrame">{{14, -3}, {240, 83}}</string>
<reference key="NSSuperview" ref="1025762247"/>
<reference key="NSWindow"/>
<reference key="NSNextKeyView" ref="855319081"/>
<string key="NSReuseIdentifierKey">_NS:3596</string>
<bool key="NSEnabled">YES</bool>
@@ -296,7 +288,6 @@
<int key="NSvFlags">268</int>
<string key="NSFrame">{{115, 283}, {125, 19}}</string>
<reference key="NSSuperview" ref="1025762247"/>
<reference key="NSWindow"/>
<reference key="NSNextKeyView" ref="894789954"/>
<string key="NSReuseIdentifierKey">_NS:3596</string>
<bool key="NSEnabled">YES</bool>
@@ -334,7 +325,6 @@
</set>
<string key="NSFrame">{{302, 222}, {224, 88}}</string>
<reference key="NSSuperview" ref="1025762247"/>
<reference key="NSWindow"/>
<reference key="NSNextKeyView" ref="487940586"/>
<bool key="NSEnabled">YES</bool>
<object class="NSImageCell" key="NSCell" id="107747299">
@@ -365,7 +355,6 @@
</set>
<string key="NSFrame">{{17, 277}, {32.395949255088134, 32.395949255088134}}</string>
<reference key="NSSuperview" ref="1025762247"/>
<reference key="NSWindow"/>
<reference key="NSNextKeyView" ref="372048088"/>
<bool key="NSEnabled">YES</bool>
<object class="NSImageCell" key="NSCell" id="336811923">
@@ -388,7 +377,6 @@
<int key="NSvFlags">12</int>
<string key="NSFrame">{{269.5, 2}, {4, 300}}</string>
<reference key="NSSuperview" ref="1025762247"/>
<reference key="NSWindow"/>
<reference key="NSNextKeyView" ref="429164099"/>
<string key="NSReuseIdentifierKey">_NS:1557</string>
<string key="NSOffsets">{0, 0}</string>
@@ -425,7 +413,7 @@
<int key="NSvFlags">268</int>
<string key="NSFrame">{{323, 190}, {183, 32}}</string>
<reference key="NSSuperview" ref="1025762247"/>
<reference key="NSWindow"/>
<reference key="NSNextKeyView" ref="821865429"/>
<string key="NSReuseIdentifierKey">_NS:2419</string>
<bool key="NSEnabled">YES</bool>
<object class="NSButtonCell" key="NSCell" id="675161177">
@@ -471,7 +459,6 @@
</set>
<string key="NSFrame">{{302, 2}, {224, 192}}</string>
<reference key="NSSuperview" ref="1025762247"/>
<reference key="NSWindow"/>
<reference key="NSNextKeyView"/>
<string key="NSReuseIdentifierKey">_NS:51</string>
<string key="FrameName"/>
@@ -492,7 +479,6 @@
<int key="NSvFlags">12</int>
<string key="NSFrame">{{17, 193}, {240, 5}}</string>
<reference key="NSSuperview" ref="1025762247"/>
<reference key="NSWindow"/>
<reference key="NSNextKeyView" ref="410495287"/>
<string key="NSReuseIdentifierKey">_NS:2411</string>
<string key="NSOffsets">{0, 0}</string>
@@ -515,7 +501,6 @@
</array>
<string key="NSFrame">{{10, 33}, {543, 313}}</string>
<reference key="NSSuperview" ref="821865429"/>
<reference key="NSWindow"/>
<reference key="NSNextKeyView" ref="423755939"/>
<string key="NSReuseIdentifierKey">_NS:463</string>
</object>
@@ -675,7 +660,6 @@
</array>
<string key="NSFrameSize">{589, 375}</string>
<reference key="NSSuperview"/>
<reference key="NSWindow"/>
<reference key="NSNextKeyView" ref="821865429"/>
</object>
<string key="NSScreenRect">{{0, 0}, {1366, 746}}</string>
@@ -825,6 +809,30 @@
</object>
<int key="connectionID">372</int>
</object>
<object class="IBConnectionRecord">
<object class="IBOutletConnection" key="connection">
<string key="label">aboutTabViewItem</string>
<reference key="source" ref="294453543"/>
<reference key="destination" ref="820989392"/>
</object>
<int key="connectionID">376</int>
</object>
<object class="IBConnectionRecord">
<object class="IBOutletConnection" key="connection">
<string key="label">releaseNotesTabViewItem</string>
<reference key="source" ref="294453543"/>
<reference key="destination" ref="615953595"/>
</object>
<int key="connectionID">383</int>
</object>
<object class="IBConnectionRecord">
<object class="IBOutletConnection" key="connection">
<string key="label">tabView</string>
<reference key="source" ref="294453543"/>
<reference key="destination" ref="821865429"/>
</object>
<int key="connectionID">384</int>
</object>
</array>
<object class="IBMutableOrderedSet" key="objectRecords">
<array key="orderedObjects">
@@ -1235,158 +1243,9 @@
<nil key="activeLocalization"/>
<dictionary class="NSMutableDictionary" key="localizations"/>
<nil key="sourceID"/>
<int key="maxID">372</int>
</object>
<object class="IBClassDescriber" key="IBDocument.Classes">
<array class="NSMutableArray" key="referencedPartialClassDescriptions">
<object class="IBPartialClassDescription">
<string key="className">DNSCrypt</string>
<string key="superclassName">NSPreferencePane</string>
<dictionary class="NSMutableDictionary" key="actions">
<string key="dnscryptButtonPressed:">NSButton</string>
<string key="fallbackButtonPressed:">NSButton</string>
<string key="familyShieldButtonPressed:">NSButton</string>
<string key="openDNSLinkPushed:">NSButton</string>
<string key="opendnsButtonPressed:">NSButton</string>
</dictionary>
<dictionary class="NSMutableDictionary" key="actionInfosByName">
<object class="IBActionInfo" key="dnscryptButtonPressed:">
<string key="name">dnscryptButtonPressed:</string>
<string key="candidateClassName">NSButton</string>
</object>
<object class="IBActionInfo" key="fallbackButtonPressed:">
<string key="name">fallbackButtonPressed:</string>
<string key="candidateClassName">NSButton</string>
</object>
<object class="IBActionInfo" key="familyShieldButtonPressed:">
<string key="name">familyShieldButtonPressed:</string>
<string key="candidateClassName">NSButton</string>
</object>
<object class="IBActionInfo" key="openDNSLinkPushed:">
<string key="name">openDNSLinkPushed:</string>
<string key="candidateClassName">NSButton</string>
</object>
<object class="IBActionInfo" key="opendnsButtonPressed:">
<string key="name">opendnsButtonPressed:</string>
<string key="candidateClassName">NSButton</string>
</object>
</dictionary>
<dictionary class="NSMutableDictionary" key="outlets">
<string key="aboutWebView">WebView</string>
<string key="currentResolverTextField">NSTextField</string>
<string key="dnscryptButton">NSButton</string>
<string key="fallbackButton">NSButton</string>
<string key="familyShieldButton">NSButton</string>
<string key="feedbackWebView">WebView</string>
<string key="opendnsButton">NSButton</string>
<string key="previewNotesWebView">WebView</string>
<string key="releaseNotesWebView">WebView</string>
<string key="statusImageView">NSImageView</string>
<string key="statusText">NSTextField</string>
</dictionary>
<dictionary class="NSMutableDictionary" key="toOneOutletInfosByName">
<object class="IBToOneOutletInfo" key="aboutWebView">
<string key="name">aboutWebView</string>
<string key="candidateClassName">WebView</string>
</object>
<object class="IBToOneOutletInfo" key="currentResolverTextField">
<string key="name">currentResolverTextField</string>
<string key="candidateClassName">NSTextField</string>
</object>
<object class="IBToOneOutletInfo" key="dnscryptButton">
<string key="name">dnscryptButton</string>
<string key="candidateClassName">NSButton</string>
</object>
<object class="IBToOneOutletInfo" key="fallbackButton">
<string key="name">fallbackButton</string>
<string key="candidateClassName">NSButton</string>
</object>
<object class="IBToOneOutletInfo" key="familyShieldButton">
<string key="name">familyShieldButton</string>
<string key="candidateClassName">NSButton</string>
</object>
<object class="IBToOneOutletInfo" key="feedbackWebView">
<string key="name">feedbackWebView</string>
<string key="candidateClassName">WebView</string>
</object>
<object class="IBToOneOutletInfo" key="opendnsButton">
<string key="name">opendnsButton</string>
<string key="candidateClassName">NSButton</string>
</object>
<object class="IBToOneOutletInfo" key="previewNotesWebView">
<string key="name">previewNotesWebView</string>
<string key="candidateClassName">WebView</string>
</object>
<object class="IBToOneOutletInfo" key="releaseNotesWebView">
<string key="name">releaseNotesWebView</string>
<string key="candidateClassName">WebView</string>
</object>
<object class="IBToOneOutletInfo" key="statusImageView">
<string key="name">statusImageView</string>
<string key="candidateClassName">NSImageView</string>
</object>
<object class="IBToOneOutletInfo" key="statusText">
<string key="name">statusText</string>
<string key="candidateClassName">NSTextField</string>
</object>
</dictionary>
<object class="IBClassDescriptionSource" key="sourceIdentifier">
<string key="majorKey">IBProjectSource</string>
<string key="minorKey">./Classes/DNSCrypt.h</string>
</object>
</object>
<object class="IBPartialClassDescription">
<string key="className">NSPreferencePane</string>
<string key="superclassName">NSObject</string>
<dictionary class="NSMutableDictionary" key="outlets">
<string key="_firstKeyView">NSView</string>
<string key="_initialKeyView">NSView</string>
<string key="_lastKeyView">NSView</string>
<string key="_window">NSWindow</string>
</dictionary>
<dictionary class="NSMutableDictionary" key="toOneOutletInfosByName">
<object class="IBToOneOutletInfo" key="_firstKeyView">
<string key="name">_firstKeyView</string>
<string key="candidateClassName">NSView</string>
</object>
<object class="IBToOneOutletInfo" key="_initialKeyView">
<string key="name">_initialKeyView</string>
<string key="candidateClassName">NSView</string>
</object>
<object class="IBToOneOutletInfo" key="_lastKeyView">
<string key="name">_lastKeyView</string>
<string key="candidateClassName">NSView</string>
</object>
<object class="IBToOneOutletInfo" key="_window">
<string key="name">_window</string>
<string key="candidateClassName">NSWindow</string>
</object>
</dictionary>
<object class="IBClassDescriptionSource" key="sourceIdentifier">
<string key="majorKey">IBProjectSource</string>
<string key="minorKey">./Classes/NSPreferencePane.h</string>
</object>
</object>
<object class="IBPartialClassDescription">
<string key="className">WebView</string>
<object class="NSMutableDictionary" key="actions">
<string key="NS.key.0">reloadFromOrigin:</string>
<string key="NS.object.0">id</string>
</object>
<object class="NSMutableDictionary" key="actionInfosByName">
<string key="NS.key.0">reloadFromOrigin:</string>
<object class="IBActionInfo" key="NS.object.0">
<string key="name">reloadFromOrigin:</string>
<string key="candidateClassName">id</string>
</object>
</object>
<object class="IBClassDescriptionSource" key="sourceIdentifier">
<string key="majorKey">IBProjectSource</string>
<string key="minorKey">./Classes/WebView.h</string>
</object>
</object>
</array>
<int key="maxID">384</int>
</object>
<object class="IBClassDescriber" key="IBDocument.Classes"/>
<int key="IBDocument.localizationMode">0</int>
<string key="IBDocument.TargetRuntimeIdentifier">IBCocoaFramework</string>
<object class="NSMutableDictionary" key="IBDocument.PluginDeclaredDependencies">
@@ -0,0 +1,33 @@
!!! 5
%html{lang: "en"}
%head
%meta{charset: "utf-8"}
%title About DNSCrypt
%style{type: "text/css"}
:sass
body
font:
family: arial, helvetica, sans-serif
margin: 0
h1
margin: 0
%body
%h1 About DNSCrypt
%p
This software encrypts DNS packets between your computer and
OpenDNS. This prevents man-in-the-middle attacks and snooping of DNS
traffic by ISPs or others.
%p
Tips:
%ul
%li If you have a firewall, open TCP and UDP ports 53 and 443.
%li
If you prefer reliability over security, enable fallback to
insecure DNS.
%li
The FamilyShield service blocks pornographic content,
including OpenDNS "Pornography", "Tasteless" and "Sexuality"
categories, in addition to proxies and anonymizers (which can render
filtering useless). It also blocks phishing and some malware.
%p
Please help by providing feedback!
@@ -0,0 +1,42 @@
<!DOCTYPE html>
<html lang='en'>
<head>
<meta charset='utf-8' />
<title>About DNSCrypt</title>
<style type='text/css'>
body {
font-family: arial, helvetica, sans-serif;
margin: 0; }
h1 {
margin: 0; }
</style>
</head>
<body>
<h1>About DNSCrypt</h1>
<p>
This software encrypts DNS packets between your computer and
OpenDNS. This prevents man-in-the-middle attacks and snooping of DNS
traffic by ISPs or others.
</p>
<p>
Tips:
<ul>
<li>If you have a firewall, open TCP and UDP ports 53 and 443.</li>
<li>
If you prefer reliability over security, enable fallback to
insecure DNS.
</li>
<li>
The FamilyShield service blocks pornographic content,
including OpenDNS "Pornography", "Tasteless" and "Sexuality"
categories, in addition to proxies and anonymizers (which can render
filtering useless). It also blocks phishing and some malware.
</li>
</ul>
</p>
<p>
Please help by providing feedback!
</p>
</body>
</html>
@@ -0,0 +1,85 @@
!!! 5
%html{lang: "en"}
%head
%meta{charset: "utf-8"}
%title Release notes
%style{type: "text/css"}
:sass
body
font:
family: arial, helvetica, sans-serif
margin: 0
h1, h2
margin: 0
h1
border-bottom: 1px solid grey
article
padding-left: 1em
time
font:
style: italic
%body
%h1 Release Notes
%article
%h2 Version 0.13 released!
%time Wed, 08 Aug 2012
%ul
%li The DNS cache is now flushed after a configuration change.
%li Compatibility with OSX 10.6 has been improved.
%li
The release notes are now bundled with the preference pane.
This reduces the startup time and ensures that these notes are
consistent with the currently running version.
%article
%h2 Version 0.12 released!
%time Mon, 06 Aug 2012
%ul
%li
The "fallback to insecure" mode now properly copes with captive
portals and firewalls.
%li
The TCP/443 checkbox is gone. When the dnscrypt box is
checked, it tries everything in parallel and keeps whatever
works best.
%li
IPv6 is fully supported (and automatic. If that works using
IPv6, IPv6 is used)
%li
Familyshield is supported, with and without dnscrypt.
%li
OpenDNS/DNSCrypt/Familyshield/Fallback settings can be set
from the menu bar.
%li
Internal domain names like routerlogin.net are directly sent
to the router or to whatever DNS resolvers the DHCP server provides.
%li
Packages are signed for Mountain Lion.
%li
The interface passively watches for network changes according to the
current network configuration and the current Wifi access
point. It doesn't constantly poll for changes any more.
%li
The proxy has been updated to version 1.0.1.
%article
%h2 Version 0.10 released!
%time Thu, 12 Jan 2012
%ul
%li The orange dot has been replaced with a green one.
%li
Some content in the preferences pane wasn't always
properly loaded on Snow Leopard. This has been fixed.
%article
%h2 Version 0.9 released!
%time Mon, 10 Jan 2012
%ul
%li A new icon set, due to popular request.
%li The dnscrypt settings are persistent across reboots.
%article
%h2 Version 0.8 released!
%time Wed, 14 Dec 2011
%ul
%li dnscrypt doesn't require administrative privileges any more.
@@ -0,0 +1,107 @@
<!DOCTYPE html>
<html lang='en'>
<head>
<meta charset='utf-8' />
<title>Release notes</title>
<style type='text/css'>
body {
font-family: arial, helvetica, sans-serif;
margin: 0; }
h1, h2 {
margin: 0; }
h1 {
border-bottom: 1px solid grey; }
article {
padding-left: 1em; }
time {
font-style: italic; }
</style>
</head>
<body>
<h1>Release Notes</h1>
<article>
<h2>Version 0.13 released!</h2>
<time>Wed, 08 Aug 2012</time>
<ul>
<li>The DNS cache is now flushed after a configuration change.</li>
<li>Compatibility with OSX 10.6 has been improved.</li>
<li>
The release notes are now bundled with the preference pane.
This reduces the startup time and ensures that these notes are
consistent with the currently running version.
</li>
</ul>
</article>
<article>
<h2>Version 0.12 released!</h2>
<time>Mon, 06 Aug 2012</time>
<ul>
<li>
The "fallback to insecure" mode now properly copes with captive
portals and firewalls.
</li>
<li>
The TCP/443 checkbox is gone. When the dnscrypt box is
checked, it tries everything in parallel and keeps whatever
works best.
</li>
<li>
IPv6 is fully supported (and automatic. If that works using
IPv6, IPv6 is used)
</li>
<li>
Familyshield is supported, with and without dnscrypt.
</li>
<li>
OpenDNS/DNSCrypt/Familyshield/Fallback settings can be set
from the menu bar.
</li>
<li>
Internal domain names like routerlogin.net are directly sent
to the router or to whatever DNS resolvers the DHCP server provides.
</li>
<li>
Packages are signed for Mountain Lion.
</li>
<li>
The interface passively watches for network changes according to the
current network configuration and the current Wifi access
point. It doesn't constantly poll for changes any more.
</li>
<li>
The proxy has been updated to version 1.0.1.
</li>
</ul>
</article>
<article>
<h2>Version 0.10 released!</h2>
<time>Thu, 12 Jan 2012</time>
<ul>
<li>The orange dot has been replaced with a green one.</li>
<li>
Some content in the preferences pane wasn't always
properly loaded on Snow Leopard. This has been fixed.
</li>
</ul>
</article>
<article>
<h2>Version 0.9 released!</h2>
<time>Mon, 10 Jan 2012</time>
<ul>
<li>A new icon set, due to popular request.</li>
<li>The dnscrypt settings are persistent across reboots.</li>
</ul>
</article>
<article>
<h2>Version 0.8 released!</h2>
<time>Wed, 14 Dec 2011</time>
<ul>
<li>dnscrypt doesn't require administrative privileges any more.</li>
</ul>
</article>
</body>
</html>
@@ -11,3 +11,5 @@ exec networksetup -listallnetworkservices 2>/dev/null | \
fgrep -v '*' | while read x ; do
networksetup -setdnsservers "$x" "$servers"
done
dscacheutil -flushcache 2> /dev/null
exit 0
@@ -9,3 +9,5 @@ exec networksetup -listallnetworkservices 2>/dev/null | \
fgrep -v '*' | while read x ; do
networksetup -setdnsservers "$x" $servers
done
dscacheutil -flushcache 2> /dev/null
exit 0
-20
View File
@@ -1,20 +0,0 @@
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
<link rel="stylesheet" media="screen" href="./screen.css" type="text/css" />
</head>
<body>
<div id="body">
<h1>About DNSCrypt!</h1>
<p>This software encrypts DNS packets between your computer and OpenDNS. This prevents man-in-the-middle attacks and snooping of DNS traffic by ISPs or others.</p>
<p>Tips:</p>
<ul>
<li>If you have a firewall or other middleware mangling your packets, try enabling DNSCrypt with TCP over port 443.
<li>If you prefer reliability over security, enable fallback to insecure DNS.</li>
</ul>
<p>Please help by providing feedback!</p>
</div>
</body>
</html>
+8 -6
View File
@@ -1,6 +1,6 @@
!!! 5
%html{lang: "en"}
%head
%html{lang: "en"}
%head
%meta{charset: "utf-8"}
%title DNSCrypt feedback form
%style{type: "text/css"}
@@ -8,8 +8,11 @@
body
font:
family: arial, helvetica, sans-serif
margin: 0
h1
margin: 0
form
margin: 10px auto
margin: 0 auto
width: 500px
p
margin: 0.25em 0
@@ -30,7 +33,7 @@
width: auto
textarea
width: 300px
height: 200px
height: 170px
#submit
text-align: center
%body
@@ -40,8 +43,7 @@
%p
%label{for: "name"} Name:
%input{type: "text", name: "name", autofocus: true,
required: true, value: "{{name}}",
class: "{{class_name}}"}
required: true, value: "{{name}}", class: "{{class_name}}"}
%p
%label{for: "email"} Email:
%input{type: "email", name: "email",
+88 -19
View File
@@ -2,6 +2,9 @@
error_reporting(E_ALL);
define('FEEDBACK_RECIPIENT', 'DNSCrypt Feedback <dnscrypt@example.com>');
define('FEEDBACK_SUBJECT', 'DNSCrypt Feedback');
function strip_slashes_from_user_data(&$array) {
foreach($array as $k => $v) {
if (is_array($v)) {
@@ -12,22 +15,26 @@ function strip_slashes_from_user_data(&$array) {
}
}
if (get_magic_quotes_gpc()) {
strip_slashes_from_user_data($_GET);
strip_slashes_from_user_data($_POST);
strip_slashes_from_user_data($_COOKIE);
function disable_magic_quotes() {
if (get_magic_quotes_gpc()) {
strip_slashes_from_user_data($_GET);
strip_slashes_from_user_data($_POST);
strip_slashes_from_user_data($_COOKIE);
}
}
function render_headers() {
header('X-Frame-Options: sameorigin');
header('X-XSS-Protection: 1; mode=block');
header('X-Content-Security-Policy: allow \'self\'');
header('Cache-Control: private, max-age=3600');
header('Expires: ' . date('r', time() + 3600));
}
function render_tpl($template, $vars) {
$tpl = @file_get_contents($template);
if (empty($tpl)) {
throw new Exception("template");
throw new Exception('template');
}
foreach ($vars as $key => $value) {
foreach (array_keys($vars) as $key_) {
@@ -35,25 +42,87 @@ function render_tpl($template, $vars) {
$value = '';
}
}
$tpl = str_replace('{{' . $key . '}}',
htmlspecialchars($value),
$tpl);
$tpl = str_replace('{{' . $key . '}}', htmlspecialchars($value), $tpl);
}
echo $tpl;
}
$authenticity_token = isset($_GET['authenticity_token']) ?
(string) $_GET['authenticity_token'] : '';
$name = trim(isset($_POST['name']) ? (string) $_POST['name'] : '');
$email = trim(isset($_POST['email']) ? (string) $_POST['email'] : '');
$feedback = trim(isset($_POST['feedback']) ? (string) $_POST['feedback'] : '');
function redirect_to_sent_page($uri) {
header('HTTP/1.1 303 See other');
header('Location: ' . $uri);
exit;
}
$form_url = $_SERVER['REQUEST_URI'] . '?' .
http_build_query(array('authenticity_token' => $authenticity_token));
function _send_email($name, $email, $feedback) {
$from = mb_encode_mimeheader($name, 'UTF-8') . '<' . $email . '>';
$to = FEEDBACK_RECIPIENT;
$subject = mb_encode_mimeheader(FEEDBACK_SUBJECT, 'UTF-8');
$body = addslashes($feedback);
return send_email($from, $to, $subject, $body);
}
function send_form($name, $email, $feedback) {
if (_send_email($name, $email, $feedback) !== TRUE) {
redirect_to_sent_page($_SERVER['SCRIPT_NAME']);
}
redirect_to_sent_page('sent.html');
}
function process_feedback(&$errors, &$name, &$email, &$feedback) {
$name = trim(isset($_POST['name']) ? (string) $_POST['name'] : '');
$email = trim(isset($_POST['email']) ? (string) $_POST['email'] : '');
$feedback = trim(isset($_POST['feedback']) ?
(string) $_POST['feedback'] : '');
if (empty($name)) {
array_push($errors, 'name');
}
if (! filter_var($email, FILTER_VALIDATE_EMAIL)) {
array_push($errors, 'email');
}
if (empty($feedback)) {
array_push($errors, 'feedback');
}
if (! empty($errors)) {
return;
}
session_start();
if (empty($_SESSION['authenticity_token']) ||
$_GET['authenticity_token'] !== $_SESSION['authenticity_token']) {
return;
}
send_form($name, $email, $feedback);
unset($_SESSION['authenticity_token']);
}
disable_magic_quotes();
render_headers();
render_tpl('feedback.tpl', array('authenticity_token' => $authenticity_token,
'name' => $name, 'email' => $email,
'feedback' => $feedback,
'form_url' => $form_url));
$errors = array();
$name = $email = $feedback = '';
if ($_SERVER['REQUEST_METHOD'] === 'POST' &&
!empty($_GET['authenticity_token'])) {
process_feedback($errors, $name, $email, $feedback);
}
if (session_id() === '') {
session_start();
}
$authenticity_token = md5(uniqid(__FILE__, TRUE));
$_SESSION['authenticity_token'] = $authenticity_token;
$form_url = $_SERVER['SCRIPT_NAME'] . '?' .
http_build_query(array('authenticity_token' => $authenticity_token));
$vars = array('name' => $name,
'email' => $email,
'feedback' => $feedback,
'form_url' => $form_url);
foreach ($errors as $error) {
$vars['class_' . $error] = 'error';
}
render_tpl('feedback.tpl', $vars + $errors);
+14 -10
View File
@@ -5,37 +5,41 @@
<title>DNSCrypt feedback form</title>
<style type='text/css'>
body {
font-family: arial, helvetica, sans-serif; }
font-family: arial, helvetica, sans-serif;
margin: 0; }
h1 {
margin: 0; }
form {
margin: 10px auto;
margin: 0 auto;
width: 500px; }
form p {
margin: 0.25em 0; }
form .error {
background: #ffbbbb;
color: black; }
fieldset {
border: none;
padding: 0; }
label {
float: left;
width: 100px;
text-align: right;
padding-right: 1em; }
input {
width: 200px; }
input[type=submit] {
width: auto; }
textarea {
width: 300px;
height: 200px; }
height: 170px; }
#submit {
text-align: center; }
</style>
-76
View File
@@ -1,76 +0,0 @@
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
<link rel="stylesheet" media="screen" href="./screen.css" type="text/css" />
</head>
<body>
<h1>Release Notes</h1>
<div class="blog">
<div class="post">
<h2>Version 0.10 released!</h2>
<div class="date"><p>Updated: Thu, 12 Jan 2012</p></div>
<ul>
<li>The orange dot has been replaced with a green one.</li>
<li>Some content in the preferences pane wasn't always properly loaded on Snow Leopard. This has been fixed.</li>
</ul>
</div>
<div class="post">
<h2>Version 0.9 released!</h2>
<div class="date"><p>Updated: Mon, 10 Jan 2012</p></div>
<ul>
<li>A new icon set, due to popular request.</li>
<li>The dnscrypt settings are persistent across reboots.</li>
</ul>
</div>
<div class="post">
<h2>Version 0.8 released!</h2>
<div class="date"><p>Updated: Wed, 14 Dec 2011</p></div>
<ul>
<li>dnscrypt doesn't require administrative privileges any more.</li>
</ul>
</div>
<div class="post">
<h2>Version 0.7 released!</h2>
<div class="date"><p>Updated: Mon, 5 Dec 2011</p></div>
<ul>
<li>Bug fixes.</li>
</ul>
</div>
<div class="post">
<h2>Version 0.6 released!</h2>
<div class="date"><p>Updated: Mon, 28 Nov 2011</p></div>
<ul>
<li>Bug fixes.</li>
<li>More robust key handling.</li>
<li>A new icon.</li>
</ul>
</div>
<div class="post">
<h2>Version 0.4 released!</h2>
<div class="date"><p>Updated: Mon, 22 Nov 2011</p></div>
<ul>
<li>This version removes the built-in updater (using Sparkle for updates).</li>
<li>Uses 208.67.220.220 instead of 208.67.222.222 (no difference).</li>
<li>Snow Leopard improvements.</li>
</ul>
</div>
<div class="post">
<h2>Now supporting Snow Leopard!</h2>
<div class="date"><p>Updated: Tue, 15 Nov 2011 23:57:08 +0000</p></div>
<p>Much more to come. Please give feedback. The next version will even have version numbers displayed. :-)</p>
<p>We need an icon too, any ideas?</p>
</div>
<div class="post">
<h2>Preview Release Released!</h2>
<div class="date"><p>Updated: Tue, 13 Nov 2011 12:26:33 +0000</p></div>
<p>This is the first release of DNSCrypt! Much more to come. Please give feedback.</p>
</div>
</div>
</body>
</html>
-20
View File
@@ -1,20 +0,0 @@
body {
font-family: Arial, Helvetica, sans-serif;
max-width: 500px;
margin: 0;
}
.blog {
font-family: serif;
}
.post {
padding: 10px 10px 0 10px;
margin-bottom: 10px;
border-top: 1px solid #999;
}
h1, h2, .date, .date p {
padding: 0px;
margin: 0px;
}
.date {
font-style: italic;
}
+2 -2
View File
@@ -1,6 +1,6 @@
!!! 5
%html{lang: "en"}
%head
%html{lang: "en"}
%head
%meta{charset: "utf-8"}
%meta{"http-equiv" => "refresh", content: "5; url=feedback.php"}
%title DNSCrypt feedback sent