From 294e5d28e70d1709520c3fbb78464edb557f638b Mon Sep 17 00:00:00 2001
From: wushin 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.
-
-
- Explore this large, ever expanding world to defeat monsters, help NPCs and team up
-with friends as you achieve your goals. Get your weapons, armor and equipment
-through quests, monsters or crafting. Play mini-games, go on complex investigations
-or slay powerful bosses. Hang out in town, socialize or attend player organized events.
-
-Wear your boots and grab your sword, adventure waits for you!
-
- Start in the powerful city-state of Tulimshar before heading out into the vast expanses
-of the desert. Get powerful and explore the small continent of Argaes where magic is
-born. In The Mana World you are an adventurer and monster slayer defending the people
-of the world from the threats created during the Great Quake. Even in the icy heights of
-Nivalis there is a call for your assistance to keep the world safe and to grow your
-potential.
-
- The Mage Council of Tulimshar has monitored events following the Great Quake and feel
-that something ominous is spreading throughout The Mana World. Monsters seem to of
-come out of every shadowy corner and petty dieties has begun to make presence in
-dark places. The council has made the call and you are just one of the many people
-that will battle the forces of evil, sending them back to the depths they came from.
-
- Be it warrior, archer or mage, you have answered the call from the leaders of the
-world to fight back the darkness that spread after the Great Quake. Starting in
-the Tonori desert, you battle your way to forests surrounding Hurnscald or the icy
-mountains surrounding Nivalis. Monsters have nowhere to hide.
-
- We are volunteer driven and encourage player participation in development. We have
-a long history of contributors. We try to make contributing to the game easy.
- The recommended client is available on the ManaPlus website. 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. For packagers (or for users who're interested), the branding files can be
- downloaded separately: For older versions please see our files
-page on SourceForge. Note however that these releases are no longer supported and
-likely to no longer work with our server. We no longer recommend music be installed directly,
-as it easily becomes out-of-date. To enable music in the client, make sure that "Download Music" is checked
-in the Audio tab of the Setup window. The latest version of the ManaPlus client is developed as part of the
-ManaPlus project and is available from the
-Git repositories on gitorious. For
-checking out the latest development version of the client you can use the
-command: For more instructions and information about other projects like the server
-and the dynamic data, please check our
-Git wiki
-page.
-
-
diff --git a/extensions/tmwa/TMWAccount.setup.php b/extensions/tmwa/TMWAccount.setup.php
new file mode 100644
index 0000000..a42b0fa
--- /dev/null
+++ b/extensions/tmwa/TMWAccount.setup.php
@@ -0,0 +1,47 @@
+socket = True;
+ }
+
+ public function account_exists($username) {
+ $dbr = wfGetDB(DB_SLAVE);
+ $res = $dbr->select('tmw_accounts', array('USERNAME'), 'USERNAME = "'.$username.'"', __METHOD__, array());
+ foreach ($res as $row) {
+ return True;
+ }
+ return False;
+ }
+
+ public function create_account($username, $userpass, $sex, $email) {
+ $dbw = wfGetDB(DB_MASTER);
+ $dbw->insert('tmw_accounts', array('USERNAME' => $username, 'PASSWORD' => $userpass, 'GENDER' => $sex, 'EMAIL' => $email), __METHOD__, 'IGNORE');
+ if ( $dbw->affectedRows() ) {
+ return True;
+ } else {
+ return False;
+ }
+ }
+
+ public function close() {
+ return True;
+ }
+}
diff --git a/extensions/tmwa/backend/libs/libladmin.php b/extensions/tmwa/backend/libs/libladmin.php
new file mode 100644
index 0000000..698e898
--- /dev/null
+++ b/extensions/tmwa/backend/libs/libladmin.php
@@ -0,0 +1,139 @@
+packets = $tmwa->packets;
+
+ $address = gethostbyname($wgLadminHost);
+ $socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
+ socket_set_option($socket, SOL_SOCKET, SO_RCVTIMEO, array('sec' => 5, 'usec' => 0));
+ socket_set_option($socket, SOL_SOCKET, SO_SNDTIMEO, array('sec' => 5, 'usec' => 0));
+ if ($socket === False) {
+ $this->socket = False;
+ return False;
+ }
+ if(socket_connect($socket, $address, $wgLadminPort)) {
+ $this->socket = $socket;
+ if (self::admin_login()) {
+ return True;
+ }
+ }
+ $this->socket = False;
+ return False;
+ }
+
+ private function ladmin_sendrecv($packet_data) {
+ $packet_send = '';
+ foreach ($this->packets[$packet_data['packet']]['packet'] as $pack_name => $pack_item) {
+ $packet_send .= pack($pack_item, $packet_data[$pack_name]);
+ }
+ socket_write($this->socket, $packet_send);
+ $packet_send = '';
+ socket_recv($this->socket, $packet_pack, 2, MSG_PEEK);
+ $packet_recv = unpack('vpacket/', $packet_pack);
+ socket_recv($this->socket, $packet_pack, $this->packets[$packet_recv['packet']]['len'], MSG_DONTWAIT);
+ $unpack_payload = '';
+ foreach ($this->packets[$packet_recv['packet']]['packet'] as $pack_name => $pack_item) {
+ $unpack_payload .= $pack_item.$pack_name.'/';
+ }
+ $payload_recv = unpack($unpack_payload, $packet_pack);
+ return $payload_recv;
+ }
+
+ private function admin_login() {
+ // Admin Login
+ $login_response = self::ladmin_sendrecv(array('packet' => 0x7918, 'encryption_zero' => 0,'account_pass' => get_cfg_var("tmwa.cfg.LADMIN_PASS")));
+ if($login_response['error'] != 0) {
+ return False;
+ }
+ return self::login_version();
+ }
+
+ private function login_version() {
+ // Login version
+ $packet_data['packet'] = 0x7530;
+ return self::ladmin_sendrecv($packet_data);
+ }
+
+ private function add_account($args) {
+ // Add Account
+ $packet_data['packet'] = 0x7930;
+ $user_check = self::ladmin_sendrecv(array_merge($packet_data, $args));
+ return ($user_check['account_id'] > 0 ? True : False);
+ }
+
+ private function check_password($args) {
+ // Check Password
+ $packet_data['packet'] = 0x793a;
+ $user_check = self::ladmin_sendrecv(array_merge($packet_data, $args));
+ return ($user_check['account_id'] > 0 ? True : False);
+ }
+
+ private function who_account($args) {
+ // Who Account
+ $packet_data['packet'] = 0x7952;
+ return self::ladmin_sendrecv(array_merge($packet_data, $args));
+ }
+
+ private function change_password($args) {
+ // Change Password
+ $packet_data['packet'] = 0x7934;
+ $pass_result = self::ladmin_sendrecv(array_merge($packet_data, $args));
+ return ($pass_result['account_id'] > 0 ? True : False);
+ }
+
+ public function close() {
+ socket_close($this->socket);
+ }
+
+ public function account_info($username) {
+ $args = array('account_name' => $username);
+ $account_info = self::who_account($args);
+ return $account_info;
+ }
+
+ public function account_exists($username) {
+ $args = array('account_name' => $username);
+ $user_name_exists = self::who_account($args);
+ return ($user_name_exists['account_id'] > 0 ? True : False);
+ }
+
+ public function check_auth($username, $userpass) {
+ $args = array('account_name' => $username, 'account_password' => $userpass);
+ return self::check_password($args);
+ }
+
+ public function check_ban($username) {
+ $account_info = self::account_info($username);
+ if ($account_info['state'] > 0) {
+ return True;
+ } elseif ($account_info['ban_until'] > 0) {
+ return True;
+ }
+ return False;
+ }
+
+ public function change_pass($username, $userpass) {
+ $args = array('account_name' => $username, 'account_password' => $userpass);
+ return self::change_password($args);
+ }
+
+ public function reset_password($username, $userpass, $newuserpass) {
+ $args = array('account_name' => $username, 'account_password' => $userpass);
+ $user_check = self::check_password($args);
+ return ($user_check ? self::change_pass($username, $newuserpass) : False);
+ }
+
+ public function create_account($username, $userpass, $sex, $email) {
+ $user_name_exists = self::account_exists($username);
+ $args = array('account_name' => $username, 'account_password' => $userpass, 'sex' => $sex, 'email' => $email);
+ return (!$user_name_exists ? self::add_account($args) : False);
+ }
+}
diff --git a/extensions/tmwa/backend/libs/libtmwauth.php b/extensions/tmwa/backend/libs/libtmwauth.php
new file mode 100644
index 0000000..33a4331
--- /dev/null
+++ b/extensions/tmwa/backend/libs/libtmwauth.php
@@ -0,0 +1,300 @@
+
+ * http://www.mediawiki.org/
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ */
+
+/**
+ * Authentication plugin interface. Instantiate a subclass of AuthPlugin
+ * and set $wgAuth to it to authenticate against some external tool.
+ *
+ * The default behavior is not to do anything, and use the local user
+ * database for all authentication. A subclass can require that all
+ * accounts authenticate externally, or use it only as a fallback; also
+ * you can transparently create internal wiki accounts the first time
+ * someone logs in who can be authenticated externally.
+ */
+class TMWAuth extends AuthPlugin {
+ /**
+ * Check whether there exists a user account with the given name.
+ * The name will be normalized to MediaWiki's requirements, so
+ * you might need to munge it (for instance, for lowercase initial
+ * letters).
+ *
+ * @param $username String: username.
+ * @return bool
+ */
+ public function userExists( $username ) {
+ global $wgTMWAccountLib;
+ $ladmin = New $wgTMWAccountLib();
+ $user_exists = ($ladmin->check_ban($username, $password) ? False : $ladmin->check_auth($username, $password));
+ $ladmin->close();
+ return $user_exists;
+ }
+
+ /**
+ * Check if a username+password pair is a valid login.
+ * The name will be normalized to MediaWiki's requirements, so
+ * you might need to munge it (for instance, for lowercase initial
+ * letters).
+ *
+ * @param $username String: username.
+ * @param $password String: user password.
+ * @return bool
+ */
+ public function authenticate( $username, $password ) {
+ global $wgTMWAccountLib;
+ $ladmin = New $wgTMWAccountLib();
+ $auth_result = $ladmin->check_auth($username, $password);
+ $ladmin->close();
+ return $auth_result;
+ }
+
+ /**
+ * Modify options in the login template.
+ *
+ * @param $template UserLoginTemplate object.
+ * @param $type String 'signup' or 'login'. Added in 1.16.
+ */
+ public function modifyUITemplate( &$template, &$type ) {
+ $template->set( 'usedomain', False );
+ }
+
+ /**
+ * Set the domain this plugin is supposed to use when authenticating.
+ *
+ * @param $domain String: authentication domain.
+ */
+ public function setDomain( $domain ) {
+ $this->domain = $domain;
+ }
+
+ /**
+ * Check to see if the specific domain is a valid domain.
+ *
+ * @param $domain String: authentication domain.
+ * @return bool
+ */
+ public function validDomain( $domain ) {
+ # Override this!
+ return True;
+ }
+
+ /**
+ * When a user logs in, optionally fill in preferences and such.
+ * For instance, you might pull the email address or real name from the
+ * external user database.
+ *
+ * The User object is passed by reference so it can be modified; don't
+ * forget the & on your function declaration.
+ *
+ * @param $user User object
+ */
+ public function updateUser( &$user ) {
+ # Override this and do something
+ return True;
+ }
+
+ /**
+ * Return True if the wiki should create a new local account automatically
+ * when asked to login a user who doesn't exist locally but does in the
+ * external auth database.
+ *
+ * If you don't automatically create accounts, you must still create
+ * accounts in some way. It's not possible to authenticate without
+ * a local account.
+ *
+ * This is just a question, and shouldn't perform any actions.
+ *
+ * @return Boolean
+ */
+ public function autoCreate() {
+ return True;
+ }
+
+ /**
+ * Allow a property change? Properties are the same as preferences
+ * and use the same keys. 'Realname' 'Emailaddress' and 'Nickname'
+ * all reference this.
+ *
+ * @param $prop string
+ *
+ * @return Boolean
+ */
+ public function allowPropChange( $prop = '' ) {
+ if ( $prop == 'realname' && is_callable( array( $this, 'allowRealNameChange' ) ) ) {
+ return $this->allowRealNameChange();
+ } elseif ( $prop == 'emailaddress' && is_callable( array( $this, 'allowEmailChange' ) ) ) {
+ return $this->allowEmailChange();
+ } elseif ( $prop == 'nickname' && is_callable( array( $this, 'allowNickChange' ) ) ) {
+ return $this->allowNickChange();
+ } else {
+ return True;
+ }
+ }
+
+ /**
+ * Can users change their passwords?
+ *
+ * @return bool
+ */
+ public function allowPasswordChange() {
+ return True;
+ }
+
+ /**
+ * Should MediaWiki store passwords in its local database?
+ *
+ * @return bool
+ */
+ public function allowSetLocalPassword() {
+ return True;
+ }
+
+ /**
+ * Set the given password in the authentication database.
+ * As a special case, the password may be set to null to request
+ * locking the password to an unusable value, with the expectation
+ * that it will be set later through a mail reset or other method.
+ *
+ * Return True if successful.
+ *
+ * @param $user User object.
+ * @param $password String: password.
+ * @return bool
+ */
+ public function setPassword( $user, $password ) {
+ global $wgTMWAccountLib;
+ $ladmin = New $wgTMWAccountLib();
+ $set_pass_res = $ladmin->change_pass($user, $password);
+ $ladmin->close();
+ return $set_pass_res;
+ }
+
+ /**
+ * Update user information in the external authentication database.
+ * Return True if successful.
+ *
+ * @param $user User object.
+ * @return Boolean
+ */
+ public function updateExternalDB( $user ) {
+ return False;
+ }
+
+ /**
+ * Check to see if external accounts can be created.
+ * Return True if external accounts can be created.
+ * @return Boolean
+ */
+ public function canCreateAccounts() {
+ return True;
+ }
+
+ /**
+ * Add a user to the external authentication database.
+ * Return True if successful.
+ *
+ * @param $user User: only the name should be assumed valid at this point
+ * @param $password String
+ * @param $email String
+ * @param $realname String
+ * @return Boolean
+ */
+ public function addUser( $user, $password, $email = '', $realname = '' ) {
+ global $wgTMWAccountLib;
+ // Gender is currently hard set
+ $sex = 'M';
+ $ladmin = New $wgTMWAccountLib();
+ $add_user_res = $ladmin->create_account($user, $password, $sex, $email);
+ $ladmin->close();
+ return $add_user_res;
+ }
+
+ /**
+ * Return True to prevent logins that don't authenticate here from being
+ * checked against the local database's password fields.
+ *
+ * This is just a question, and shouldn't perform any actions.
+ *
+ * @return Boolean
+ */
+ public function strict() {
+ return False;
+ }
+
+ /**
+ * Check if a user should authenticate locally if the global authentication fails.
+ * If either this or strict() returns True, local authentication is not used.
+ *
+ * @param $username String: username.
+ * @return Boolean
+ */
+ public function strictUserAuth( $username ) {
+ return False;
+ }
+
+ /**
+ * When creating a user account, optionally fill in preferences and such.
+ * For instance, you might pull the email address or real name from the
+ * external user database.
+ *
+ * The User object is passed by reference so it can be modified; don't
+ * forget the & on your function declaration.
+ *
+ * @param $user User object.
+ * @param $autocreate Boolean: True if user is being autocreated on login
+ */
+ public function initUser( &$user, $autocreate = False ) {
+ # Override this to do something.
+ }
+
+ /**
+ * If you want to munge the case of an account name before the final
+ * check, now is your chance.
+ */
+ public function getCanonicalName( $username ) {
+ return ucwords(strtolower($username));
+ }
+
+ /**
+ * Get an instance of a User object
+ *
+ * @param $user User
+ *
+ * @return AuthPluginUser
+ */
+ public function getUserInstance( User &$user ) {
+ return new AuthPluginUser( $user );
+ }
+
+ /**
+ * Get a list of domains (in HTMLForm options format) used.
+ *
+ * @return array
+ */
+ public function domainList() {
+ return array();
+ }
+}
+?>
diff --git a/extensions/tmwa/backend/models/account.php b/extensions/tmwa/backend/models/account.php
new file mode 100644
index 0000000..7f5b0fe
--- /dev/null
+++ b/extensions/tmwa/backend/models/account.php
@@ -0,0 +1,127 @@
+account_exists($str);
+ $ladmin->close();
+ return $ladmin_result;
+ }
+
+ public function setUsername($name){ $this->username = $name; }
+ public function setPassword1($pwd){ $this->password1 = $pwd; }
+ public function setPassword2($pwd){ $this->password2 = $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->password1) < 4) {
+ $errors[] = "Password is too short";
+ }
+
+ if (strlen($this->password1) >= 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 (!filter_var($this->email, FILTER_VALIDATE_EMAIL)) {
+ $errors[] = "EMail is not valid";
+ }
+
+ if (!self::check_chars($this->username)) {
+ $errors[] = 'Username contains invalid characters. With this form you can register for a new account. 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. Security warning: Do not use the same username and password on two different servers. It happened a lot in the past that users of the official server got "hacked" because they ignored this important precaution. Your account was created! In a few minutes you should receive an email with verification of your new account. If the account doesn't work, please ask for help on the Forums or Support (IRC). The Mana World Account service is currently offlineplease ask for help on the Forums or Support (IRC). 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. With this form you can register for a new account. Note that you also need to download Manaplus, The Mana World's official client, and run it to log in and play. 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 (further information). Security warning: 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
-past that users of the official server got "hacked" because they ignored this
-important precaution.Description
-Story
-Contributors
-
-
Get Involved!
-
Current Contributors
-
Past Contributors
-
-
diff --git a/default.css b/default.css
deleted file mode 100644
index 42bbdef..0000000
--- a/default.css
+++ /dev/null
@@ -1,383 +0,0 @@
-body {
- background-color: #eeeeee;
- margin: 0px;
- font-family: sans-serif;
-}
-
-a {
- text-decoration: none;
- color: rgb(100,10,10);
-}
-
-a:visited {
- color: rgb(60,0,0);
-}
-
-a:hover {
- text-decoration: underline;
-}
-
-hr {
- border-style: none;
- height: 1px;
- background-color: silver;
- color: silver;
-}
-
-body, div, p, td, li, h1, h2, h3, h4 {
- font-family: sans-serif;
- font-size: 10pt;
-}
-
-h1 {
- background-image: url(images/header.png);
- background-repeat: no-repeat;
- position: absolute;
- width: 543px;
- height: 210px;
- margin: 0px;
- top: 0px;
- border: 0px solid green;
-}
-
-#page {
- margin-right: 10%;
- min-width: 650px;
-}
-
-#page h1 span {
- display: none;
-}
-
-#irc_info {
- font-size: 8pt;
- text-align: right;
- height: 45px;
- margin-top: 120px;
- margin-right: 4px;
-}
-
-#main_topleft {
- border: 0px dashed green;
- background-image: url(images/main_topleft.png);
- background-position: top left;
- background-repeat: no-repeat;
-}
-
-#main_rightrepeat {
- margin-left: 98px;
- background-image: url(images/main_rightrepeat.png);
- background-position: right;
- background-repeat: repeat-y;
-
- /* A one pixel padding to make IE render correctly
- (the underscore is a hack to make only IE 5-6 see it) */
- _padding-bottom: 1px;
-}
-
-#main_topright {
- background-image: url(images/main_topright.png);
- background-position: top right;
- background-repeat: no-repeat;
-}
-
-#main_bottomright {
- background-image: url(images/main_bottomright.png);
- background-position: bottom right;
- background-repeat: no-repeat;
-}
-
-#main {
- border: 0px dashed purple;
- padding: 0px 4px 0px 0px;
-}
-
-#main .main_title_topright {
- background-image: url(images/main_title_topright.png);
- background-position: top right;
- background-repeat: no-repeat;
- background-color: #f2ebe7;
- margin: 0px 0px 20px -9px;
-}
-
-#main .main_title_bottomright {
- background-image: url(images/main_title_bottomright.png);
- background-position: bottom right;
- background-repeat: no-repeat;
-
- /* A one pixel padding to make IE render correctly
- (the underscore is a hack to make only IE 5-6 see it) */
- _padding-bottom: 1px;
-}
-
-#main .main_title_topleft {
- background-image: url(images/main_title_topleft.png);
- background-repeat: no-repeat;
-}
-
-#main h2 {
- padding: 7px 7px 7px 107px;
- margin: 0px;
- color: #57565c;
- font-size: 16pt;
-}
-
-#main h3 {
- margin: 20px 0px 0px 0px;
- font-weight: bold;
- color: #3c3c3c;
- border-bottom: 1px solid #9f9894;
- /*
- border-right: 1px solid #9f9894;
- border-top: 1px solid #f2e6df;
- border-left: 1px solid #f2e6df;
- */
- font-size: 12pt;
- /*
- background-color: #d1c7c0;
- padding: 2px 5px 2px 5px;
- */
-}
-
-#sidebar {
- border: 0px dashed red;
- float: right;
- width: 170px;
- padding-top: 2px;
-}
-
-#sidebar .section {
- padding: 7px;
-}
-
-#sidebar .section h3 {
- text-align: center;
- font-weight: bold;
- font-size: 8pt;
- margin: 0px 0px 50px 0px;
- padding: 0px;
- border-width: 0px;
- color: #2f2e32;
-}
-
-#sidebar .section_topleft {
- margin: 10px;
- background-image: url(images/section_topleft.png);
- background-position: top left;
- background-repeat: no-repeat;
- background-color: #cba083;
-
- /* A one pixel padding to make IE render correctly
- (the underscore is a hack to make only IE 5-6 see it) */
- _padding-bottom: 1px;
-}
-
-#sidebar .section_bottomleft {
- background-image: url(images/section_bottomleft.png);
- background-position: bottom left;
- background-repeat: no-repeat;
-}
-
-#sidebar .section_topright {
- background-image: url(images/section_topright.png);
- background-position: top right;
- background-repeat: no-repeat;
-}
-
-#sidebar .section_bottomright {
- background-image: url(images/section_bottomright.png);
- background-position: bottom right;
- background-repeat: no-repeat;
-}
-
-#sidebar .section ul {
- margin: 0px;
- padding: 0px;
-}
-
-#sidebar .section li {
- list-style: none;
- margin: 0px;
-}
-
-#sidebar .section li a {
- font-size: 12px;
- display: block;
- margin: 0px;
- width: auto;
- border: 1px solid #cba083;
- text-decoration: none;
- padding: 5px 5px 5px 20px;
- margin: 0px;
- color: black;
- font-style: normal;
- font-weight: bold;
- color: #2f2e32;
-
- /* Setting a background color fixes a strange hover issue with IE 7 */
- background-color: #cba083;
-}
-
-#sidebar .section li a:hover {
- border: 1px solid #78584c;
- background-color: #dbbba4;
-}
-
-#sidebar .banners {
- text-align: center;
- padding: 13px 7px 8px 7px;
-}
-
-#sidebar .banners img {
- border-width: 0px;
- margin-bottom: 5px;
- vertical-align: text-bottom;
-}
-
-#contents_leftrepeat {
- background-image: url(images/contents_leftrepeat.png);
- background-repeat: repeat-y;
- background-color: #e1d6cf;
- margin: 0px 170px 0px 0px;
-}
-
-#contents_topleft {
- background-image: url(images/contents_topleft.png);
- background-repeat: no-repeat;
- border: 0px dashed red;
-}
-
-#contents_bottomleft {
- background-image: url(images/contents_bottomleft.png);
- background-position: bottom left;
- background-repeat: no-repeat;
-}
-
-#contents_rightrepeat {
- background-image: url(images/contents_rightrepeat.png);
- background-position: right;
- background-repeat: repeat-y;
-}
-
-#contents_topright {
- background-image: url(images/contents_topright.png);
- background-position: top right;
- background-repeat: no-repeat;
-}
-
-#contents_bottomright {
- background-image: url(images/contents_bottomright.png);
- background-position: bottom right;
- background-repeat: no-repeat;
-}
-
-#contents {
- padding: 12px 8px 175px 21px;
- border: 0px solid blue;
- line-height: 150%;
-}
-
-#contents p, table, pre {
- margin: 0px 40px 5px 30px;
-}
-
-#contents h4 {
- margin-left: 30px;
- margin-bottom: 0px;
-}
-
-#contents ul {
- margin: 0px 40px 0px 20px;
-}
-
-#contents table {
- border-top: 1px solid #9f9894;
- border-bottom: 1px solid #9f9894;
-}
-
-#contents td {
- border-bottom: 1px dotted #9f9894;
- padding: 3px 10px 3px 3px;
-}
-
-#contents tr.last td {
- border-width: 0px;
-}
-
-#footer {
- font-size: 8pt;
- text-align: right;
- padding: 5px;
-}
-
-.news {
- margin-bottom: 30px;
-}
-
-.news_body {
-}
-
-.news_date {
- font-style: italic;
- float: right;
- color: #57565c;
- font-size: 8pt;
-}
-
-.news_author {
- font-size: 8pt;
- color: #57565c;
- border-bottom: 1px solid #9f9894;
-}
-
-.releases {
- margin: 15px 40px 15px 30px;
-}
-
-.release {
- background-color: #ede2da;
- margin: 5px;
- padding: 5px 5px 5px 15px;
- white-space: nowrap;
- border-radius: 10px;
-}
-
-.releases img {
- vertical-align: middle;
- margin-right: 5px;
- width: 16px;
- height: 16px;
-}
-
-div.read-more {
- text-align:right;
-}
-
-a.more {
- display: block;
- margin: 0px;
- width: auto;
- padding: 5px 5px 5px 20px;
- margin: 0px;
- color: black;
- font-style: normal;
- font-weight: bold;
- color: #2f2e32;
-}
-
-/* Gallery style */
-#pagenumbers {
- text-align: center;
- margin: 0px 1em 0px 1em;
-}
-
-#pictures a img {
- border: 1px solid #c7b1a3;
- border-bottom-width: 2px;
- border-right-width: 2px;
- margin: 5px;
-}
-
-#pictures a:hover img {
- border-color: #a88976;
-}
diff --git a/downloads.php b/downloads.php
deleted file mode 100644
index 561153b..0000000
--- a/downloads.php
+++ /dev/null
@@ -1,75 +0,0 @@
-
-
-ManaPlus client
-The Mana World packages
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Music
-
-Development versions
-
-
-git clone git://gitorious.org/manaplus/manaplus.git
-
-
-
'.self::BAD_STRING_DESC;
+ }
+
+ if (!self::check_chars($this->password1)) {
+ $errors[] = 'Password contains invalid characters.
'.self::BAD_STRING_DESC;
+ }
+
+ if ($this->password1 != $this->password2)
+ {
+ $errors[] = "The given passwords don't match!";
+ }
+
+ if ($this->gender != self::GENDER_MALE &&
+ $this->gender != self::GENDER_FEMALE )
+ {
+ $errors[] = 'Gender has to be Male or Female!';
+ }
+
+ if (!filter_var($this->email, FILTER_VALIDATE_EMAIL))
+ {
+ $errors[] = 'EMail has wrong format.';
+ }
+
+ if (self::existsUsername($this->username))
+ {
+ $errors[] = "The username is in use!";
+ }
+
+ if (count($errors) > 0)
+ {
+ return $errors;
+ }
+ return null;
+ }
+
+ public function check_chars($string) {
+ return ctype_alnum($string) && (strpos($string, '"') === FALSE);
+ }
+
+ private function sendEMail() {
+ $email = New TMWMail();
+ $email->mail_to = $this->email;
+ $email->subject = "The Mana World Registration";
+ $data = "== Account Created ==\n";
+ $data .= " Welcome ".$this->username." 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";
+ $email->getEmailTemplate($data);
+
+ return $email->sendEMail();
+ }
+
+ public function createAccount()
+ {
+ global $wgTMWAccountLib;
+ $ladmin = New $wgTMWAccountLib;
+ $ladmin_result = $ladmin->create_account($this->username, $this->password1, $this->gender, $this->email);
+ $ladmin->close();
+ if($ladmin_result) {
+ $this->sendEMail();
+ return true;
+ } else {
+ return false;
+ }
+ }
+}
+?>
diff --git a/extensions/tmwa/backend/models/email.php b/extensions/tmwa/backend/models/email.php
new file mode 100644
index 0000000..29f1a1c
--- /dev/null
+++ b/extensions/tmwa/backend/models/email.php
@@ -0,0 +1,87 @@
+mail_to = '';
+ $this->boundary = uniqid('np');
+ $this->subject = '';
+ $this->headers = "From: Accounts <".$wgTMWAccountEmail.">\r\nReply-To: Accounts <".$wgTMWAccountEmail.">\r\n";
+ $this->message = "";
+ }
+
+ public function sendEMail() {
+ return mail($this->mail_to,$this->subject,$this->message,$this->headers);
+ }
+
+ public function appendheaders($headers) {
+ $this->headers .= $headers;
+ }
+
+ public function appendmessage($message) {
+ $this->message .= $message;
+ }
+
+ public function getEmailTemplate($emailText) {
+ self::appendheaders("MIME-Version: 1.0\r\nContent-type: multipart/alternative;boundary=".$this->boundary."\r\n");
+ $data = "This is a MIME encoded message.";
+
+ $data .= "\r\n\r\n--" . $this->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--" . $this->boundary . "\r\n";
+ $data .= "Content-type: text/html;charset=utf-8\r\n\r\n";
+
+ $data .= '
+ '.nl2br($emailText).'
+
To obtain a wiki account, you must register here: \'\'\'[[Special:RequestAccount|Wiki Account]]\'\'\'.',
+);
diff --git a/extensions/tmwa/frontend/news.php b/extensions/tmwa/frontend/news.php
new file mode 100644
index 0000000..a214ea2
--- /dev/null
+++ b/extensions/tmwa/frontend/news.php
@@ -0,0 +1,41 @@
+getRequest();
+ $output = $this->getOutput();
+ $this->setHeaders();
+
+ $wikitext = self::printNews();
+
+ $output->addWikiText( $wikitext );
+ }
+ // Parses news.html
+ // displays feed
+ public function printNews($num='all') {
+ global $wgTMWNews;
+ $count = 0;
+ $content = "";
+ $handle = @fopen($wgTMWNews, "r");
+ if ($handle) {
+ while (($buffer = fgets($handle, 4096)) !== false) {
+ $content .= $buffer;
+ if (preg_match('/<\/div>/',$buffer)) {
+ $count++;
+ }
+ if ($count == $num && $num != 'all') {
+ $content .= '';
+ break 1;
+ }
+ }
+ }
+ $output = $this->getOutput();
+ $output->addHTML($content);
+ fclose($handle);
+ }
+}
+?>
diff --git a/extensions/tmwa/frontend/registration.php b/extensions/tmwa/frontend/registration.php
new file mode 100644
index 0000000..d66b701
--- /dev/null
+++ b/extensions/tmwa/frontend/registration.php
@@ -0,0 +1,106 @@
+err = array();
+ parent::__construct('GameAccount');
+ }
+
+ public function execute( $par ) {
+ $request = $this->getRequest();
+ $output = $this->getOutput();
+ $this->setHeaders();
+ global $wgTMWAccountLib;
+ $check_ladmin = new $wgTMWAccountLib();
+ if($check_ladmin->socket) {
+ $check_ladmin->close();
+ if(!self::processForm($request)) {
+ $wikitext = self::showForm();
+ $output->addWikiText($wikitext);
+ }
+ } else {
+ $wikitext = self::accountsOffline();
+ $output->addWikiText($wikitext);
+ }
+ }
+
+ public function processForm($request) {
+ if ($request->getText('register') == "true") {
+ $acc = new TMWAccount();
+ $acc->setUsername($request->getText('username'));
+ $acc->setPassword1($request->getText('password1'));
+ $acc->setPassword2($request->getText('password2'));
+ $acc->setEMail($request->getText('email'));
+ $acc->setGender($request->getText('gender'));
+
+ $this->err = $acc->validate();
+ global $wgCaptchaClass;
+ global $wgCaptchaClass, $wgConfirmAccountCaptchas;
+ if ($wgConfirmAccountCaptchas) {
+ $captcha = new $wgCaptchaClass;
+ if (!$captcha->passCaptcha()) {
+ $this->err[] = "The captcha was incorrect!";
+ }
+ }
+ if (count($this->err) > 0) {
+ return false;
+ }
+ // create the account
+ if (!$acc->createAccount()) {
+ $this->err[] = "The was an unknown error while creating the account";
+ return false;
+ } else {
+ self::showSuccess();
+ return true;
+ }
+ }
+ return false;
+ }
+
+ public function showForm() {
+ $output = $this->getOutput();
+ $form = ('The Mana World
- =$page_title?>
- The Mana World Project
-Recent News
-
-
-The url for the email is:
- echo recaptcha_mailhide_url ($mailhide_pubkey, $mailhide_privkey, "example@example.com"); ?>
-
-
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 @@
-
\ 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 @@
- $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 https://www.google.com/recaptcha/admin/create");
- }
-
- if ($use_ssl) {
- $server = RECAPTCHA_API_SECURE_SERVER;
- } else {
- $server = RECAPTCHA_API_SERVER;
- }
-
- $errorpart = "";
- if ($error) {
- $errorpart = "&error=" . $error;
- }
- return '
-
- ';
-}
-
-
-
-
-/**
- * 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 https://www.google.com/recaptcha/admin/create");
- }
-
- 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 http://www.google.com/recaptcha/mailhide/apikey");
- }
-
-
- $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]) . "...@" . htmlentities ($emailparts [1]);
-
-}
-
-
-?>
diff --git a/registration.php b/registration.php
deleted file mode 100644
index 8a5c49e..0000000
--- a/registration.php
+++ /dev/null
@@ -1,155 +0,0 @@
-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 . "
";
- }
- $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");
-
-?>
-
If the account doesn't work after five minutes, please ask for help on the Forums or Support (IRC).
"; - placeFooter(); -} else { - header("Location: /registration.php"); -} -?> -- cgit v1.2.3-60-g2f50