diff options
| author | sostler <sbostler@gmail.com> | 2010-05-04 00:11:38 -0400 |
|---|---|---|
| committer | sostler <sbostler@gmail.com> | 2010-05-04 00:11:38 -0400 |
| commit | ee124f1a698551e8307176e8dfdfb04aa6535bae (patch) | |
| tree | 09c71dd33d11e12d41eb11eb1ff0496b3dc70f0f | |
| parent | afef6f9e56586a8c5bc01f1dcf6bd3be65abd541 (diff) | |
Added user-accessible pw reset request
| -rw-r--r-- | src/site.clj | 4 | ||||
| -rw-r--r-- | src/user.clj | 4 | ||||
| -rwxr-xr-x | static/index.html | 45 | ||||
| -rw-r--r-- | template/req_reset.st | 69 |
4 files changed, 96 insertions, 26 deletions
diff --git a/src/site.clj b/src/site.clj index 7848dcb..d1175d5 100644 --- a/src/site.clj +++ b/src/site.clj @@ -816,6 +816,9 @@ ORDER BY msg_count DESC") ;; Account resets +(defn reset-request-page [session] + (.toString (fetch-template "req_reset" session))) + (defn reset-request! [session {nick :nick}] (if-let [info (fetch-nick nick)] (let [email (info :email) @@ -1004,6 +1007,7 @@ ORDER BY msg_count DESC") (GET "/directory" (directory session 0)) (GET "/directory/:offset" (directory session (maybe-parse-int (params :offset) 0))) + (GET "/reset-request" (reset-request-page session)) (POST "/reset-request" (reset-request! session params)) (GET "/reset" (reset-page session params)) (POST "/reset" (reset-account! session params)) diff --git a/src/user.clj b/src/user.clj index 9d3060f..b948a8f 100644 --- a/src/user.clj +++ b/src/user.clj @@ -37,6 +37,6 @@ "token" token})) (defn valid-reset-link? [nick token ts] - (if-let [info (fetch-nick nick)] + (if-let [info (and nick (fetch-nick nick))] (and (= token (reset-token (info :nick) (info :hash) ts)) - (>= ts (ms-ago (days 2))))))
\ No newline at end of file + (>= ts (ms-ago (days 2)))))) diff --git a/static/index.html b/static/index.html index 3b6e755..cca686b 100755 --- a/static/index.html +++ b/static/index.html @@ -4,34 +4,30 @@ <title>dump.fm</title> <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> <META NAME="keywords" CONTENT="dump.fm, image chat, realtime, internet 3.0, dump, dump fm, image dump, pictures, image links, image board"> -<META NAME="description" CONTENT="Talk with pictures!"> -<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.4/jquery.min.js"></script> -<script type="text/javascript" src="/static/js/sha1.js"></script> -<script type="text/javascript" src="/static/js/home.js"></script> -<script type="text/javascript" src="/static/js/cookie.js"></script> -<script type="text/javascript" src="/static/js/jcarousellite_1.0.1.pack.js"></script> -<script> -$(document).ready(initLoginForm); - -</script> + <META NAME="description" CONTENT="Talk with pictures!"> + <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.4/jquery.min.js"></script> + <script type="text/javascript" src="/static/js/sha1.js"></script> + <script type="text/javascript" src="/static/js/home.js"></script> + <script type="text/javascript" src="/static/js/cookie.js"></script> + <script type="text/javascript" src="/static/js/jcarousellite_1.0.1.pack.js"></script> + <script> + $(document).ready(initLoginForm); + </script> <script type="text/javascript"> -$(document).ready(function(){ - - jQuery(".btn-slide").click(function(){ +$(document).ready(function() { + jQuery(".btn-slide").click(function() { jQuery("#panel").slideToggle("slow"); jQuery(this).toggleClass("active"); return false; }); - - }); </script> <link rel="stylesheet" type="text/css" href="static/css/reset.css"> <link rel="stylesheet" type="text/css" href="static/css/index.css"> - <link rel="shortcut icon" href="static/favicon.ico"> - <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>dump.fm</title></head> - +<link rel="shortcut icon" href="static/favicon.ico"> +<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> +<title>dump.fm</title></head> </head> <body> @@ -51,7 +47,6 @@ $(document).ready(function(){ <div id="registerbox"> <div id="logo-and-text"> <a href="/"><img src="/static/img/dumpclearlogo2.png"></a> - <div align="center"> <a href="/register" style="text-decoration:none;">Click here to Register!</a> <br> </div> @@ -61,13 +56,15 @@ $(document).ready(function(){ <input id="passwordInputLabel" name="passwordInputLabel" size="17" type="text" class="invisible"> <input type="password" id="passwordInput" size="17" /><br /> - - <!-- <br /><a id="signin-submit">Sign In</a> --> <input id="signin-submit" value="Sign In" /> - <div id="remember"><label> - <input checked="checked" type="checkbox" name="rememberme" id="remembermeInput" /> - Remember Me + <div id="remember"><label> + <input checked="checked" type="checkbox" name="rememberme" id="remembermeInput" /> + Remember Me </label></div> +<div style="display: none"> + <br> + <a href="/reset" style="text-decoration:none;">Forgot your password?</a><br> + </div> </div> </div> diff --git a/template/req_reset.st b/template/req_reset.st new file mode 100644 index 0000000..4089298 --- /dev/null +++ b/template/req_reset.st @@ -0,0 +1,69 @@ +<html> + <head> + <title>dump.fm Password Reset</title> + + $head()$ + <style> + #main { + padding: 100px 2em 0px 2em; + } + label { + float: left; + width: 150px; + } + .error { + border: 1px solid red; + } + </style> + <script> + jQuery(function() { + jQuery("#submit").click(function() { + var nick = jQuery('#nick').val(); + jQuery('#submit').attr('disabled', 'disabled'); + if (!nick) { + jQuery('#nick').focus().addClass('error'); + return; + } + + var error = function(resp) { + var respText = resp.responseText ? resp.responseText.trim() : false; + if (respText == 'NO_NICK') { + alert('Sorry, no such user exists'); + } else { + alert('Error sending request: ' + respText); + } + jQuery('#submit').removeAttr('disabled'); + }; + + var success = function() { + alert('Email sent!'); + location.href = "/"; + }; + + jQuery.ajax({ type: 'POST', + timeout: 5000, + url: '/reset-request', + data: {'nick': nick }, + success: success, + error: error }); + }); + }); + </script> + </head> + <body> + $banner()$ + <div id="main"> + <div id="feedback" style="display: none; color: red; margin-bottom: 2em;"></div> + <h1>Forgot your password?</h1> + <br> + <div> + Enter your nick, and we'll send you an email to reset your password. + </div> + <br /> + <label>Nick:</label> + <input type="text" id="nick"> + <br /> + <input type="submit" value="Reset password" id="submit"> + </div> + </body> +</html> |
