summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorsostler <sbostler@gmail.com>2010-05-04 00:11:38 -0400
committersostler <sbostler@gmail.com>2010-05-04 00:11:38 -0400
commitee124f1a698551e8307176e8dfdfb04aa6535bae (patch)
tree09c71dd33d11e12d41eb11eb1ff0496b3dc70f0f
parentafef6f9e56586a8c5bc01f1dcf6bd3be65abd541 (diff)
Added user-accessible pw reset request
-rw-r--r--src/site.clj4
-rw-r--r--src/user.clj4
-rwxr-xr-xstatic/index.html45
-rw-r--r--template/req_reset.st69
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>