Changeset 1177
- Timestamp:
- 10/20/06 01:36:05 (2 years ago)
- Files:
-
- feedmelinks/admin/bulk-snuff.php (added)
- feedmelinks/admin/clear-logged-IPs.php (added)
- feedmelinks/admin/expire-old-users.php (added)
- feedmelinks/admin/index.php (modified) (1 diff)
- feedmelinks/admin/snuff.php (added)
- feedmelinks/categorize.php (modified) (1 diff)
- feedmelinks/diespammersdie (added)
- feedmelinks/diespammersdie/TOS.inc.php (added)
- feedmelinks/diespammersdie/index.php (added)
- feedmelinks/diespammersdie/neck-before-the-sword.php (added)
- feedmelinks/diespammersdie/report.php (added)
- feedmelinks/img/fumigating.jpg (added)
- feedmelinks/import/present-clean-pre-flight-input.inc.php (modified) (2 diffs)
- feedmelinks/import/upload-form.inc.php (modified) (1 diff)
- feedmelinks/login.php (modified) (11 diffs)
- feedmelinks/modules/my-recent.inc.php (modified) (2 diffs)
- feedmelinks/modules/recent-with-times.inc.php (modified) (1 diff)
- feedmelinks/modules/utils.inc.php (modified) (10 diffs)
- feedmelinks/modules/view-link.inc.php (modified) (2 diffs)
- feedmelinks/style/new-portal.css (modified) (2 diffs)
- feedmelinks/testing/enabled.php (added)
- feedmelinks/testing/ip.php (added)
- feedmelinks/thanks.php (modified) (1 diff)
- feedmelinks/users.php (modified) (3 diffs)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
feedmelinks/admin/index.php
r993 r1177 32 32 <b>TOOLS</b>:<br /> 33 33 <ul> 34 <li><a href="/admin/expire-old-users">expire old users</a></li> 35 <li><a href="/admin/snuff">snuff a user</a></li> 36 <li><a href="/admin/bulk-snuff">snuff a batch of users</a></li> 37 <li><a href="/admin/clear-logged-IPs">clear logged IP addresses</a></li> 34 38 <li><a href="/admin/FUQ">FUQ management & testing</a><br /></li> 35 39 <li><a href="http://six.pairlist.net/mailman/admin/gourmands">administer the FML mailing list</a><br /></li> feedmelinks/categorize.php
r1045 r1177 62 62 63 63 <div class="warning" style="text-align: center;"> 64 <h1>Double-Link!</h1> 64 65 <h3> 65 <a href="/<%= $li['id'] %>"><%= $li['name'] %></a>66 Link: <a href="/<%= $li['id'] %>"><%= $li['name'] %></a> 66 67 <p /> 67 68 <img src="/img/doublemint-twins.jpg" border="2" /> feedmelinks/import/present-clean-pre-flight-input.inc.php
r1166 r1177 19 19 new tags to be created: 20 20 </div> 21 <form name="tags"> 21 22 <% 22 23 for( $i = 0; $i < $ts; $i++ ) { … … 27 28 } else { 28 29 ++$num_tags; 29 echo row_wrap( " <span class='hot'> $line</span>", ($i % 2 == 0) ? 1 : 0 );30 echo row_wrap( " <span class='hot'><label><!-- input type='checkbox' checked='checked' name='tag' value='$line' /-->Create tag: </label> $line</span>", ($i % 2 == 0) ? 1 : 0 ); 30 31 } 31 32 echo "</div>\n"; 32 33 } 33 34 %> 35 </form> 34 36 </div> 35 37 feedmelinks/import/upload-form.inc.php
r858 r1177 10 10 11 11 12 <input class="default button" type="submit" value="Start Upload" />12 <input style="padding: 0.4em; font-size: 150%;" class="default button" type="submit" value="Start Upload" /> 13 13 </form> 14 14 feedmelinks/login.php
r1163 r1177 2 2 # $Id$ 3 3 4 $debug = 0;4 #$debug = 0; 5 5 6 6 include_once( "modules/utils.inc.php" ); … … 32 32 $dbUserId = mysql_result($q,$i,"userId"); 33 33 if( ! strncmp( urlencode( $password ), $dbPassword, 16 )) { 34 $authenticated = 1; 35 $sessionUserId = $dbUserId; 36 37 setCookie( 'c_uid', $dbUserId, time()+60*60*24*69, '/', get_cookie_domain() ); 38 setCookie( 'c_pass_token', md5( getPasswdForUser( $sessionUserId )), time()+60*60*24*69, '/', get_cookie_domain() ); 39 40 if( $debug ) { 41 e( "auth challenge successful, authenticating you as $sessionUserId" ); 42 } 43 44 if( $debug ) { 45 e( "just set cookies:" ); 46 e( " setCookie( 'c_uid', $dbUserId, " . (time()+60*60*24*69) . ", '/', " . get_cookie_domain() . " );" ); 47 e( " setCookie( 'c_pass_token', " . (md5( getPasswdForUser( $sessionUserId ))) . ", " . (time()+60*60*24*69) . ", '/', " . get_cookie_domain() . " );" ); 48 } 34 if( user_enabled( $userId )) { 35 36 $authenticated = 1; 37 $sessionUserId = $dbUserId; 38 setCookie( 'c_uid', $dbUserId, time()+60*60*24*69, '/', get_cookie_domain() ); 39 setCookie( 'c_pass_token', md5( getPasswdForUser( $sessionUserId )), time()+60*60*24*69, '/', get_cookie_domain() ); 40 if( $debug ) { e( "auth challenge successful, authenticating you as $sessionUserId" ); } 41 42 if( $debug ) { 43 e( "just set cookies:" ); 44 e( " setCookie( 'c_uid', $dbUserId, " . (time()+60*60*24*69) . ", '/', " . get_cookie_domain() . " );" ); 45 e( " setCookie( 'c_pass_token', " . (md5( getPasswdForUser( $sessionUserId ))) . ", " . (time()+60*60*24*69) . ", '/', " . get_cookie_domain() . " );" ); 46 } 49 47 50 48 %> … … 79 77 } 80 78 } 79 } else { 80 log_mesg_to( "WARN. attempted login from invalidated user $userId", "global" ); 81 warn( "Your account is temporarily DISABLED. Check your email for a validation code."); 82 return; 83 } 81 84 } else { 82 85 if( $debug ) { … … 118 121 } else { 119 122 123 log_mesg_to( "successfully created new user $userId", "global" ); 124 120 125 $shouldShowLoginForm = 0; 121 126 $shouldShowCreateForm = 0; … … 124 129 125 130 $headers = ""; 131 $code = get_validation_code( $userId ); 126 132 $subject = "Welcome, Linkster!"; 127 133 $body = "Welcome to Feed Me Links! … … 129 135 Your feedmelinks user name is: $userId. 130 136 Your feedmelinks password is: $password 137 138 To start using Feed Me Links, you need to validate your account by clicking: http://feedmelinks.com/diespammersdie/?user=$userId&code=$code 131 139 132 140 Go to $site to log in and start sharing links. … … 200 208 201 209 <br /> 202 <form name="login_form" action="<%= $page %>" >210 <form name="login_form" action="<%= $page %>" method="POST"> 203 211 <input type="hidden" name="op" value="login" /> 204 212 <input type="hidden" name="debug" value="<%= $debug %>" /> … … 264 272 <br /> 265 273 <br /> 266 <!-- <img src="http://www.klot.net/pictures/modifica/modifi07.jpg" /> --> 267 <br /> 268 <!-- "The Mentalist, from his pulpit onstage..." --> 274 <br /> 275 269 276 <% } else if( $shouldShowCreateForm ) { 270 277 if( ! $errors ) … … 304 311 errors += "Please double-check your email address.<br />\n"; 305 312 } 306 307 313 308 if( ! errors ) 314 if( ! errors ) { 309 315 return true; 310 else {316 } else { 311 317 f.errors.value = errors; 312 318 //return false; … … 317 323 </script> 318 324 325 <%= $debug == 1 ? "<h1 style='color: red;'>* * * DEBUG IS ON * * *</h1>" : "" %> 319 326 <% if( $errors ) { %> 320 327 … … 326 333 327 334 <% } %> 328 <form name="create_account_form" action="<%= $page %>" method="get" onSubmit="return(validateForm(this));"> 329 <input type="hidden" name="op" value="createAccount" /> 330 <input type="hidden" name="errors" value="" /> 335 336 <form name="create_account_form" action="<%= $page %>" method="POST" onSubmit="return(validateForm(this));"> 337 <input type="hidden" name="debug" value="<%= $debug %>" /> 338 <input type="hidden" name="op" value="createAccount" /> 339 <input type="hidden" name="errors" value="" /> 331 340 <table> 332 341 <tr> feedmelinks/modules/my-recent.inc.php
r672 r1177 8 8 $con_myRecent = mysql_connect(); 9 9 mysql_selectdb( getDBName() ); 10 $MAX_LINKS = $max ? $max :15;10 $MAX_LINKS = 15; 11 11 12 12 if( $u || $who ) { … … 39 39 <% if( $numLinks > 0 ) { 40 40 $qs = $viewedByOwner 41 ? "SELECT * from links WHERE submitter='$user' ORDER BY createDate DESC "42 : "SELECT * from links WHERE submitter='$user' AND isPrivate is NULL ORDER BY createDate DESC ";41 ? "SELECT * from links WHERE submitter='$user' ORDER BY createDate DESC LIMIT $MAX_LINKS" 42 : "SELECT * from links WHERE submitter='$user' AND isPrivate is NULL ORDER BY createDate DESC LIMIT $MAX_LINKS"; 43 43 $q = mysql_query( $qs ); 44 44 if( $q ) { feedmelinks/modules/recent-with-times.inc.php
r554 r1177 45 45 } 46 46 </script> 47 <form name="cruiser_form" >47 <form name="cruiser_form" action="/link-cruiser"> 48 48 <input type="hidden" name="start" value="<%= $start %>"> 49 49 <input type="button" value="« BACKWARD!" onClick="go( -1 );"> feedmelinks/modules/utils.inc.php
r1173 r1177 4 4 include_once( "env.inc.php" ); 5 5 include( get_root() . "/modules/prep-cache.inc.php" ); 6 7 function progress( $mesg ) { 8 ob_start(); 9 %> 10 <div class="progress"> 11 <h3><%= $mesg %></h3> 12 <img src="/img/aqua-progressbar.gif" /> 13 </div> 14 <% 15 return ob_get_clean(); 16 } 17 18 function fire( $sub, $mesg ) { 19 $success = mail( get_maintainer_email(), "WHAT THE CHOPSTICKS!?! $sub", $mesg, get_mail_headers()); 20 } 21 22 function report_spammer( $alleged_spammer, $reporter ) { 23 $body = " 24 25 $alleged_spammer was reported as a spammer (gasp!). 26 http://feedmelinks.com/u/$alleged_spammer 27 28 -- 29 30 reported by $reporter 31 http://feedmelinks.com/u/$reporter 32 33 snuff them? 34 http://feedmelinks.com/admin/snuff?user=$alleged_spammer 35 "; 36 $headers = get_mail_headers(); 37 $success = mail( get_maintainer_email(), "Potential spammer: $alleged_spammer reported by $reporter", $body, $headers); 38 39 return "Filed Successfully!"; 40 if( $success ) 41 log_mesg_to( "user $alleged_spammer reported as a spammer by $reporter", "global" ); 42 } 43 44 function user_enabled( $user ) { 45 $disabled = getFieldForUser( $user, "disabled" ); 46 return (!$disabled || $disabled == "NULL") ? true : false; 47 } 48 49 function enable_user( $user ) { 50 $q = run_query( getQuery( "enable_user", $user )); 51 return "success"; # FIXME: replace with a real status 52 } 53 54 function disable_user( $user ) { 55 $q = run_query( getQuery( "disable_user", $user )); 56 log_mesg_to( "disabled user $user", "global" ); 57 return "disabled user"; # FIXME: replace with a real status 58 } 59 60 function snuffed( $u ) { 61 return getFieldForUser( $u, "snuffed" ); 62 } 63 64 function snuff_user( $user ) { 65 if( is_privileged_importer( $user ) || isSuperUser( $user )) 66 return "you cannot snuff a superuser."; 67 68 # disable their login 69 disable_user( $user ); 70 71 # reset their password to garbage 72 $snuff_pass = get_validation_code( $user . "-SNUFFED" ); 73 $q = run_query( getQuery( "snuff_pass", $user, $snuff_pass )); 74 75 # mark all their tags private 76 $q = run_query( getQuery( "privatize_tags", $user )); 77 78 # mark all their links private 79 $q = run_query( getQuery( "privatize_links", $user )); 80 81 # make their user directory un-readable 82 $f = get_user_folder( $user ); 83 if( is_dir( $f )) { 84 shell_exec( "cp " . get_webserver_root() . "/admin/.htaccess $f/" ); 85 } 86 87 # mark them as snuffed 88 $q = run_query( getQuery( "snuff_user", $user )); 89 90 log_mesg_to( "snuffed out user $user", "global" ); 91 echo get_snuffed_mesg(); 92 %> 93 94 <a href="/u/<%= $user %>">Done. Check your work</a>. 95 96 <% 97 return "success."; 98 } 99 100 function get_snuffed_mesg() { 101 ob_start(); 102 %> 103 <ol> 104 <li>we changed their password, </li> 105 <li>disabled their ability to log in,</li> 106 <li>hid their tags,</li> 107 <li>hid their links,</li> 108 <li>censored their profile page,</li> 109 <li>locked their user directory, and</li> 110 <li>marked them as a snuffed user</li> 111 </ol> 112 <% 113 return ob_get_clean(); 114 } 115 116 function relight_user( $user ) { 117 return "not yet implemented"; 118 log_mesg_to( "re-lit user $user", "global" ); 119 } 120 121 function get_salt( $s ) { 122 return "40ape"; # FIXME: hardcoded few now 123 } 124 125 function get_validation_code( $user ) { 126 return md5( $user . get_salt( $user )); 127 } 6 128 7 129 function log_mesg_to( $mesg, $to ) { … … 17 139 } 18 140 141 function get_ip() { 142 return getenv(HTTP_X_FORWARDED_FOR) ? getenv(HTTP_X_FORWARDED_FOR) : getenv(REMOTE_ADDR); 143 } 19 144 20 145 function notify_added_as_peep( $u, $by ) { … … 106 231 if( ! $q ) 107 232 return undefined; 108 109 $d0 = mysql_result($q,0); 110 $d1 = mysql_result($q,1); 233 return diff_driver( mysql_result($q,0), mysql_result($q,1)); 234 } 235 236 function diff_driver( $d0, $d1 ) { 111 237 $diff = round( diff_in_secs( $d0, $d1 ) / 60 / 60 / 24, 4); 112 238 return $diff > 0 ? $diff : 0; 239 } 240 241 function get_now_db() { 242 return get_simple_rs( "SELECT now() AS now" ); 113 243 } 114 244 … … 832 962 function get_recent_for_user_footer_cb() { return "<a href='/u/" . func_get_arg( 0 ) . "'>See more of " . func_get_arg( 0 ) . "'s links...</a>"; } 833 963 964 function get_contacts_links_rss( $users, $links_per_user ) { 965 966 #ksort($users); 967 foreach ($users as $user => $junk) { 968 echo "\n$user"; 969 } 970 971 return; 972 973 974 $n = 3; # FIXME: number of users 975 for( $i = 0; $i < $n; $i++ ) { 976 %> 977 978 <item> 979 <title>LINK_TITLE</title> 980 <link>LINK_URL</link> 981 <description>added by: LINK_USERNAME</description> 982 <guid isPermaLink="true">http://LINK_URL</guid> 983 <content:encoded> 984 LINK_DESCRIPTION 985 </content:encoded> 986 <dc:subject> 987 Tagged with: 988 <a rel="tag" href="LINK_TAG_URL_1">LINK_TAG_NAME_1</a> 989 <a rel="tag" href="LINK_TAG_URL_2">LINK_TAG_NAME_2</a> 990 </dc:subject> 991 <dc:date>LINK_DC_DATE</dc:date> 992 </item> 993 </channel> 994 <% 995 } 996 } 997 834 998 function get_contacts_links_html( $show_summary ) { 835 999 $cache = get_cache(); … … 1417 1581 LEFT JOIN linksCategoriesXRef ON links.ID = linksCategoriesXRef.linkID 1418 1582 WHERE linksCategoriesXRef.linkID IS NULL "; 1583 1584 } else if( $argWhichQuery == "log_ip" ) { 1585 return " 1586 INSERT INTO spam_IPs VALUES ( '" . urlencode($args[1]) . "', '" . urlencode($args[2]) . "', '" . urlencode($args[3]) . "', NULL, NULL ) "; 1587 1588 } else if( $argWhichQuery == "most_recent_link_for_user" ) { 1589 return " 1590 SELECT createDate, max(id) AS m FROM links WHERE submitter = '" . urlencode($args[1]) . "' group by submitter, createDate order by m desc limit 1;"; 1591 1592 } else if( $argWhichQuery == "multiple_accounts_from_this_ip" ) { 1593 return " 1594 SELECT * FROM spam_IPs WHERE ip = '" . urlencode($args[1]) . "';"; 1595 1596 } else if( $argWhichQuery == "enable_user" ) { 1597 return " 1598 UPDATE linksUsers SET disabled = 'NULL' WHERE userid = '" . urlencode($args[1]) . "';"; 1599 1600 } else if( $argWhichQuery == "disable_user" ) { 1601 return " 1602 UPDATE linksUsers SET disabled = 1 WHERE userid = '" . urlencode($args[1]) . "';"; 1603 1604 } else if( $argWhichQuery == "snuff_pass" ) { 1605 return " 1606 UPDATE linksUsers SET password = '" . urlencode($args[2]) . "' WHERE userid = '" . urlencode($args[1]) . "';"; 1607 1608 } else if( $argWhichQuery == "snuff_user" ) { 1609 return " 1610 UPDATE linksUsers SET snuffed = 1 WHERE userid = '" . urlencode($args[1]) . "';"; 1611 1612 } else if( $argWhichQuery == "privatize_tags" ) { 1613 return " 1614 UPDATE linksGroups SET isPrivate = 1 WHERE userid = '" . urlencode($args[1]) . "';"; 1615 1616 } else if( $argWhichQuery == "privatize_links" ) { 1617 return " 1618 UPDATE links SET isPrivate = 1 WHERE submitter = '" . urlencode($args[1]) . "';"; 1619 1620 } else if( $argWhichQuery == "all_users" ) { 1621 return " 1622 SELECT distinct(userid) FROM linksUsers WHERE disabled is NULL;"; 1419 1623 1420 1624 } else if( $argWhichQuery == "get_fuq" ) { … … 1899 2103 function getColorKey() { 1900 2104 return; 2105 } 2106 2107 # judge, jury, and executioner 2108 function isJJE( $u ) { 2109 if( $u == "jm3" ) 2110 return true; 2111 else 2112 return false; 1901 2113 } 1902 2114 … … 2163 2375 2164 2376 function addUser( $argUserId, $argEmail, $argPassword, $argName ) { 2377 2378 # check to see if weve seen any new accounts from this IP recently 2379 $ip = get_ip(); 2380 $q = run_query( getQuery( "multiple_accounts_from_this_ip", $ip )); 2381 2382 $num_rows = mysql_num_rows($q); 2383 if( $num_rows > 1 ) { 2384 fire( "Possible spammer-birth in progress!", "Multiple accounts being requested from the same IP ($ip) -- user: $argUserId, $argEmail" ); 2385 log_mesg_to( "WARN. potential spammer $argUserId ($argEmail) creating multiple accounts from the same IP", "global" ); 2386 $q = run_query( getQuery( "log_ip", $argUserId, $argEmail, $ip )); 2387 return; 2388 } else { 2389 # if not, log this IP in case we see it again: 2390 $q = run_query( getQuery( "log_ip", $argUserId, $argEmail, $ip )); 2391 } 2392 2165 2393 $userId = urlencode( $argUserId ); 2166 2394 $email = urlencode( $argEmail ); … … 2168 2396 $name = urlencode( $argName ); 2169 2397 2170 $qs = "INSERT INTO linksUsers VALUES(NULL,'$userId','$email', '$password', '$name','', 2 );";2398 $qs = "INSERT INTO linksUsers VALUES(NULL,'$userId','$email', '$password', '$name','', 2, 1, NULL);"; 2171 2399 2172 2400 l( "new_user: $argUserId, $argEmail" ); … … 2637 2865 mysql_selectdb( getDBName() ); 2638 2866 2639 $qs = "SELECT password fromlinksUsers WHERE userid = '$argUser'";2867 $qs = "SELECT password FROM linksUsers WHERE userid = '$argUser'"; 2640 2868 $q = mysql_query( $qs ); 2641 2869 if( $q ) … … 2695 2923 mysql_selectdb( getDBName() ); 2696 2924 $qs = "SELECT $field from links WHERE ID = $argId"; 2925 $q = mysql_query( $qs ); 2926 if( $q ) 2927 $numRows = mysql_num_rows($q); 2928 conClose(); 2929 if( $numRows ) 2930 return mysql_result($q, $i, $field); 2931 } 2932 2933 function getFieldForUser( $user, $field ) { 2934 mysql_connect(); 2935 mysql_selectdb( getDBName() ); 2936 $qs = "SELECT $field from linksUsers WHERE userid = '$user'"; 2697 2937 $q = mysql_query( $qs ); 2698 2938 if( $q ) feedmelinks/modules/view-link.inc.php
r889 r1177 16 16 $createDate = formatTS( $link_info['createDate'] ); 17 17 $isPrivate = $link_info['isPrivate']; 18 19 if( $isPrivate && $submitter != $u ) 20 return; 18 21 19 22 $numGroups = 0; … … 24 27 25 28 %> 26 27 29 28 30 <div class="attention" style="width: 45em;"> feedmelinks/style/new-portal.css
r1171 r1177 1 .progress { 2 background-color: white; 3 width: 300px; 4 text-align: center; 5 padding: 10px; 6 border: 1px solid gray; 7 } 8 1 9 .b { 2 10 font-weight: bold; … … 7 15 font-weight: bold; 8 16 color: black; 17 } 18 19 /* for buttons: */ 20 .big { 21 padding: 0.4em; 22 font-size: 150%; 9 23 } 10 24 feedmelinks/thanks.php
r1163 r1177 55 55 56 56 <div id="controls"> 57 <input type="submit" value="Log in to get started »" class="idiotproof" />57 Please check your email nobox to validate your account and start linking. 58 58 </div> 59 59 feedmelinks/users.php
r1078 r1177 51 51 $numRows = mysql_num_rows($q); 52 52 53 # DESTROY SNUFFED USERS 54 if( mysql_result($q,$i,"disabled") == 1 ) { 55 if( snuffed( $userId )) { 56 %> 57 <center> 58 <% warn( "<h3>This user has been Snuffed Out™</h3>" ) %> 59 <a href="http://flickr.com/photos/petroleumjelliffe/170473487/"> 60 <img src="http://static.flickr.com/76/170473487_bb5a3e6a10.jpg" /> 61 </a> 62 <p /> 63 photo by <a href="http://flickr.com/photos/petroleumjelliffe/">petroleumjelliffe</a> 64 </center> 65 <p /> 66 <big> 67 <%= get_snuffed_mesg() %> 68 (You're welcome :-) 69 </big> 70 71 <% 72 return; 73 } 74 } 75 76 53 77 if( $numRows ) { 54 78 $i = 0; … … 76 100 <b><%= encodeAddress( $email, $userId ) %></b></big> 77 101 <%= get_verbose_contact_link( $userId ) %> 102 103 <% if( $u && $u != $userId ) { %> 104 <p> 105 <form name="flag_user_form" action="/diespammersdie/report" method="POST"> 106 <input type="hidden" name="user" value="<%= $userId %>" /> 107 <input type="submit" value="Report this user as a spammer?" /> 108 </form> 109 </p> 110 <% } %> 111 112 <% if( isJJE( $u ) && $u != $userId ) { %> 113 <p> 114 <form name="snuff_user_form" action="/admin/snuff" method="POST" style="background-color: red; padding: 1em;"> 115 <input type="hidden" name="user" value="<%= $userId %>" /> 116 <input type="submit" style="background-color: red;" value="End this user's pathetic life?" /> 117 </form> 118 </p> 119 <% } %> 120 78 121 <p> 79 122 Master of <%= $numLinks %> links and <%= $numFolders %> … … 94 137 <img src="<%= get_profile_image( $userId ) %>" width="200" /> 95 138 139 <!-- 96 140 <br /> 97 141 <big><b><a href="/comments?who=<%= $userId %>">comments by and about <%= $userId == $u ? "you" : $userId %></a></b></big> 142 --> 98 143 </div> 99 144