Compare commits

...
38 Commits
Author SHA1 Message Date
Frank Denis be119200b0 Be more liberal with the /Library/Application Support/DNSCrypt perms. 2012-09-07 14:23:41 -07:00
Frank Denis a9d5162dd4 chmod 755 "$DNSCRYPT_VAR_BASE_DIR" because the default perms are too restrictive. 2012-09-07 14:21:51 -07:00
Frank Denis 35b6f29267 sign 0.15 packages 2012-09-07 11:41:14 -07:00
Frank Denis 50e259112c Bump installer version to 0.15 2012-09-07 11:37:38 -07:00
Frank Denis 61c30c56df Prepare for release 0.15 of the OSX GUI. 2012-09-07 11:33:20 -07:00
Frank Denis 1e36414f46 Uninstall the dnscrypt plugins, too. 2012-09-06 10:57:17 -07:00
Frank Denis cfff4c9145 Regen 2012-08-20 17:18:51 -07:00
Frank Denis 0e9ebd325e Only chown/chmod the control dir if the permissions on the parent doesn't
match the current console owner.
If things go bad, it will make them even worse, but it avoids triggering
handle-control-change when not necessary.
2012-08-18 10:18:31 -07:00
Frank Denis d06b75393c Add nowtv.com to the list of exceptions.
Looks like a necessary evil.
2012-08-16 20:18:36 -07:00
Frank Denis 16a6ea8ff6 Add fritz.box to the list of domain exceptions. 2012-08-16 07:41:05 -07:00
Frank Denis 9da622c3fb Uninstaller: cd to the script directory before reverting to dhcp 2012-08-11 09:20:40 -07:00
Frank Denis c5bc5be9f7 Have the uninstaller uninstall files from GUI versions > 0.10 2012-08-10 21:40:04 -07:00
Frank Denis fe647a75c0 0.14 2012-08-08 12:14:41 -07:00
Frank Denis 58da45dd08 Compile the preference pane with gcc, for dead old OSX versions. 2012-08-08 12:01:55 -07:00
Frank Denis 7b6246a569 Synthesize tabView/aboutTabViewItem/releaseNotesTabViewItem. 2012-08-08 11:36:50 -07:00
Frank Denis 611bae452c Cope with possibly missing html files. 2012-08-08 10:36:17 -07:00
Frank Denis e517ebad51 Remove the about/release notes tabs for 10.7, too. 2012-08-08 09:15:22 -07:00
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
27 changed files with 681 additions and 524 deletions
+30 -36
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
@@ -200,7 +194,7 @@ DNSConfigurationState currentState = kDNS_CONFIGURATION_UNKNOWN;
_statusItem.toolTip = @"DNSCrypt";
_statusItem.menu = _dnscryptMenu;
NSString *versionStringFormat = NSLocalizedString(@"Client version: %@", @"Current version in the menu");
NSString *versionStringFormat = NSLocalizedString(@"Client UI version: %@", @"Current UI version as shown in the menu");
NSString *version = [[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleShortVersionString"];
_versionMenuItem.title = [NSString stringWithFormat: versionStringFormat, version];
@@ -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.15 (beta)</string>
<key>CFBundleSignature</key>
<string>????</string>
<key>CFBundleVersion</key>
<string>0.12</string>
<string>0.15</string>
<key>LSApplicationCategoryType</key>
<string>public.app-category.utilities</string>
<key>LSMinimumSystemVersion</key>
@@ -634,7 +634,7 @@
<key>USE_HFS+_COMPRESSION</key>
<true/>
<key>VERSION</key>
<string>1.0.1</string>
<string>1.1.0.1</string>
</dict>
<key>UUID</key>
<string>7F7D70AB-F7A2-4027-8304-3063C7B9532F</string>
@@ -1241,7 +1241,7 @@
<key>USE_HFS+_COMPRESSION</key>
<true/>
<key>VERSION</key>
<string>0.12</string>
<string>0.15</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.15</string>
</dict>
<key>TYPE</key>
<integer>0</integer>
@@ -1756,7 +1756,7 @@
ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KPHRp
dGxlPjwvdGl0bGU+CjxtZXRhIG5hbWU9IkdlbmVyYXRvciIgY29u
dGVudD0iQ29jb2EgSFRNTCBXcml0ZXIiPgo8bWV0YSBuYW1lPSJD
b2NvYVZlcnNpb24iIGNvbnRlbnQ9IjExNTcuNyI+CjxzdHlsZSB0
b2NvYVZlcnNpb24iIGNvbnRlbnQ9IjExODcuMiI+CjxzdHlsZSB0
eXBlPSJ0ZXh0L2NzcyI+Cjwvc3R5bGU+CjwvaGVhZD4KPGJvZHk+
CjwvYm9keT4KPC9odG1sPgo=
</data>
@@ -1994,7 +1994,7 @@
<key>IC_REQUIREMENT_CPU_ARCHITECTURE_FAMILY</key>
<integer>2</integer>
<key>IC_REQUIREMENT_CPU_INTEL_ARCHITECTURE_TYPE</key>
<integer>2</integer>
<integer>0</integer>
<key>IC_REQUIREMENT_CPU_MINIMUM_CPU_CORES_COUNT</key>
<integer>1</integer>
<key>IC_REQUIREMENT_CPU_MINIMUM_FREQUENCY</key>
@@ -2014,7 +2014,7 @@
<key>SECONDARY_VALUE</key>
<string></string>
<key>VALUE</key>
<string>The DNSCrypt GUI for Mac currently requires at least an Intel Core 2 CPU.</string>
<string>The DNSCrypt GUI for Mac currently requires at least an Intel Core CPU.</string>
</dict>
</array>
<key>NAME</key>
@@ -8,7 +8,7 @@ exec 2>/dev/null
/bin/mkdir -p '/Library/Application Support/DNSCrypt/states'
/bin/mkdir -p '/Library/Application Support/DNSCrypt/tickets'
/usr/sbin/chown -R 0:0 '/Library/Application Support/DNSCrypt'
/bin/chmod 710 '/Library/Application Support/DNSCrypt'
/bin/chmod 755 '/Library/Application Support/DNSCrypt'
eval $(/usr/bin/stat -s '/dev/console')
if [ $? != 0 ]; then
+7 -7
View File
@@ -1,6 +1,6 @@
#! /bin/sh
VERSION='0.12'
VERSION='0.15'
cd build || exit 1
(
@@ -16,11 +16,11 @@ done
rm -fr DNSCrypt-OSX.mpkg
productsign --sign 'Developer ID Application' DNSCrypt.mpkg DNSCrypt-OSX.mpkg
zip -9 -r "dnscrypt-osx-client-${VERSION}.zip" DNSCrypt-OSX.mpkg
rm -fr dstroot
rm -fr dnscrypt-pkg
rm -f "dnscrypt-osx-client-${VERSION}.dmg"
mkdir dstroot
mv DNSCrypt-OSX.mpkg dstroot
hdiutil create "dnscrypt-osx-client-${VERSION}.dmg" -srcfolder dstroot
mkdir dnscrypt-pkg
mv DNSCrypt-OSX.mpkg dnscrypt-pkg
hdiutil create "dnscrypt-osx-client-${VERSION}.dmg" -srcfolder dnscrypt-pkg
mv dstroot/DNSCrypt-OSX.mpkg .
rm -fr dstroot
mv dnscrypt-pkg/DNSCrypt-OSX.mpkg .
rm -fr dnscrypt-pkg
+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;
@@ -290,7 +294,7 @@
"$(inherited)",
);
GCC_SYMBOLS_PRIVATE_EXTERN = NO;
GCC_VERSION = com.apple.compilers.llvm.clang.1_0;
GCC_VERSION = com.apple.compilers.llvmgcc42;
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
GCC_WARN_ABOUT_MISSING_PROTOTYPES = YES;
GCC_WARN_ABOUT_RETURN_TYPE = YES;
@@ -306,14 +310,14 @@
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";
GCC_C_LANGUAGE_STANDARD = gnu99;
GCC_ENABLE_OBJC_EXCEPTIONS = YES;
GCC_ENABLE_OBJC_GC = supported;
GCC_VERSION = com.apple.compilers.llvm.clang.1_0;
GCC_VERSION = com.apple.compilers.llvmgcc42;
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
GCC_WARN_ABOUT_MISSING_PROTOTYPES = YES;
GCC_WARN_ABOUT_RETURN_TYPE = YES;
@@ -17,11 +17,11 @@
<key>CFBundlePackageType</key>
<string>BNDL</string>
<key>CFBundleShortVersionString</key>
<string>0.12</string>
<string>0.15</string>
<key>CFBundleSignature</key>
<string>????</string>
<key>CFBundleVersion</key>
<string>0.12</string>
<string>0.15</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.15"
#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 (nonatomic, retain) IBOutlet NSTabView *tabView;
@property (nonatomic, retain) IBOutlet NSTabViewItem *aboutTabViewItem;
@property (nonatomic, retain) IBOutlet NSTabViewItem *releaseNotesTabViewItem;
@property (weak) IBOutlet NSButton *dnscryptButton;
@property (weak) IBOutlet NSButton *opendnsButton;
@property (weak) IBOutlet NSButton *familyShieldButton;
@property (weak) IBOutlet NSButton *fallbackButton;
@property (nonatomic, retain) IBOutlet NSButton *dnscryptButton;
@property (nonatomic, retain) IBOutlet NSButton *opendnsButton;
@property (nonatomic, retain) IBOutlet NSButton *familyShieldButton;
@property (nonatomic, retain) 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 (nonatomic, retain) IBOutlet NSTextField *currentResolverTextField;
@property (nonatomic, retain) IBOutlet NSImageView *statusImageView;
@property (nonatomic, retain) IBOutlet NSTextField *statusText;
@property (nonatomic, retain) IBOutlet WebView *previewNotesWebView;
@property (nonatomic, retain) IBOutlet WebView *releaseNotesWebView;
@property (nonatomic, retain) IBOutlet WebView *feedbackWebView;
@property (nonatomic, retain) IBOutlet WebView *aboutWebView;
- (void) mainViewDidLoad;
+138 -124
View File
@@ -9,6 +9,10 @@
#import "DNSCrypt.h"
@implementation DNSCrypt
@synthesize tabView = _tabView;
@synthesize aboutTabViewItem = _aboutTabViewItem;
@synthesize releaseNotesTabViewItem = _releaseNotesTabViewItem;
@synthesize previewNotesWebView = _previewNotesWebView;
@synthesize releaseNotesWebView = _releaseNotesWebView;
@synthesize feedbackWebView = _feedbackWebView;
@@ -34,7 +38,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 +49,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 +67,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 +112,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 +132,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 +140,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 +268,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 +302,32 @@ 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 < 6) {
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;
NSString *releaseNotesURLPath = [[NSBundle bundleForClass: [self class]] pathForResource: @"releasenotes" ofType: @"html" inDirectory: @"html"];
if (! releaseNotesURLPath || ! (releaseNotesURL = [NSURL fileURLWithPath: releaseNotesURLPath])) {
[_tabView removeTabViewItem:_releaseNotesTabViewItem];
} else {
[[_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;
NSString *aboutURLPath = [[NSBundle bundleForClass: [self class]] pathForResource: @"about" ofType: @"html" inDirectory: @"html"];
if (! aboutURLPath || ! (aboutURL = [NSURL fileURLWithPath: aboutURLPath])) {
[_tabView removeTabViewItem: _aboutTabViewItem];
} else {
[[_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 and authenticates 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 and authenticates 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,102 @@
!!! 5
%html{lang: "en"}
%head
%meta{charset: "utf-8"}
%title Release notes for the user interface
%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 for the user interface
%article
%h2 Version 0.15 released!
%time Wed, 07 Sep 2012
%ul
%li dnscrypt-proxy has been updated to 1.1.0-RC1
%li
Queries for nowtv.com and fritz.com are now bypassing dnscrypt.
%li
The user interface doesn't update the DNS settings any more when
using an interactive shell.
%article
%h2 Version 0.14 released!
%time Wed, 08 Aug 2012
%ul
%li The preference pane can now run on OSX 10.6.
%article
%h2 Version 0.13 released!
%time Wed, 08 Aug 2012
%ul
%li The DNS cache is now flushed after a configuration change.
%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,127 @@
<!DOCTYPE html>
<html lang='en'>
<head>
<meta charset='utf-8' />
<title>Release notes for the user interface</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 for the user interface</h1>
<article>
<h2>Version 0.15 released!</h2>
<time>Wed, 07 Sep 2012</time>
<ul>
<li>dnscrypt-proxy has been updated to 1.1.0-RC1</li>
<li>
Queries for nowtv.com and fritz.com are now bypassing dnscrypt.
</li>
<li>
The user interface doesn't update the DNS settings any more when
using an interactive shell.
</li>
</ul>
</article>
<article>
<h2>Version 0.14 released!</h2>
<time>Wed, 08 Aug 2012</time>
<ul>
<li>The preference pane can now run on OSX 10.6.</li>
</ul>
</article>
<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>
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>
@@ -23,7 +23,9 @@ INTERFACE_PROXY_MASK="24"
INTERFACE_PROBES="127.0.0.55"
INTERFACE_PROBES_MASK="24"
DOMAINS_EXCEPTIONS='routerlogin.net lan localdomain private intranet'
DOMAINS_EXCEPTIONS='
fritz.box intranet lan localdomain nowtv.com private routerlogin.net
'
export PATH="${DNSCRYPT_USR_BASE_DIR}/bin:${DNSCRYPT_USR_BASE_DIR}/scripts:$PATH"
@@ -7,9 +7,18 @@ wanted_uid="$st_uid"
if [ ! -d "$DNSCRYPT_VAR_BASE_DIR" ]; then
mkdir -p "$DNSCRYPT_VAR_BASE_DIR" || exit 1
chown -R 0:0 "$DNSCRYPT_VAR_BASE_DIR"
chmod 755 "$DNSCRYPT_VAR_BASE_DIR"
fi
mkdir -p "$CONTROL_DIR" || exit 1
mkdir -p "$TICKETS_DIR" || exit 1
chown -R "${wanted_uid}:0" "$CONTROL_DIR"
mkdir -m 755 -p "$TICKETS_DIR" || exit 1
chown -R "${wanted_uid}:0" "$TICKETS_DIR"
find "$DNSCRYPT_VAR_BASE_DIR" -type d -exec chmod 755 {} \;
eval $(stat -s "$CONTROL_DIR") || exit 1
if [ $? != 0 ]; then
mkdir -m 755 -p "$CONTROL_DIR" || exit 1
current_uid='nonexistent'
else
current_uid="$st_uid"
fi
[ x"$current_uid" != x"$wanted_uid" ] && \
chown -R "${wanted_uid}:0" "$CONTROL_DIR"
@@ -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
Binary file not shown.
-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