#import "MPPreferencesViewController.h"
#import "MPAppDelegate.h"
+#import "MPAppDelegate_Key.h"
@interface MPPreferencesViewController ()
@@ -114,7 +115,10 @@
- (IBAction)didToggleSwitch:(UISwitch *)sender {
- [MPAppDelegate get].activeUser.saveKey = sender.on;
+ if (([MPAppDelegate get].activeUser.saveKey = sender.on))
+ [[MPAppDelegate get] storeSavedKeyFor:[MPAppDelegate get].activeUser];
+ else
+ [[MPAppDelegate get] forgetSavedKeyFor:[MPAppDelegate get].activeUser];
}
@end
diff --git a/MasterPassword/iOS/MPUnlockViewController.m b/MasterPassword/iOS/MPUnlockViewController.m
index 36227759..927ba778 100644
--- a/MasterPassword/iOS/MPUnlockViewController.m
+++ b/MasterPassword/iOS/MPUnlockViewController.m
@@ -119,12 +119,6 @@
[self.avatarsView autoSizeContentIgnoreHidden:YES ignoreInvisible:YES limitPadding:NO ignoreSubviews:nil];
[self updateLayoutAnimated:YES allowScroll:YES completion:nil];
-
- self.deleteTip.alpha = 0;
- if ([users count] > 1)
- [UIView animateWithDuration:0.5f animations:^{
- self.deleteTip.alpha = 1;
- }];
}
- (UIButton *)setupAvatar:(UIButton *)avatar forUser:(MPUserEntity *)user {
@@ -169,7 +163,11 @@
if (!self.selectedUser)
[self.passwordField resignFirstResponder];
-
+ else if ([[MPAppDelegate get] signInAsUser:self.selectedUser usingMasterPassword:nil]) {
+ [self dismissModalViewControllerAnimated:YES];
+ return;
+ }
+
[self updateLayoutAnimated:YES allowScroll:YES completion:^(BOOL finished) {
if (finished)
if (self.selectedUser)
@@ -230,6 +228,7 @@
self.nameLabel.backgroundColor = [UIColor blackColor];
self.oldNameLabel.center = self.nameLabel.center;
self.avatarShadowColor = [UIColor whiteColor];
+ self.deleteTip.alpha = 0;
} else if (!self.selectedUser && self.passwordView.alpha == 1) {
self.passwordView.alpha = 0;
self.avatarsView.center = CGPointMake(160, 240);
@@ -238,6 +237,7 @@
self.nameLabel.backgroundColor = [UIColor clearColor];
self.oldNameLabel.center = self.nameLabel.center;
self.avatarShadowColor = [UIColor lightGrayColor];
+ self.deleteTip.alpha = [self.avatarToUser count] > 2? 1: 0;
}
MPUserEntity *targetedUser = self.selectedUser;
@@ -294,14 +294,14 @@
[self setSpinnerActive:YES];
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
- BOOL unlocked = [[MPAppDelegate get] tryMasterPassword:self.passwordField.text forUser:self.selectedUser];
+ BOOL unlocked = [[MPAppDelegate get] signInAsUser:self.selectedUser usingMasterPassword:self.passwordField.text];
dispatch_async(dispatch_get_main_queue(), ^{
if (unlocked) {
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (long) (NSEC_PER_SEC * 0.5f)), dispatch_get_main_queue(), ^{
[self dismissModalViewControllerAnimated:YES];
});
- } else
+ } else if (self.passwordField.text.length)
[self setPasswordTip:@"Incorrect password."];
[self setSpinnerActive:NO];
diff --git a/MasterPassword/iOS/MainStoryboard_iPhone.storyboard b/MasterPassword/iOS/MainStoryboard_iPhone.storyboard
index 7cacd1cd..9135fd1a 100644
--- a/MasterPassword/iOS/MainStoryboard_iPhone.storyboard
+++ b/MasterPassword/iOS/MainStoryboard_iPhone.storyboard
@@ -925,6 +925,7 @@ L4m3P4sSw0rD
+
diff --git a/Site/css/screen.css b/Site/css/screen.css
index e38ed2d5..8fda2a20 100644
--- a/Site/css/screen.css
+++ b/Site/css/screen.css
@@ -7,7 +7,7 @@ body {
color: black;
- font: 105% Exo, sans-serif;
+ font: 105% "Hoefler Text", Garamond, Baskerville, "Baskerville Old Face", "Times New Roman", serif;
font-weight: 100;
}
h1, h2, h3, h4 {
@@ -15,6 +15,11 @@ h1, h2, h3, h4 {
font-weight: 600;
}
+h1 {
+ font-family: "HelveticaNeue-Light", "Helvetica Neue Light", "Helvetica Neue", Helvetica, Arial, "Lucida Grande", "Liberation Sans", sans-serif;
+
+ font-weight: 100;
+}
strong {
font-weight: 400;
}
@@ -62,12 +67,28 @@ img {
/* Classes */
.stripe {
background: rgba(255, 255, 255, 0.3);
- border: 1px solid rgba(255, 255, 255, 0.7);
+ border: 1px solid rgba(255, 255, 255, 0.5);
border-width: 1px 0;
-webkit-box-shadow: inset 0 0 15px rgba(255, 255, 255, 0.5), 2px 2px 6px rgba(200, 200, 200, 0.5);
-moz-box-shadow: inset 0 0 15px rgba(255, 255, 255, 0.5), 2px 2px 6px rgba(200, 200, 200, 0.5);
box-shadow: inset 0 0 15px rgba(255, 255, 255, 0.5), 2px 2px 6px rgba(200, 200, 200, 0.5);
}
+.button {
+ display: inline-block;
+ background: rgba(255, 255, 255, 0.7);
+ border: 1px solid rgba(255, 255, 255, 1);
+ border-radius: 5px;
+ -webkit-box-shadow: 1px 1px 6px rgba(200, 200, 200, 0.5);
+ -moz-box-shadow: 1px 1px 6px rgba(200, 200, 200, 0.5);
+ box-shadow: 1px 1px 6px rgba(200, 200, 200, 0.5);
+ padding: 1em;
+
+ text-decoration: none;
+}
+.button:hover {
+ background: rgba(240, 240, 240, 0.5);
+ border-color: white;
+}
/* Page */
header {
@@ -79,11 +100,15 @@ header {
-moz-box-shadow: 0 0 50px #666;
box-shadow: 0 0 50px #666;
+ -webkit-box-sizing: border-box;
+ -moz-box-sizing: border-box;
+ box-sizing: border-box;
top: 0;
left: 0;
width: 100%;
+ height: 150px;
margin: 0 0 5em;
- padding: 1em 0;
+ padding: 1em 0 0;
text-align: center;
}
@@ -111,11 +136,15 @@ header .divider {
-moz-box-shadow: 0 0 10px #000;
box-shadow: 0 0 10px #000;
+ -webkit-box-sizing: border-box;
+ -moz-box-sizing: border-box;
+ box-sizing: border-box;
top: 0;
left: 0;
width: 100%;
+ height: 50px;
margin: 0 0 5em;
- padding: 0.5em 0;
+ padding: 10px 0 0;
text-align: center;
}
@@ -127,6 +156,8 @@ header .divider {
}
header a, header .link, header :link,
#fixedheader a, #fixedheader .link, #fixedheader :link {
+ font-family: Exo;
+ font-weight: 700;
text-decoration: none;
}
header a:hover, header .link:hover,
@@ -187,9 +218,40 @@ blockquote:before {
z-index: -1;
}
.appstore {
- position: absolute;
- right: 10px;
+ position: fixed;
+ display: none;
+ z-index: 100;
font-size: 0;
+
+ /* appstore-bubble.png *
+ top: 8px;
+ right: 5px;
+ */
+ /* appstore.png */
+ top: 25px;
+ right: 25px;
+}
+.appstore img {
+ border-radius: 5px;
+ -webkit-box-shadow: 0 0 30px #AAA;
+ -moz-box-shadow: 0 0 30px #AAA;
+ box-shadow: 0 0 30px #AAA;
+}
+.appstore:hover img {
+ -webkit-box-shadow: 0 0 30px #FFF;
+ -moz-box-shadow: 0 0 30px #FFF;
+ box-shadow: 0 0 30px #FFF;
+}
+header .appstore {
+ position: absolute;
+ display: block;
+
+ top: auto;
+ /* appstore-bubble.png *
+ bottom: -73px;
+ */
+ /* appstore.png */
+ bottom: -25px;
}
.columns {
position: relative;
diff --git a/Site/img/appstore-bubble.png b/Site/img/appstore-bubble.png
new file mode 100644
index 00000000..c867e3e0
Binary files /dev/null and b/Site/img/appstore-bubble.png differ
diff --git a/Site/img/bubble.png b/Site/img/bubble.png
new file mode 100644
index 00000000..b4ff44d4
Binary files /dev/null and b/Site/img/bubble.png differ
diff --git a/Site/img/frontpage_phone.png b/Site/img/frontpage_phone.png
index fa19cded..af93be7a 100644
Binary files a/Site/img/frontpage_phone.png and b/Site/img/frontpage_phone.png differ
diff --git a/Site/index.html b/Site/index.html
index 646ac32d..432fd03e 100644
--- a/Site/index.html
+++ b/Site/index.html
@@ -14,6 +14,19 @@
+
+
@@ -75,7 +89,6 @@
@@ -87,19 +100,23 @@
- Stop worrying about passwords
+ Stop worrying
+ about passwords
- Memorizing passwords or even saving them in our browser, an application or the cloud just isn't good enough.
+ Admit it, you're terrible at memorizing passwords.
-
- Master Password is a solution that voids the need to keep your passwords anywhere . Not in your head, not on your computer and not in the cloud.
-
-
- Nothing to store means nothing to lose. At the same time it makes sure that your accounts are adequately protected with exclusive passwords.
-
-
- Learn how below .
-
+ Just like the rest of the world, your passwords are too simple or reused between many sites. To security specialists or hackers, your accounts are like empty houses with the door wide open .
+ Even the sites you use that hold nothing of value can easily be used by attackers to impersonate you.
+
+ Master Password is a stateless solution , which means your passwords don't need to be saved anywhere . Not in your head, not on your computer and not in the cloud.
+ Nothing to store means nothing to lose. At the same time it makes sure that your accounts are adequately protected with secure and unique passwords.
+
+ Master Password is different from other vault-like password solutions. It helps you set secure passwords for your sites, and at the same time makes losing your passwords almost impossible .
+
+ Built on algorithms such as scrypt and HMAC-SHA256 , your master password is kept safe even if websites you use get hacked.
+
+ On that topic, if you're not using Master Password yet and you have a LinkedIn account, you should worry (click for details) .
+ Change your password now , and change it into something secure and unique.