summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorgumi <git@gumi.ca>2019-06-29 17:04:09 +0000
committerroot <root@dezilaromed.themanaworld.org>2019-06-29 17:04:09 +0000
commita4f747c5de3b831ba3c1d387817fdc75be25e1cc (patch)
tree5cd1a7ef84885fcd3efcdddef923d1864de5f610
parente41baa4c3aeb5f2b05fb928c1bf13e6a9bb130a7 (diff)
downloadwebsite-a4f747c5de3b831ba3c1d387817fdc75be25e1cc.tar.gz
website-a4f747c5de3b831ba3c1d387817fdc75be25e1cc.tar.bz2
website-a4f747c5de3b831ba3c1d387817fdc75be25e1cc.tar.xz
website-a4f747c5de3b831ba3c1d387817fdc75be25e1cc.zip
move away from PHP, use static pages with the api
-rw-r--r--.gitignore5
-rwxr-xr-xbin/create_account.sh94
-rw-r--r--default.css15
-rw-r--r--downloads.php33
l---------favicon.ico1
-rw-r--r--includes/common.php40
-rw-r--r--includes/conf/mysql.conf.php.example8
-rw-r--r--includes/email.php63
-rwxr-xr-xincludes/fetch-news.sh8
-rw-r--r--includes/libs/libmysql.php89
-rw-r--r--includes/models/account.php114
-rw-r--r--includes/news.php1
-rw-r--r--index.php6
-rw-r--r--recaptcha-php/LICENSE22
-rw-r--r--recaptcha-php/README7
-rw-r--r--recaptcha-php/example-captcha.php37
-rw-r--r--recaptcha-php/example-mailhide.php17
-rw-r--r--recaptcha-php/keys.php.example5
-rw-r--r--recaptcha-php/recaptchalib.php279
-rw-r--r--registration.php150
-rw-r--r--robots.txt5
-rw-r--r--rusha.min.js3
-rw-r--r--thank_you.php11
23 files changed, 84 insertions, 929 deletions
diff --git a/.gitignore b/.gitignore
index 5f69a57..0ebeea6 100644
--- a/.gitignore
+++ b/.gitignore
@@ -2,3 +2,8 @@
/news.html
# generated, I think
/images/thumbs
+/news.rss
+
+# part of another repo
+/register
+/recover
diff --git a/bin/create_account.sh b/bin/create_account.sh
deleted file mode 100755
index f073a48..0000000
--- a/bin/create_account.sh
+++ /dev/null
@@ -1,94 +0,0 @@
-#!/bin/bash
-# Run every minute
-
-MAIL_FROM='user@host'
-MAIL_FROM_NAME='The Mana World server'
-MAIL_SUBJECT='The Mana World account registration'
-
-
-SQL_HOST='localhost'
-SQL_USER='user'
-SQL_PASSWORD='password'
-SQL_DATABASE='db'
-SQL_TABLE='table'
-
-LADMIN_DIR='/path/to/tmwserver/login/'
-LADMIN_BIN='tmwa-admin'
-
-### end configuration
-
-
-mail_command()
-{
-# no arguments; takes a message on stdin
- /usr/sbin/sendmail -t
-}
-
-die()
-{
- echo "$@"
- exit 1
-}
-
-one_word()
-{
- test $# -eq 1 || die "Error: evil spaces!"
-}
-
-one_word $SQL_HOST
-one_word $SQL_USER
-one_word $SQL_PASSWORD
-one_word $SQL_DATABASE
-one_word $SQL_TABLE
-
-send_email()
-{
-# Note: USERNAME and EMAIL are captured
-mail_command << __EOF__
-From: $MAIL_FROM_NAME <$MAIL_FROM>
-To: $USERNAME <$EMAIL>
-Subject: $MAIL_SUBJECT
-
-Hello $USERNAME,
-
-$@
-__EOF__
-}
-
-do_mysql()
-{
- # SQL statements on stdin
- mysql --host="$SQL_HOST" --user="$SQL_USER" --password="$SQL_PASSWORD" "$SQL_DATABASE"
-}
-
-frob_accounts()
-{
- IFS=$'\t'
- while read ID USERNAME PASSWORD EMAIL GENDER
- do
- if test "$GENDER" = '1'; then GENDER=M; fi
- if test "$GENDER" = '2'; then GENDER=F; fi
-
- RESULT=$(cd $LADMIN_DIR; $LADMIN_BIN <<< "create $USERNAME $GENDER $EMAIL $PASSWORD" 2>&1)
- echo RESULT: "$RESULT"
- if grep -q 'successfully created' <<< "$RESULT"
- then
- send_email 'Your account was created successfully. Have fun playing The Mana World!'
- STATE=1
- else
- send_email $'Something went wrong when automatically creating your account.\nError message:' "$RESULT"
- STATE=2
- fi
- do_mysql << __EOF__
-update $SQL_TABLE set state = $STATE, password = '' where id = $ID
-__EOF__
- done
-}
-
-do_mysql << __EOF__ | tail -n+2 | frob_accounts
-select id, username, password, email, gender
-from $SQL_TABLE
-where state = 0
-__EOF__
-
-echo Everything is Ok.
diff --git a/default.css b/default.css
index 42bbdef..25be71e 100644
--- a/default.css
+++ b/default.css
@@ -234,6 +234,21 @@ h1 {
vertical-align: text-bottom;
}
+.tmwa-status, .tmwa-status:visited {
+ display: block;
+ color: green;
+ font-family: sans-serif;
+ /*font-size: 9px;*/
+ padding-top: 9px;
+ text-align: center;
+ font-weight: bold;
+
+}
+
+.tmwa-status.offline, .tmwa-status.offline:visited {
+ color: red;
+}
+
#contents_leftrepeat {
background-image: url(images/contents_leftrepeat.png);
background-repeat: repeat-y;
diff --git a/downloads.php b/downloads.php
index 561153b..55a15f3 100644
--- a/downloads.php
+++ b/downloads.php
@@ -8,32 +8,32 @@
</div>
<h3>ManaPlus client</h3>
+<br>
<p>The recommended client is available on the <a href="http://manaplus.evolonline.org/">ManaPlus website</a>.</p>
+<br><br><br>
<h3>The Mana World packages</h3>
-
+<br>
<p>The Mana World packages are available for many platforms. These are based on
the ManaPlus client, but have a different default skin and will show up
as "The Mana World" in the application menu.</p>
-
+<br>
<table style="border-width: 0px; width: 50%; margin-bottom: 0px; margin-top: 0px;" border="0" cellpadding="0" cellspacing="0">
<tbody><tr><td style="border-width: 0px;" width="50%">
-<div class="release"><img src="images/ico-win.png"> <a href="http://download.evolonline.org/manaplus/tmw/tmw-win32.exe"><b>Windows installer (ManaPlus)</b></a></div>
-<div class="release"><img src="images/ico-osx.png"> <a href="http://download3.evolonline.org/manaplus/macosx/manaplus-lion.dmg"><b>ManaPlus MacOS X package (lion)</b></a></div>
-<div class="release"><img src="images/ico-osx.png"> <a href="http://download3.evolonline.org/manaplus/macosx/manaplus-snowleopard.dmg"><b>ManaPlus MacOS X package (snow leopard)</b></a></div>
-<div class="release"><img src="images/ico-deb.png"> <a href="http://packages.debian.org/manaplus"><b>Debian package</b></a></div>
-<div class="release"><img src="images/ico-ubuntu.png"> <a href="http://packages.ubuntu.com/manaplus"><b>Ubuntu package</b></a></div>
-<div class="release"><img src="images/ico-fedora.png"> <a href="https://apps.fedoraproject.org/packages/manaplus"><b>Fedora package</b></a></div>
+<div class="release"><img src="images/ico-win.png"> <a href="https://download.tuxfamily.org/manaplus/download/manaplus-win64.exe"><b>Windows installer (ManaPlus)</b></a></div>
+<div class="release"><img src="images/ico-osx.png"> <a href="https://download.tuxfamily.org/manaplus/download/manaplus.dmg"><b>macOS package</b></a></div>
+<div class="release"><img src="images/ico-deb.png"> <a href="https://manaplus.org/repository"><b>Debian package</b></a></div>
+<div class="release"><img src="images/ico-ubuntu.png"> <a href="https://manaplus.org/ubuntu"><b>Ubuntu package</b></a></div>
+<div class="release"><img src="images/ico-fedora.png"> <a href="https://manaplus.org/fedora"><b>Fedora package</b></a></div>
<div class="release"><img src="images/ico-android.png"> <a href="https://play.google.com/store/apps/details?id=org.evolonline.beta.manaplus"><b>Android App (ManaPlus)</b></a></div>
-<div class="release"><img src="images/ico-gentoo.png"> <a href="http://packages.gentoo.org/package/games-rpg/manaplus"><b>Gentoo eBuild</b></a></div>
-<div class="release"><img src="images/ico-openbsd.png" width="16" height="16"> <a href="http://openports.se/games/manaplus"><b>OpenBSD port</b></a></div>
-<div class="release"><img src="images/ico-freebsd.png" width="16" height="16"> <a href="http://www.freshports.org/games/manaplus/"><b>FreeBSD port</b></a></div>
+<div class="release"><img src="images/ico-openbsd.png" width="16" height="16"> <a href="https://manaplus.org/openbsd"><b>OpenBSD port</b></a></div>
+<div class="release"><img src="images/ico-freebsd.png" width="16" height="16"> <a href="https://manaplus.org/freebsd"><b>FreeBSD port</b></a></div>
</td></tr>
</tbody></table>
-<p>For packagers (or for users who're interested), the branding files can be
+<!--<p>For packagers (or for users who're interested), the branding files can be
downloaded separately:</p>
<table style="border-width: 0px; width: 50%; margin-bottom: 0px; margin-top: 0px;" border="0" cellpadding="0" cellspacing="0">
@@ -44,16 +44,17 @@
<p>For older versions please see our <a href="https://sourceforge.net/projects/themanaworld/files/">files
page</a> on SourceForge. Note however that these releases are no longer supported and
-likely to no longer work with our server.</p>
+likely to no longer work with our server.</p> -->
+<br><br>
<h3>Music</h3>
-
+<br>
<p>We no longer recommend music be installed directly,
as it easily becomes out-of-date.</p>
<p>To enable music in the client, make sure that "Download Music" is checked
in the Audio tab of the Setup window.</p>
-<h3>Development versions</h3>
+<!--<h3>Development versions</h3>
<p>The latest version of the ManaPlus client is developed as part of the
<a href="http://manaplus.evolonline.org/">ManaPlus project</a> and is available from the
@@ -68,7 +69,7 @@ git clone git://gitorious.org/manaplus/manaplus.git
<p>For more instructions and information about other projects like the server
and the dynamic data, please check our
<a href="http://wiki.themanaworld.org/index.php/Git_repository">Git wiki
-page</a>.
+page</a>. -->
<?php
placeFooter();
diff --git a/favicon.ico b/favicon.ico
new file mode 120000
index 0000000..c15aef3
--- /dev/null
+++ b/favicon.ico
@@ -0,0 +1 @@
+/var/www/wiki/favicon.ico \ No newline at end of file
diff --git a/includes/common.php b/includes/common.php
index ea8a63f..d1eec1e 100644
--- a/includes/common.php
+++ b/includes/common.php
@@ -13,6 +13,13 @@ function placeHeader($page_title)
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
+<!-- Google Tag Manager -->
+<script>(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start':
+new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0],
+j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src=
+'//www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f);
+})(window,document,'script','dataLayer','GTM-5KTWGJ');</script>
+<!-- End Google Tag Manager -->
<title>The Mana World - <?php echo $page_title; ?></title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
<meta http-equiv="Content-Style-Type" content="text/css"/>
@@ -54,11 +61,10 @@ function placeHeader($page_title)
<li><a href="downloads.php">Downloads</a></li>
<li><a href="news-feed.php">News</a></li>
<li><a href="about.php">About</a></li>
- <li><a href="https://webchat.freenode.net/?channels=#themanaworld">Support (IRC)</a></li>
+ <li><a href="/recover">Account Recovery</a></li>
<li><a href="https://wiki.themanaworld.org/">Wiki</a></li>
<li><a href="https://forums.themanaworld.org/">Forums</a></li>
<li><a href="https://wiki.themanaworld.org/index.php/FAQ">FAQ</a></li>
- <li><a href="https://wiki.themanaworld.org/index.php/Servers">Servers</a></li>
</ul>
</div>
</div>
@@ -71,7 +77,26 @@ function placeHeader($page_title)
<div class="section_bottomright">
<div class="section banners">
Server status
- <iframe src="https://server.themanaworld.org/status.php" width="130" height="30" frameborder="0" scrolling="no"></iframe>
+ <a class="tmwa-status" href="https://server.themanaworld.org" target="_blank">Online</a>
+ <script>
+ (() => {
+ const status_node = document.querySelector(".tmwa-status");
+ const tmwa_poll = () =>
+ fetch("/api/tmwa/server")
+ .then(data => data.json())
+ .then(data => {
+ if (data.serverStatus === "Online") {
+ status_node.innerText = `${data.serverStatus}: (${data.playersOnline} players)`;
+ status_node.classList.remove("offline");
+ } else {
+ status_node.innerText = "Offline";
+ status_node.classList.add("offline");
+ }
+ setTimeout(tmwa_poll, 8000);
+ });
+ tmwa_poll();
+ })();
+ </script>
</div>
</div>
</div>
@@ -153,16 +178,9 @@ function placeFooter()
</div>
</div> <!-- /page -->
</div>
-<!-- Google Tag Manager -->
+ </body>
<noscript><iframe src="//www.googletagmanager.com/ns.html?id=GTM-5KTWGJ"
height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript>
-<script>(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start':
-new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0],
-j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src=
-'//www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f);
-})(window,document,'script','dataLayer','GTM-5KTWGJ');</script>
-<!-- End Google Tag Manager -->
- </body>
</html>
<?php
}
diff --git a/includes/conf/mysql.conf.php.example b/includes/conf/mysql.conf.php.example
deleted file mode 100644
index d0122d5..0000000
--- a/includes/conf/mysql.conf.php.example
+++ /dev/null
@@ -1,8 +0,0 @@
-<?php
-
- $conf['mysql_hostname'] = "localhost";
- $conf['mysql_database'] = "test";
- $conf['mysql_username'] = "test";
- $conf['mysql_password'] = "test123";
-
-?> \ No newline at end of file
diff --git a/includes/email.php b/includes/email.php
deleted file mode 100644
index 6184d56..0000000
--- a/includes/email.php
+++ /dev/null
@@ -1,63 +0,0 @@
-<?php
-// Email Template Header
-// Image Mapped for Html Email
-// Base/Default Links
-function getEmailTemplate($emailText) {
- $boundary = uniqid('np');
- $headers .= "MIME-Version: 1.0\r\nContent-type: multipart/alternative;boundary=".$boundary."\r\n";
- $data = "This is a MIME encoded message.";
-
- $data .= "\r\n\r\n--" . $boundary . "\r\n";
- $data .= "Content-type: text/plain;charset=utf-8\r\n\r\n";
- $data .= "###############################################################\n";
- $data .= "# ___________.__ _____ #\n";
- $data .= "# \__ ___/| |__ ____ / \ ____ ____ ____ #\n";
- $data .= "# | | | | \_/ __ \ / \ / \ \__ \ / __ \ \__ \ #\n";
- $data .= "# | | | Y \ ___/ / Y \/ __ \| | \ \/ __ \_ #\n";
- $data .= "# |____| |___|__/\____> \____|____(______/__| \(______/ #\n";
- $data .= "# __ __ .__ .___ #\n";
- $data .= "# / \ / \___________| | __| _/ #\n";
- $data .= "# \ \/\/ / _ \_ __ \ | / __ | #\n";
- $data .= "# \ ( <_> ) | \/ |__/ /_/ | #\n";
- $data .= "# \__/\ / \____/|__| |____/\____ | #\n";
- $data .= "# \/ \/ #\n";
- $data .= "# #\n";
- $data .= "###############################################################\n";
- $data .= $emailText;
-
- $data .= "\r\n\r\n--" . $boundary . "\r\n";
- $data .= "Content-type: text/html;charset=utf-8\r\n\r\n";
-
- $data .= '<html><body>
-<img id="Image-Maps-Com-image-maps-2014-05-22-121954" src="https://www.themanaworld.org/images/TMW-email-temaplate-mailer.png" border="0" width="640" height="272" orgWidth="640" orgHeight="272" usemap="#image-maps-2014-05-22-121954" alt="" />
-<map name="image-maps-2014-05-22-121954" id="ImageMapsCom-image-maps-2014-05-22-121954">
-<area alt="Home Page" title="The Mana World" href="https://www.themanaworld.org/" shape="rect" coords="0,0,197,201" style="outline:none;" target="_self" />
-<area alt="Home Page" title="The Mana World" href="https://www.themanaworld.org/" shape="rect" coords="197,0,465,168" style="outline:none;" target="_self" />
-<area alt="Official Client Mana Plus" title="Official Client Mana Plus" href="http://manaplus.org" shape="rect" coords="465,0,640,168" style="outline:none;" target="_self" />
-<area alt="The Mana World News" title="The Mana World News" href="https://www.themanaworld.org/index.php" shape="rect" coords="196,168,275,201" style="outline:none;" target="_self" />
-<area alt="The Mana World Wiki" title="The Mana World Wiki" href="https://wiki.themanaworld.org/index.php/Main_Page" shape="rect" coords="274,168,375,201" style="outline:none;" target="_self" />
-<area alt="The Mana World Forums" title="The Mana World Forums" href="https://forums.themanaworld.org/" shape="rect" coords="372,168,490,201" style="outline:none;" target="_self" />
-<area alt="The Mana World Support (IRC)" title="The Mana World Support (IRC)" href="https://webchat.freenode.net/?channels=#themanaworld" shape="rect" coords="488,168,640,201" style="outline:none;" target="_self" />
-<area alt="About The Mana World" title="About The Mana World" href="https://www.themanaworld.org/about.php" shape="rect" coords="0,201,84,272" style="outline:none;" target="_self" />
-<area alt="Creative Commons" title="Creative Commons" href="http://creativecommons.org/" shape="rect" coords="84,201,121,272" style="outline:none;" target="_self" />
-<area alt="GNU General Public License" title="GNU General Public License " href="http://www.gnu.org/copyleft/gpl.html" shape="rect" coords="121,201,155,272" style="outline:none;" target="_self" />
-<area alt="Open Source Initiative" title="Open Source Initiative" href="http://opensource.org/" shape="rect" coords="155,202,189,272" style="outline:none;" target="_self" />
-<area alt="The Mana World on Facebook" title="The Mana World on Facebook" href="https://www.facebook.com/themanaworld" shape="rect" coords="191,204,308,272" style="outline:none;" target="_self" />
-<area alt="The Mana World on G+" title="The Mana World on G+" href="https://plus.google.com/+TheManaWorldOrg" shape="rect" coords="310,204,344,272" style="outline:none;" target="_self" />
-<area alt="The Mana World on Youtube" title="The Mana World on Youtube" href="https://www.youtube.com/user/TheManaWorld" shape="rect" coords="345,203,379,271" style="outline:none;" target="_self" />
-<area alt="Official Client Mana Plus" title="Official Client Mana Plus" href="http://manaplus.org" shape="rect" coords="382,203,501,272" style="outline:none;" target="_self" />
-<area alt="Mac OS Downloads" title="Mac OS Downloads" href="http://download.evolonline.org/manaplus/macosx/" shape="rect" coords="502,203,537,272" style="outline:none;" target="_self" />
-<area alt="Windows Installer" title="Windows Installer" href="http://manaplus.org/windowsinstaller" shape="rect" coords="537.8000001907349,202.8000030517578,572.8000001907349,271.8000030517578" style="outline:none;" target="_self" />
-<area alt="Linux Versions" title="Linux Versions" href="http://manaplus.org/" shape="rect" coords="575,203,640,272" style="outline:none;" target="_self" />
-<area shape="rect" coords="638,270,640,272" alt="Image Map" style="outline:none;" title="Image Map" href="http://www.image-maps.com/index.php?aff=mapped_users_0" />
-</map>
-'.nl2br($emailText).'
-<div style="font-size:10px;">
- &copy; 2004-2014 The Mana World
-</div>
-</body>
-</html>';
- $data .= "\r\n\r\n--" . $boundary . "--";
- return array($headers,$data);
-}
-?>
diff --git a/includes/fetch-news.sh b/includes/fetch-news.sh
deleted file mode 100755
index 5cc9ea5..0000000
--- a/includes/fetch-news.sh
+++ /dev/null
@@ -1,8 +0,0 @@
-#!/bin/sh
-#
-# Fetches project news and saves it for local use.
-#
-
-/usr/bin/wget -q -O /home/tmw/public_html/www/includes/rss2_projnews.tmp 'http://sourceforge.net/export/rss2_projnews.php?group_id=106790&rss_fulltext=1' > /dev/null
-/bin/mv -f /home/tmw/public_html/www/includes/rss2_projnews.tmp \
- /home/tmw/public_html/www/includes/rss2_projnews.cache
diff --git a/includes/libs/libmysql.php b/includes/libs/libmysql.php
deleted file mode 100644
index 5a3a06c..0000000
--- a/includes/libs/libmysql.php
+++ /dev/null
@@ -1,89 +0,0 @@
-<?php
-
-require_once "includes/conf/mysql.conf.php";
-
-class Database
-{
- // implement singleton pattern
- static private $instance = null;
-
- private $conn;
-
- static public function getInstance()
- {
- if (null === self::$instance)
- {
- self::$instance = new self;
- }
- return self::$instance;
- }
-
- // ctor
- private function __construct()
- {
- global $conf;
- $this->conn = mysql_connect( $conf['mysql_hostname'],
- $conf['mysql_username'],
- $conf['mysql_password'] )
- or die ("Connection to database failed!" . mysql_error());
-
- mysql_select_db( $conf['mysql_database'], $this->conn )
- or die ("Selection of database failed! " . mysql_error());
- }
-
- private function checkConnect()
- {
- if (!isset($this->conn))
- {
- die("Not connected to database");
- }
- }
-
- // returns the value in the first row and column
- public function getValue( $sql )
- {
- $this->checkConnect();
-
- $res = mysql_query( $sql, $this->conn );
- if (!$res)
- {
- die('Error while calling database: ' . mysql_error());
- }
- $vals = mysql_fetch_row( $res );
- mysql_free_result( $res );
- return $vals[0];
- }
-
- // executes some sql and returns affected rows
- public function exec( $sql )
- {
- $this->checkConnect();
-
- $res = mysql_query( $sql, $this->conn );
- if (!$res)
- {
- die('Error while calling database: ' . mysql_error());
- }
- $numrows = mysql_affected_rows( $this->conn );
- return $numrows;
- }
-
- public function escape( $string )
- {
- $this->checkConnect();
-
- return mysql_real_escape_string( $string, $this->conn );
- }
-
- public function disconnect()
- {
- if ( mysql_ping( $this->conn ) )
- {
- mysql_close( $this->conn );
- }
- }
-
-}
-
-
-?> \ No newline at end of file
diff --git a/includes/models/account.php b/includes/models/account.php
deleted file mode 100644
index ef253c6..0000000
--- a/includes/models/account.php
+++ /dev/null
@@ -1,114 +0,0 @@
-<?php
-
-require_once "includes/libs/libstrutils.php";
-
-class TMWAccount
-{
- const ACCOUNT_TBL = "tmw_accounts";
-
- const GENDER_MALE = 1;
- const GENDER_FEMALE = 2;
-
- const STATE_PENDING = 0;
- const STATE_CREATED = 0;
- const STATE_FAILED = 0;
-
- private $id;
- private $username;
- private $password;
- private $email;
- private $gender;
- private $state;
- private $registration;
-
- public static function getAccountCount()
- {
- $db = Database::getInstance();
- $sql = "SELECT COUNT(*) FROM " . TMWAccount::ACCOUNT_TBL;
- return $db->getValue( $sql );
- }
-
- public static function existsUsername($str)
- {
- $db = Database::getInstance();
- $sql = sprintf("SELECT COUNT(*) FROM " . TMWAccount::ACCOUNT_TBL .
- " WHERE USERNAME = '%s'", $db->escape($str));
- return ($db->getValue($sql) == 1);
- }
-
- public function setUsername($name){ $this->username = $name; }
- public function setPassword($pwd){ $this->password = $pwd; }
- public function setEMail($email){ $this->email = $email; }
- public function setGender($gender){ $this->gender = $gender; }
-
- public function validate()
- {
- $errors = array();
-
- // check here for correct values..
- if (strlen($this->username) < 4)
- $errors[] = "Username is too short";
-
- if (strlen($this->username) >= 24)
- $errors[] = "Username is too long";
-
- if (strlen($this->password) < 4)
- $errors[] = "Password is too short";
-
- if (strlen($this->password) >= 24)
- $errors[] = "Password is too long";
-
- if (strlen($this->email) < 4)
- $errors[] = "EMail is too short";
-
- if (strlen($this->email) >= 40)
- $errors[] = "EMail is too long";
-
- if (!check_chars($this->username))
- $errors[] = 'Username contains invalid characters. ' . BAD_STRING_DESC;
-
- if (!check_chars($this->password))
- $errors[] = 'Password contains invalid characters. ' . BAD_STRING_DESC;
-
- if ($this->gender != TMWAccount::GENDER_MALE &&
- $this->gender != TMWAccount::GENDER_FEMALE )
- {
- $errors[] = 'Gender has to be Male or Female!';
- }
-
- if (!filter_var($this->email, FILTER_VALIDATE_EMAIL))
- {
- $errors[] = 'EMail has wrong format.';
- }
-
-
- // returns true if everything is fine ( test with === true)
- if (count($errors) == 0)
- {
- return true;
- }
- else
- {
- return $errors;
- }
- }
-
-
-
- public function storeAccount()
- {
- $db = Database::getInstance();
- $sql = sprintf( "INSERT INTO " . TMWAccount::ACCOUNT_TBL .
- " (USERNAME, PASSWORD, EMAIL, GENDER) " .
- "VALUES ('%s', '%s', '%s', %d) ",
- $db->escape($this->username),
- $db->escape($this->password),
- $db->escape($this->email),
- $this->gender);
-
- $rows = $db->exec( $sql );
- return ( $rows == 1 );
- }
-}
-
-?>
diff --git a/includes/news.php b/includes/news.php
index 791e3c4..21e7f27 100644
--- a/includes/news.php
+++ b/includes/news.php
@@ -11,6 +11,7 @@ function printNews($num='all') {
$content .= $buffer;
if (preg_match('/<\/div>/',$buffer)) {
$count++;
+ $content .= "<br>";
}
if ($count == $num && $num != 'all') {
$content .= '<div class="read-more"><a class="more" href="/news-feed.php">More News >></a></div>';
diff --git a/index.php b/index.php
index 0e0bbfb..dd9dd15 100644
--- a/index.php
+++ b/index.php
@@ -4,13 +4,13 @@ include('includes/news.php');
placeHeader("Home");
?>
<div>
-<h3>The Mana World Project</h3>
+<h3>The Mana World Project</h3><br>
<p style="font-size:14px;">The Mana World (TMW) is a serious effort to create an innovative free and open source MMORPG. TMW uses 2D graphics and aims to create a large and diverse interactive world. It is licensed under the GPL, making sure this game can't ever run away from you. </p>
<div class="read-more"><a class="more" href="/about.php">Read More >></a></div>
</div>
-<div>
+<div><br>
<h3>Recent News</h3>
-</div>
+</br></div>
<?php
echo printNews(1);
placeFooter();
diff --git a/recaptcha-php/LICENSE b/recaptcha-php/LICENSE
deleted file mode 100644
index b612f71..0000000
--- a/recaptcha-php/LICENSE
+++ /dev/null
@@ -1,22 +0,0 @@
-Copyright (c) 2007 reCAPTCHA -- http://recaptcha.net
-AUTHORS:
- Mike Crawford
- Ben Maurer
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in
-all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-THE SOFTWARE.
diff --git a/recaptcha-php/README b/recaptcha-php/README
deleted file mode 100644
index 21f1a27..0000000
--- a/recaptcha-php/README
+++ /dev/null
@@ -1,7 +0,0 @@
-reCAPTCHA README
-================
-
-The reCAPTCHA PHP Lirary helps you use the reCAPTCHA API. Documentation
-for this library can be found at
-
- http://recaptcha.net/plugins/php
diff --git a/recaptcha-php/example-captcha.php b/recaptcha-php/example-captcha.php
deleted file mode 100644
index f6f7fa0..0000000
--- a/recaptcha-php/example-captcha.php
+++ /dev/null
@@ -1,37 +0,0 @@
-<html>
- <body>
- <form action="" method="post">
-<?php
-
-require_once('recaptchalib.php');
-
-// Get a key from https://www.google.com/recaptcha/admin/create
-$publickey = "";
-$privatekey = "";
-
-# the response from reCAPTCHA
-$resp = null;
-# the error code from reCAPTCHA, if any
-$error = null;
-
-# was there a reCAPTCHA response?
-if ($_POST["recaptcha_response_field"]) {
- $resp = recaptcha_check_answer ($privatekey,
- $_SERVER["REMOTE_ADDR"],
- $_POST["recaptcha_challenge_field"],
- $_POST["recaptcha_response_field"]);
-
- if ($resp->is_valid) {
- echo "You got it!";
- } else {
- # set the error code so that we can display it
- $error = $resp->error;
- }
-}
-echo recaptcha_get_html($publickey, $error);
-?>
- <br/>
- <input type="submit" value="submit" />
- </form>
- </body>
-</html>
diff --git a/recaptcha-php/example-mailhide.php b/recaptcha-php/example-mailhide.php
deleted file mode 100644
index d08622c..0000000
--- a/recaptcha-php/example-mailhide.php
+++ /dev/null
@@ -1,17 +0,0 @@
-<html><body>
-<?
-require_once ("recaptchalib.php");
-
-// get a key at http://www.google.com/recaptcha/mailhide/apikey
-$mailhide_pubkey = '';
-$mailhide_privkey = '';
-
-?>
-
-The Mailhide version of example@example.com is
-<? echo recaptcha_mailhide_html ($mailhide_pubkey, $mailhide_privkey, "example@example.com"); ?>. <br>
-
-The url for the email is:
-<? echo recaptcha_mailhide_url ($mailhide_pubkey, $mailhide_privkey, "example@example.com"); ?> <br>
-
-</body></html>
diff --git a/recaptcha-php/keys.php.example b/recaptcha-php/keys.php.example
deleted file mode 100644
index 4355a6c..0000000
--- a/recaptcha-php/keys.php.example
+++ /dev/null
@@ -1,5 +0,0 @@
-<?php
- // Put the keys you got from the signup page
- $publickey = "";
- $privatekey = "";
-?> \ No newline at end of file
diff --git a/recaptcha-php/recaptchalib.php b/recaptcha-php/recaptchalib.php
deleted file mode 100644
index 5e6e8e5..0000000
--- a/recaptcha-php/recaptchalib.php
+++ /dev/null
@@ -1,279 +0,0 @@
-<?php
-/*
- * This is a PHP library that handles calling reCAPTCHA.
- * - Documentation and latest version
- * http://recaptcha.net/plugins/php/
- * - Get a reCAPTCHA API Key
- * https://www.google.com/recaptcha/admin/create
- * - Discussion group
- * http://groups.google.com/group/recaptcha
- *
- * Copyright (c) 2007 reCAPTCHA -- http://recaptcha.net
- * AUTHORS:
- * Mike Crawford
- * Ben Maurer
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-
-/**
- * The reCAPTCHA server URL's
- */
-// edited by o11c - it gets confused by the nginx proxy really being https
-//define("RECAPTCHA_API_SERVER", "http://www.google.com/recaptcha/api");
-define("RECAPTCHA_API_SERVER", "https://www.google.com/recaptcha/api");
-define("RECAPTCHA_API_SECURE_SERVER", "https://www.google.com/recaptcha/api");
-define("RECAPTCHA_VERIFY_SERVER", "www.google.com");
-
-/**
- * Encodes the given data into a query string format
- * @param $data - array of string elements to be encoded
- * @return string - encoded request
- */
-function _recaptcha_qsencode ($data) {
- $req = "";
- foreach ( $data as $key => $value )
- $req .= $key . '=' . urlencode( stripslashes($value) ) . '&';
-
- // Cut the last '&'
- $req=substr($req,0,strlen($req)-1);
- return $req;
-}
-
-
-
-/**
- * Submits an HTTP POST to a reCAPTCHA server
- * @param string $host
- * @param string $path
- * @param array $data
- * @param int port
- * @return array response
- */
-function _recaptcha_http_post($host, $path, $data, $port = 80) {
-
- $req = _recaptcha_qsencode ($data);
-
- $http_request = "POST $path HTTP/1.0\r\n";
- $http_request .= "Host: $host\r\n";
- $http_request .= "Content-Type: application/x-www-form-urlencoded;\r\n";
- $http_request .= "Content-Length: " . strlen($req) . "\r\n";
- $http_request .= "User-Agent: reCAPTCHA/PHP\r\n";
- $http_request .= "\r\n";
- $http_request .= $req;
-
- $response = '';
- if( false == ( $fs = @fsockopen($host, $port, $errno, $errstr, 10) ) ) {
- die ('Could not open socket');
- }
-
- fwrite($fs, $http_request);
-
- while ( !feof($fs) )
- $response .= fgets($fs, 1160); // One TCP-IP packet
- fclose($fs);
- $response = explode("\r\n\r\n", $response, 2);
-
- return $response;
-}
-
-
-
-/**
- * Gets the challenge HTML (javascript and non-javascript version).
- * This is called from the browser, and the resulting reCAPTCHA HTML widget
- * is embedded within the HTML form it was called from.
- * @param string $pubkey A public key for reCAPTCHA
- * @param string $error The error given by reCAPTCHA (optional, default is null)
- * @param boolean $use_ssl Should the request be made over ssl? (optional, default is false)
-
- * @return string - The HTML to be embedded in the user's form.
- */
-function recaptcha_get_html ($pubkey, $error = null, $use_ssl = false)
-{
- if ($pubkey == null || $pubkey == '') {
- die ("To use reCAPTCHA you must get an API key from <a href='https://www.google.com/recaptcha/admin/create'>https://www.google.com/recaptcha/admin/create</a>");
- }
-
- if ($use_ssl) {
- $server = RECAPTCHA_API_SECURE_SERVER;
- } else {
- $server = RECAPTCHA_API_SERVER;
- }
-
- $errorpart = "";
- if ($error) {
- $errorpart = "&amp;error=" . $error;
- }
- return '<script type="text/javascript" src="'. $server . '/challenge?k=' . $pubkey . $errorpart . '"></script>
-
- <noscript>
- <iframe src="'. $server . '/noscript?k=' . $pubkey . $errorpart . '" height="300" width="500" frameborder="0"></iframe><br/>
- <textarea name="recaptcha_challenge_field" rows="3" cols="40"></textarea>
- <input type="hidden" name="recaptcha_response_field" value="manual_challenge"/>
- </noscript>';
-}
-
-
-
-
-/**
- * A ReCaptchaResponse is returned from recaptcha_check_answer()
- */
-class ReCaptchaResponse {
- var $is_valid;
- var $error;
-}
-
-
-/**
- * Calls an HTTP POST function to verify if the user's guess was correct
- * @param string $privkey
- * @param string $remoteip
- * @param string $challenge
- * @param string $response
- * @param array $extra_params an array of extra variables to post to the server
- * @return ReCaptchaResponse
- */
-function recaptcha_check_answer ($privkey, $remoteip, $challenge, $response, $extra_params = array())
-{
- if ($privkey == null || $privkey == '') {
- die ("To use reCAPTCHA you must get an API key from <a href='https://www.google.com/recaptcha/admin/create'>https://www.google.com/recaptcha/admin/create</a>");
- }
-
- if ($remoteip == null || $remoteip == '') {
- die ("For security reasons, you must pass the remote ip to reCAPTCHA");
- }
-
-
-
- //discard spam submissions
- if ($challenge == null || strlen($challenge) == 0 || $response == null || strlen($response) == 0) {
- $recaptcha_response = new ReCaptchaResponse();
- $recaptcha_response->is_valid = false;
- $recaptcha_response->error = 'incorrect-captcha-sol';
- return $recaptcha_response;
- }
-
- $response = _recaptcha_http_post (RECAPTCHA_VERIFY_SERVER, "/recaptcha/api/verify",
- array (
- 'privatekey' => $privkey,
- 'remoteip' => $remoteip,
- 'challenge' => $challenge,
- 'response' => $response
- ) + $extra_params
- );
-
- $answers = explode ("\n", $response [1]);
- $recaptcha_response = new ReCaptchaResponse();
-
- if (trim ($answers [0]) == 'true') {
- $recaptcha_response->is_valid = true;
- }
- else {
- $recaptcha_response->is_valid = false;
- $recaptcha_response->error = $answers [1];
- }
- return $recaptcha_response;
-
-}
-
-/**
- * gets a URL where the user can sign up for reCAPTCHA. If your application
- * has a configuration page where you enter a key, you should provide a link
- * using this function.
- * @param string $domain The domain where the page is hosted
- * @param string $appname The name of your application
- */
-function recaptcha_get_signup_url ($domain = null, $appname = null) {
- return "https://www.google.com/recaptcha/admin/create?" . _recaptcha_qsencode (array ('domains' => $domain, 'app' => $appname));
-}
-
-function _recaptcha_aes_pad($val) {
- $block_size = 16;
- $numpad = $block_size - (strlen ($val) % $block_size);
- return str_pad($val, strlen ($val) + $numpad, chr($numpad));
-}
-
-/* Mailhide related code */
-
-function _recaptcha_aes_encrypt($val,$ky) {
- if (! function_exists ("mcrypt_encrypt")) {
- die ("To use reCAPTCHA Mailhide, you need to have the mcrypt php module installed.");
- }
- $mode=MCRYPT_MODE_CBC;
- $enc=MCRYPT_RIJNDAEL_128;
- $val=_recaptcha_aes_pad($val);
- return mcrypt_encrypt($enc, $ky, $val, $mode, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0");
-}
-
-
-function _recaptcha_mailhide_urlbase64 ($x) {
- return strtr(base64_encode ($x), '+/', '-_');
-}
-
-/* gets the reCAPTCHA Mailhide url for a given email, public key and private key */
-function recaptcha_mailhide_url($pubkey, $privkey, $email) {
- if ($pubkey == '' || $pubkey == null || $privkey == "" || $privkey == null) {
- die ("To use reCAPTCHA Mailhide, you have to sign up for a public and private key, " .
- "you can do so at <a href='http://www.google.com/recaptcha/mailhide/apikey'>http://www.google.com/recaptcha/mailhide/apikey</a>");
- }
-
-
- $ky = pack('H*', $privkey);
- $cryptmail = _recaptcha_aes_encrypt ($email, $ky);
-
- return "http://www.google.com/recaptcha/mailhide/d?k=" . $pubkey . "&c=" . _recaptcha_mailhide_urlbase64 ($cryptmail);
-}
-
-/**
- * gets the parts of the email to expose to the user.
- * eg, given johndoe@example,com return ["john", "example.com"].
- * the email is then displayed as john...@example.com
- */
-function _recaptcha_mailhide_email_parts ($email) {
- $arr = preg_split("/@/", $email );
-
- if (strlen ($arr[0]) <= 4) {
- $arr[0] = substr ($arr[0], 0, 1);
- } else if (strlen ($arr[0]) <= 6) {
- $arr[0] = substr ($arr[0], 0, 3);
- } else {
- $arr[0] = substr ($arr[0], 0, 4);
- }
- return $arr;
-}
-
-/**
- * Gets html to display an email address given a public an private key.
- * to get a key, go to:
- *
- * http://www.google.com/recaptcha/mailhide/apikey
- */
-function recaptcha_mailhide_html($pubkey, $privkey, $email) {
- $emailparts = _recaptcha_mailhide_email_parts ($email);
- $url = recaptcha_mailhide_url ($pubkey, $privkey, $email);
-
- return htmlentities($emailparts[0]) . "<a href='" . htmlentities ($url) .
- "' onclick=\"window.open('" . htmlentities ($url) . "', '', 'toolbar=0,scrollbars=0,location=0,statusbar=0,menubar=0,resizable=0,width=500,height=300'); return false;\" title=\"Reveal this e-mail address\">...</a>@" . htmlentities ($emailparts [1]);
-
-}
-
-
-?>
diff --git a/registration.php b/registration.php
index 8a5c49e..8a0c4ac 100644
--- a/registration.php
+++ b/registration.php
@@ -1,155 +1,23 @@
<?php
- require_once('includes/libs/libmysql.php');
- require_once('includes/models/account.php');
- require_once('recaptcha-php/recaptchalib.php');
-
- require_once('recaptcha-php/keys.php');
-
- $enable_captcha = true; // modify this in production
-
- $showform = true;
-
- if (isset($_POST['register']) && $_POST['register'] == "true")
- {
- $showform = false;
- $err = "";
- $acc = new TMWAccount();
- $acc->setUsername($_POST['username']);
- $acc->setPassword($_POST['password1']);
- $acc->setEMail($_POST['email']);
- $acc->setGender($_POST['gender']);
-
- $val = $acc->validate();
- if (is_array($val))
- {
- foreach( $val as $error)
- {
- $err .= $error . "<br />";
- }
- $showform = true;
- }
-
- if ($_POST['password2'] != $_POST['password1'])
- {
- $err .= "The given passwords don't match!"; $showform = true;
- }
-
- if (TMWAccount::existsUsername( $_POST['username'] ))
- {
- $err .= "The username is in use!"; $showform = true;
- }
-
- if ($enable_captcha)
- {
- // check captcha
- $resp = recaptcha_check_answer ($privatekey, $_SERVER["REMOTE_ADDR"],
- $_POST["recaptcha_challenge_field"], $_POST["recaptcha_response_field"]);
-
- if (!$resp->is_valid)
- {
- $err .= "The captcha was incorrect!"; $showform = true;
- }
- }
-
- if (!$showform)
- {
- // create the account
- if (!$acc->storeAccount())
- {
- $err = "The was an unknown error while storing your new account";
- $showform = true;
- }
- }
- }
- if ($showform)
- {
- include("includes/common.php");
- placeHeader("Registration");
-
+ include('includes/common.php');
+ placeHeader("Registration");
?>
<p>With this form you can register for a new account.</p>
<p>Note that you also need to <a href="downloads.php">download Manaplus</a>, The Mana World's official client, and run it to log in and play.</p>
-<p><i>We will never give your email to someone else or send you spam! Its only purpose is to be able to send you back whether account creation succeeded. Also your email is important to send you a new password if you forgot yours (<a href="https://forums.themanaworld.org/viewtopic.php?f=3&t=17737">further information).</a></i></p>
+<br><p><i>We will never give your email to someone else or send you spam! Its only purpose is to notify you whether account creation succeeded. Also your email is important to send you a new password if you forgot yours (<a href="https://forums.themanaworld.org/viewtopic.php?f=3&t=17737">further information).</a></i></p>
+<br>
<p style="background-color: #ede2da; padding: 5px; border: 1px solid
-#9f9894; border-radius: 10px;"><i>Security warning:</i> Do not use the same username and password on
-two different servers. The server admins can read all of them in clear text and
-nothing stops them from trying them on other servers. It happened a lot in the
+#9f9894; border-radius: 10px;"><i>Security warning:</i> <b>Do not use the same username and password on
+two different servers.</b> The passwords transit in plain text and nothing stops the admins of third-party
+servers from trying your password on the official server. It happened a lot in the
past that users of the official server got "hacked" because they ignored this
important precaution.</p>
-<form action="registration.php" method="post">
-
- <input type="hidden" name="register" value="true" />
- <table>
- <?php if (isset($err))
- {
- echo "<tr><td colspan=\"2\" style=\"border: 1px solid red; color: red;\">" .
- $err . "</td></tr>";
- }
- ?>
- <tr>
- <td>Username:</td>
- <td><input type="text" size="20" name="username" /></td>
- </tr>
- <tr>
- <td>Password:</td>
- <td><input type="password" size="20" name="password1" /></td>
- </tr>
- <tr>
- <td>Retype password:</td>
- <td><input type="password" size="20" name="password2" /></td>
- </tr>
- <tr>
- <td>EMail:</td>
- <td><input type="text" size="30" name="email" /></td>
- </tr>
- <tr>
- <td>Gender:</td>
- <td>
- <select name="gender">
- <option value="0" selected></option>
- <option value="1">Male</option>
- <option value="2">Female</option>
- </select>
- </td>
- </tr>
- <tr>
- <td colspan="2">
- <?php echo recaptcha_get_html($publickey); ?>
- </td>
- </tr>
- <tr>
- <td colspan="2" style="text-align:right">
- <input type="submit" value="Register" />
- </td>
- </tr>
- </table>
-</form>
-
+<a href="/register" style="margin: 2em;font-size: 3em;display: block;">&gt;&gt; Continue &gt;&gt;</a>
<?php
-
- placeFooter();
- } // end of showform
- else
- {
- include("includes/email.php");
- $mail_to = $_POST['email'];
- $boundary = uniqid('np');
- $subject = "The Mana World Registration";
- $headers = "From: Accounts <passwords@themanaworld.org>\r\nReply-To: Accounts <passwords@themanaworld.org>\r\n";
- $data .= "== Account Created ==\n";
- $data .= " Welcome to The Mana World! Your account should now be enabled. If you have any problems with your login contact The Mana World via the Support (live) or Forums (maybe a delay) for help. Game tips & walkthroughs are available on the Wiki. Our Forums are a great place to ask for advice and discuss possible changes. News is available in the client or on the Home Site.
- Godspeed Adventurer,
- The Mana World\n";
- $message = getEmailTemplate($data);
- $headers .= $message[0];
-
- //mail($mail_to,$subject,$message[1],$headers);
-
- header("Location: /thank_you.php");
- }
+ placeFooter();
?>
diff --git a/robots.txt b/robots.txt
index 9925915..cbd051e 100644
--- a/robots.txt
+++ b/robots.txt
@@ -1,10 +1,7 @@
User-agent: *
disallow: /includes/
-disallow: /recaptcha-php/
-disallow: /sql/
-disallow: /bin/
-disallow: /thank_you.php
disallow: /news.html
+disallow: /api/
allow: /
sitemap: http://www.themanaworld.org/sitemap.xml
diff --git a/rusha.min.js b/rusha.min.js
new file mode 100644
index 0000000..db090d1
--- /dev/null
+++ b/rusha.min.js
@@ -0,0 +1,3 @@
+/*! rusha 2018-02-26 */
+
+(function e(t,r){if(typeof exports==="object"&&typeof module==="object")module.exports=r();else if(typeof define==="function"&&define.amd)define([],r);else if(typeof exports==="object")exports["Rusha"]=r();else t["Rusha"]=r()})(typeof self!=="undefined"?self:this,function(){return function(e){var t={};function r(n){if(t[n]){return t[n].exports}var a=t[n]={i:n,l:false,exports:{}};e[n].call(a.exports,a,a.exports,r);a.l=true;return a.exports}r.m=e;r.c=t;r.d=function(e,t,n){if(!r.o(e,t)){Object.defineProperty(e,t,{configurable:false,enumerable:true,get:n})}};r.n=function(e){var t=e&&e.__esModule?function t(){return e["default"]}:function t(){return e};r.d(t,"a",t);return t};r.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)};r.p="";return r(r.s=3)}([function(e,t,r){function n(e,t){if(!(e instanceof t)){throw new TypeError("Cannot call a class as a function")}}var a=r(5);var i=r(1),o=i.toHex,s=i.ceilHeapSize;var f=r(6);var u=function(e){for(e+=9;e%64>0;e+=1){}return e};var c=function(e,t){var r=new Uint8Array(e.buffer);var n=t%4,a=t-n;switch(n){case 0:r[a+3]=0;case 1:r[a+2]=0;case 2:r[a+1]=0;case 3:r[a+0]=0}for(var i=(t>>2)+1;i<e.length;i++){e[i]=0}};var h=function(e,t,r){e[t>>2]|=128<<24-(t%4<<3);e[((t>>2)+2&~15)+14]=r/(1<<29)|0;e[((t>>2)+2&~15)+15]=r<<3};var p=function(e,t){var r=new Int32Array(e,t+320,5);var n=new Int32Array(5);var a=new DataView(n.buffer);a.setInt32(0,r[0],false);a.setInt32(4,r[1],false);a.setInt32(8,r[2],false);a.setInt32(12,r[3],false);a.setInt32(16,r[4],false);return n};var l=function(){function e(t){n(this,e);t=t||64*1024;if(t%64>0){throw new Error("Chunk size must be a multiple of 128 bit")}this._offset=0;this._maxChunkLen=t;this._padMaxChunkLen=u(t);this._heap=new ArrayBuffer(s(this._padMaxChunkLen+320+20));this._h32=new Int32Array(this._heap);this._h8=new Int8Array(this._heap);this._core=new a({Int32Array:Int32Array},{},this._heap)}e.prototype._initState=function e(t,r){this._offset=0;var n=new Int32Array(t,r+320,5);n[0]=1732584193;n[1]=-271733879;n[2]=-1732584194;n[3]=271733878;n[4]=-1009589776};e.prototype._padChunk=function e(t,r){var n=u(t);var a=new Int32Array(this._heap,0,n>>2);c(a,t);h(a,t,r);return n};e.prototype._write=function e(t,r,n,a){f(t,this._h8,this._h32,r,n,a||0)};e.prototype._coreCall=function e(t,r,n,a,i){var o=n;this._write(t,r,n);if(i){o=this._padChunk(n,a)}this._core.hash(o,this._padMaxChunkLen)};e.prototype.rawDigest=function e(t){var r=t.byteLength||t.length||t.size||0;this._initState(this._heap,this._padMaxChunkLen);var n=0,a=this._maxChunkLen;for(n=0;r>n+a;n+=a){this._coreCall(t,n,a,r,false)}this._coreCall(t,n,r-n,r,true);return p(this._heap,this._padMaxChunkLen)};e.prototype.digest=function e(t){return o(this.rawDigest(t).buffer)};e.prototype.digestFromString=function e(t){return this.digest(t)};e.prototype.digestFromBuffer=function e(t){return this.digest(t)};e.prototype.digestFromArrayBuffer=function e(t){return this.digest(t)};e.prototype.resetState=function e(){this._initState(this._heap,this._padMaxChunkLen);return this};e.prototype.append=function e(t){var r=0;var n=t.byteLength||t.length||t.size||0;var a=this._offset%this._maxChunkLen;var i=void 0;this._offset+=n;while(r<n){i=Math.min(n-r,this._maxChunkLen-a);this._write(t,r,i,a);a+=i;r+=i;if(a===this._maxChunkLen){this._core.hash(this._maxChunkLen,this._padMaxChunkLen);a=0}}return this};e.prototype.getState=function e(){var t=this._offset%this._maxChunkLen;var r=void 0;if(!t){var n=new Int32Array(this._heap,this._padMaxChunkLen+320,5);r=n.buffer.slice(n.byteOffset,n.byteOffset+n.byteLength)}else{r=this._heap.slice(0)}return{offset:this._offset,heap:r}};e.prototype.setState=function e(t){this._offset=t.offset;if(t.heap.byteLength===20){var r=new Int32Array(this._heap,this._padMaxChunkLen+320,5);r.set(new Int32Array(t.heap))}else{this._h32.set(new Int32Array(t.heap))}return this};e.prototype.rawEnd=function e(){var t=this._offset;var r=t%this._maxChunkLen;var n=this._padChunk(r,t);this._core.hash(n,this._padMaxChunkLen);var a=p(this._heap,this._padMaxChunkLen);this._initState(this._heap,this._padMaxChunkLen);return a};e.prototype.end=function e(){return o(this.rawEnd().buffer)};return e}();e.exports=l;e.exports._core=a},function(e,t){var r=new Array(256);for(var n=0;n<256;n++){r[n]=(n<16?"0":"")+n.toString(16)}e.exports.toHex=function(e){var t=new Uint8Array(e);var n=new Array(e.byteLength);for(var a=0;a<n.length;a++){n[a]=r[t[a]]}return n.join("")};e.exports.ceilHeapSize=function(e){var t=0;if(e<=65536)return 65536;if(e<16777216){for(t=1;t<e;t=t<<1){}}else{for(t=16777216;t<e;t+=16777216){}}return t};e.exports.isDedicatedWorkerScope=function(e){var t="WorkerGlobalScope"in e&&e instanceof e.WorkerGlobalScope;var r="SharedWorkerGlobalScope"in e&&e instanceof e.SharedWorkerGlobalScope;var n="ServiceWorkerGlobalScope"in e&&e instanceof e.ServiceWorkerGlobalScope;return t&&!r&&!n}},function(e,t,r){e.exports=function(){var e=r(0);var t=function(e,t,r){try{return r(null,e.digest(t))}catch(e){return r(e)}};var n=function(e,t,r,a,i){var o=new self.FileReader;o.onloadend=function s(){if(o.error){return i(o.error)}var f=o.result;t+=o.result.byteLength;try{e.append(f)}catch(e){i(e);return}if(t<a.size){n(e,t,r,a,i)}else{i(null,e.end())}};o.readAsArrayBuffer(a.slice(t,t+r))};var a=true;self.onmessage=function(r){if(!a){return}var i=r.data.data,o=r.data.file,s=r.data.id;if(typeof s==="undefined")return;if(!o&&!i)return;var f=r.data.blockSize||4*1024*1024;var u=new e(f);u.resetState();var c=function(e,t){if(!e){self.postMessage({id:s,hash:t})}else{self.postMessage({id:s,error:e.name})}};if(i)t(u,i,c);if(o)n(u,0,f,o,c)};return function(){a=false}}},function(e,t,r){var n=r(4);var a=r(0);var i=r(7);var o=r(2);var s=r(1),f=s.isDedicatedWorkerScope;var u=typeof self!=="undefined"&&f(self);a.disableWorkerBehaviour=u?o():function(){};a.createWorker=function(){var e=n(2);var t=e.terminate;e.terminate=function(){URL.revokeObjectURL(e.objectURL);t.call(e)};return e};a.createHash=i;e.exports=a},function(e,t,r){function n(e){var t={};function r(n){if(t[n])return t[n].exports;var a=t[n]={i:n,l:false,exports:{}};e[n].call(a.exports,a,a.exports,r);a.l=true;return a.exports}r.m=e;r.c=t;r.i=function(e){return e};r.d=function(e,t,n){if(!r.o(e,t)){Object.defineProperty(e,t,{configurable:false,enumerable:true,get:n})}};r.r=function(e){Object.defineProperty(e,"__esModule",{value:true})};r.n=function(e){var t=e&&e.__esModule?function t(){return e["default"]}:function t(){return e};r.d(t,"a",t);return t};r.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)};r.p="/";r.oe=function(e){console.error(e);throw e};var n=r(r.s=ENTRY_MODULE);return n.default||n}var a="[\\.|\\-|\\+|\\w|/|@]+";var i="\\((/\\*.*?\\*/)?s?.*?("+a+").*?\\)";function o(e){return(e+"").replace(/[.?*+^$[\]\\(){}|-]/g,"\\$&")}function s(e,t,n){var s={};s[n]=[];var f=t.toString();var u=f.match(/^function\s?\(\w+,\s*\w+,\s*(\w+)\)/);if(!u)return s;var c=u[1];var h=new RegExp("(\\\\n|\\W)"+o(c)+i,"g");var p;while(p=h.exec(f)){if(p[3]==="dll-reference")continue;s[n].push(p[3])}h=new RegExp("\\("+o(c)+'\\("(dll-reference\\s('+a+'))"\\)\\)'+i,"g");while(p=h.exec(f)){if(!e[p[2]]){s[n].push(p[1]);e[p[2]]=r(p[1]).m}s[p[2]]=s[p[2]]||[];s[p[2]].push(p[4])}return s}function f(e){var t=Object.keys(e);return t.reduce(function(t,r){return t||e[r].length>0},false)}function u(e,t){var r={main:[t]};var n={main:[]};var a={main:{}};while(f(r)){var i=Object.keys(r);for(var o=0;o<i.length;o++){var u=i[o];var c=r[u];var h=c.pop();a[u]=a[u]||{};if(a[u][h]||!e[u][h])continue;a[u][h]=true;n[u]=n[u]||[];n[u].push(h);var p=s(e,e[u][h],u);var l=Object.keys(p);for(var v=0;v<l.length;v++){r[l[v]]=r[l[v]]||[];r[l[v]]=r[l[v]].concat(p[l[v]])}}}return n}e.exports=function(e,t){t=t||{};var a={main:r.m};var i=t.all?{main:Object.keys(a)}:u(a,e);var o="";Object.keys(i).filter(function(e){return e!=="main"}).forEach(function(e){var t=0;while(i[e][t]){t++}i[e].push(t);a[e][t]="(function(module, exports, __webpack_require__) { module.exports = __webpack_require__; })";o=o+"var "+e+" = ("+n.toString().replace("ENTRY_MODULE",JSON.stringify(t))+")({"+i[e].map(function(t){return""+JSON.stringify(t)+": "+a[e][t].toString()}).join(",")+"});\n"});o=o+"("+n.toString().replace("ENTRY_MODULE",JSON.stringify(e))+")({"+i.main.map(function(e){return""+JSON.stringify(e)+": "+a.main[e].toString()}).join(",")+"})(self);";var s=new window.Blob([o],{type:"text/javascript"});if(t.bare){return s}var f=window.URL||window.webkitURL||window.mozURL||window.msURL;var c=f.createObjectURL(s);var h=new window.Worker(c);h.objectURL=c;return h}},function(e,t){e.exports=function e(t,r,n){"use asm";var a=new t.Int32Array(n);function i(e,t){e=e|0;t=t|0;var r=0,n=0,i=0,o=0,s=0,f=0,u=0,c=0,h=0,p=0,l=0,v=0,d=0,y=0;i=a[t+320>>2]|0;s=a[t+324>>2]|0;u=a[t+328>>2]|0;h=a[t+332>>2]|0;l=a[t+336>>2]|0;for(r=0;(r|0)<(e|0);r=r+64|0){o=i;f=s;c=u;p=h;v=l;for(n=0;(n|0)<64;n=n+4|0){y=a[r+n>>2]|0;d=((i<<5|i>>>27)+(s&u|~s&h)|0)+((y+l|0)+1518500249|0)|0;l=h;h=u;u=s<<30|s>>>2;s=i;i=d;a[e+n>>2]=y}for(n=e+64|0;(n|0)<(e+80|0);n=n+4|0){y=(a[n-12>>2]^a[n-32>>2]^a[n-56>>2]^a[n-64>>2])<<1|(a[n-12>>2]^a[n-32>>2]^a[n-56>>2]^a[n-64>>2])>>>31;d=((i<<5|i>>>27)+(s&u|~s&h)|0)+((y+l|0)+1518500249|0)|0;l=h;h=u;u=s<<30|s>>>2;s=i;i=d;a[n>>2]=y}for(n=e+80|0;(n|0)<(e+160|0);n=n+4|0){y=(a[n-12>>2]^a[n-32>>2]^a[n-56>>2]^a[n-64>>2])<<1|(a[n-12>>2]^a[n-32>>2]^a[n-56>>2]^a[n-64>>2])>>>31;d=((i<<5|i>>>27)+(s^u^h)|0)+((y+l|0)+1859775393|0)|0;l=h;h=u;u=s<<30|s>>>2;s=i;i=d;a[n>>2]=y}for(n=e+160|0;(n|0)<(e+240|0);n=n+4|0){y=(a[n-12>>2]^a[n-32>>2]^a[n-56>>2]^a[n-64>>2])<<1|(a[n-12>>2]^a[n-32>>2]^a[n-56>>2]^a[n-64>>2])>>>31;d=((i<<5|i>>>27)+(s&u|s&h|u&h)|0)+((y+l|0)-1894007588|0)|0;l=h;h=u;u=s<<30|s>>>2;s=i;i=d;a[n>>2]=y}for(n=e+240|0;(n|0)<(e+320|0);n=n+4|0){y=(a[n-12>>2]^a[n-32>>2]^a[n-56>>2]^a[n-64>>2])<<1|(a[n-12>>2]^a[n-32>>2]^a[n-56>>2]^a[n-64>>2])>>>31;d=((i<<5|i>>>27)+(s^u^h)|0)+((y+l|0)-899497514|0)|0;l=h;h=u;u=s<<30|s>>>2;s=i;i=d;a[n>>2]=y}i=i+o|0;s=s+f|0;u=u+c|0;h=h+p|0;l=l+v|0}a[t+320>>2]=i;a[t+324>>2]=s;a[t+328>>2]=u;a[t+332>>2]=h;a[t+336>>2]=l}return{hash:i}}},function(e,t){var r=this;var n=void 0;if(typeof self!=="undefined"&&typeof self.FileReaderSync!=="undefined"){n=new self.FileReaderSync}var a=function(e,t,r,n,a,i){var o=void 0,s=i%4,f=(a+s)%4,u=a-f;switch(s){case 0:t[i]=e.charCodeAt(n+3);case 1:t[i+1-(s<<1)|0]=e.charCodeAt(n+2);case 2:t[i+2-(s<<1)|0]=e.charCodeAt(n+1);case 3:t[i+3-(s<<1)|0]=e.charCodeAt(n)}if(a<f+(4-s)){return}for(o=4-s;o<u;o=o+4|0){r[i+o>>2]=e.charCodeAt(n+o)<<24|e.charCodeAt(n+o+1)<<16|e.charCodeAt(n+o+2)<<8|e.charCodeAt(n+o+3)}switch(f){case 3:t[i+u+1|0]=e.charCodeAt(n+u+2);case 2:t[i+u+2|0]=e.charCodeAt(n+u+1);case 1:t[i+u+3|0]=e.charCodeAt(n+u)}};var i=function(e,t,r,n,a,i){var o=void 0,s=i%4,f=(a+s)%4,u=a-f;switch(s){case 0:t[i]=e[n+3];case 1:t[i+1-(s<<1)|0]=e[n+2];case 2:t[i+2-(s<<1)|0]=e[n+1];case 3:t[i+3-(s<<1)|0]=e[n]}if(a<f+(4-s)){return}for(o=4-s;o<u;o=o+4|0){r[i+o>>2|0]=e[n+o]<<24|e[n+o+1]<<16|e[n+o+2]<<8|e[n+o+3]}switch(f){case 3:t[i+u+1|0]=e[n+u+2];case 2:t[i+u+2|0]=e[n+u+1];case 1:t[i+u+3|0]=e[n+u]}};var o=function(e,t,r,a,i,o){var s=void 0,f=o%4,u=(i+f)%4,c=i-u;var h=new Uint8Array(n.readAsArrayBuffer(e.slice(a,a+i)));switch(f){case 0:t[o]=h[3];case 1:t[o+1-(f<<1)|0]=h[2];case 2:t[o+2-(f<<1)|0]=h[1];case 3:t[o+3-(f<<1)|0]=h[0]}if(i<u+(4-f)){return}for(s=4-f;s<c;s=s+4|0){r[o+s>>2|0]=h[s]<<24|h[s+1]<<16|h[s+2]<<8|h[s+3]}switch(u){case 3:t[o+c+1|0]=h[c+2];case 2:t[o+c+2|0]=h[c+1];case 1:t[o+c+3|0]=h[c]}};e.exports=function(e,t,n,s,f,u){if(typeof e==="string"){return a(e,t,n,s,f,u)}if(e instanceof Array){return i(e,t,n,s,f,u)}if(r&&r.Buffer&&r.Buffer.isBuffer(e)){return i(e,t,n,s,f,u)}if(e instanceof ArrayBuffer){return i(new Uint8Array(e),t,n,s,f,u)}if(e.buffer instanceof ArrayBuffer){return i(new Uint8Array(e.buffer,e.byteOffset,e.byteLength),t,n,s,f,u)}if(e instanceof Blob){return o(e,t,n,s,f,u)}throw new Error("Unsupported data type.")}},function(e,t,r){var n=function(){function e(e,t){for(var r=0;r<t.length;r++){var n=t[r];n.enumerable=n.enumerable||false;n.configurable=true;if("value"in n)n.writable=true;Object.defineProperty(e,n.key,n)}}return function(t,r,n){if(r)e(t.prototype,r);if(n)e(t,n);return t}}();function a(e,t){if(!(e instanceof t)){throw new TypeError("Cannot call a class as a function")}}var i=r(0);var o=r(1),s=o.toHex;var f=function(){function e(){a(this,e);this._rusha=new i;this._rusha.resetState()}e.prototype.update=function e(t){this._rusha.append(t);return this};e.prototype.digest=function e(t){var e=this._rusha.rawEnd().buffer;if(!t){return e}if(t==="hex"){return s(e)}throw new Error("unsupported digest encoding")};n(e,[{key:"state",get:function(){return this._rusha.getState()},set:function(e){this._rusha.setState(e)}}]);return e}();e.exports=function(){return new f}}])});
diff --git a/thank_you.php b/thank_you.php
deleted file mode 100644
index 67c8ffe..0000000
--- a/thank_you.php
+++ /dev/null
@@ -1,11 +0,0 @@
-<?php
-include('includes/common.php');
-if (preg_match('/'.$_SERVER['SERVER_NAME'].'/',$_SERVER['HTTP_REFERER']) && preg_match('/registration.php/', $_SERVER['HTTP_REFERER'])) {
- placeHeader("Account Created");
- echo "<p>Your account was scheduled for creation! In a few minutes you should receive an email with verification of your new account.</p>
-<p><em>If the account doesn't work after five minutes, please ask for help on the <a href='https://forums.themanaworld.org/viewforum.php?f=3'>Forums</a> or <a href='https://webchat.freenode.net/?channels=#themanaworld'>Support (IRC)</a>.</em></p>";
- placeFooter();
-} else {
- header("Location: /registration.php");
-}
-?>