ajout admin panel
This commit is contained in:
		
							parent
							
								
									1a2edcfee6
								
							
						
					
					
						commit
						b7885d20cf
					
				
							
								
								
									
										56
									
								
								mangosd.conf
									
									
									
									
									
								
							
							
						
						
									
										56
									
								
								mangosd.conf
									
									
									
									
									
								
							| @ -1,56 +0,0 @@ | |||||||
| 
 |  | ||||||
| ################################################################################################################### |  | ||||||
| # |  | ||||||
| #    GameType |  | ||||||
| #        Server realm style |  | ||||||
| #        0 = NORMAL; 1 = PVP; 4 = NORMAL; 6 = RP; 8 = RPPVP |  | ||||||
| #        also custom type: 16 FFA_PVP (free for all pvp mode like arena PvP in all zones except rest |  | ||||||
| #        activated places and sanctuaries) |  | ||||||
| # |  | ||||||
| #    RealmZone |  | ||||||
| #        Server realm zone (set allowed alphabet in character names/etc). See also Strict*Names options. |  | ||||||
| # |  | ||||||
| #        1 Development    - any language (Default) |  | ||||||
| #        2 United States  - extended-Latin |  | ||||||
| #        3 Oceanic        - extended-Latin |  | ||||||
| #        4 Latin America  - extended-Latin |  | ||||||
| #        5 Tournament     - basic-Latin at create, any at login |  | ||||||
| #        6 Korea          - East-Asian |  | ||||||
| #        7 Tournament     - basic-Latin at create, any at login |  | ||||||
| #        8 English        - extended-Latin |  | ||||||
| #        9 German         - extended-Latin |  | ||||||
| #        10 French        - extended-Latin |  | ||||||
| #        11 Spanish       - extended-Latin |  | ||||||
| #        12 Russian       - Cyrillic |  | ||||||
| #        13 Tournament    - basic-Latin at create, any at login |  | ||||||
| #        14 Taiwan        - East-Asian |  | ||||||
| #        15 Tournament    - basic-Latin at create, any at login |  | ||||||
| #        16 China         - East-Asian |  | ||||||
| #        17 CN1           - basic-Latin at create, any at login |  | ||||||
| #        18 CN2           - basic-Latin at create, any at login |  | ||||||
| #        19 CN3           - basic-Latin at create, any at login |  | ||||||
| #        20 CN4           - basic-Latin at create, any at login |  | ||||||
| #        21 CN5           - basic-Latin at create, any at login |  | ||||||
| #        22 CN6           - basic-Latin at create, any at login |  | ||||||
| #        23 CN7           - basic-Latin at create, any at login |  | ||||||
| #        24 CN8           - basic-Latin at create, any at login |  | ||||||
| #        25 Tournament    - basic-Latin at create, any at login |  | ||||||
| #        26 Test Server   - any language |  | ||||||
| #        27 Tournament    - basic-Latin at create, any at login |  | ||||||
| #        28 QA Server     - any language |  | ||||||
| #        29 CN9           - basic-Latin at create, any at login |  | ||||||
| # |  | ||||||
| #    RabbitDay |  | ||||||
| #        Set to Rabbit Day (date in unix time), only the day and month are considered, the year is not important |  | ||||||
| #        Default: 0 (off) |  | ||||||
| #        Suggested: 954547200 (April 1st, 2000) |  | ||||||
| # |  | ||||||
| #    Motd |  | ||||||
| #        Message of the Day. Displayed at worldlogin for every user ('@' for a newline). |  | ||||||
| # |  | ||||||
| #################################################################################################################### |  | ||||||
| 
 |  | ||||||
| GameType = 0 |  | ||||||
| RealmZone = 8 |  | ||||||
| RabbitDay = 954547200 |  | ||||||
| Motd = "Bienvenue en Azeroth!" |  | ||||||
| @ -1,22 +0,0 @@ | |||||||
| FROM php:8.2-apache |  | ||||||
| 
 |  | ||||||
| # Installer les dépendances nécessaires pour compiler les extensions PHP |  | ||||||
| RUN apt-get update && apt-get install -y \ |  | ||||||
|     unzip \ |  | ||||||
|     git \ |  | ||||||
|     libgmp-dev \ |  | ||||||
|     libzip-dev \ |  | ||||||
|     libxml2-dev \ |  | ||||||
|     default-mysql-client \ |  | ||||||
|     && docker-php-ext-install mysqli gmp soap \ |  | ||||||
|     && rm -rf /var/lib/apt/lists/* |  | ||||||
| 
 |  | ||||||
| # Installer composer |  | ||||||
| COPY --from=composer:2 /usr/bin/composer /usr/bin/composer |  | ||||||
| 
 |  | ||||||
| # Copier l'application |  | ||||||
| WORKDIR /var/www/html |  | ||||||
| COPY ./index.php ./srp6.php ./composer.json ./ |  | ||||||
| 
 |  | ||||||
| # Installer les dépendances PHP |  | ||||||
| RUN composer install --no-dev --optimize-autoloader |  | ||||||
| @ -1,15 +0,0 @@ | |||||||
| { |  | ||||||
|     "name": "wow/account-web", |  | ||||||
|     "description": "Web panel to create WoW accounts with SRP6 and OIDC authentication", |  | ||||||
|     "require": { |  | ||||||
|         "php": ">=8.0", |  | ||||||
|         "jumbojett/openid-connect-php": "^0.9.6", |  | ||||||
|         "ext-gmp": "*", |  | ||||||
|         "ext-mysqli": "*" |  | ||||||
|     }, |  | ||||||
|     "autoload": { |  | ||||||
|         "files": [ |  | ||||||
|             "srp6.php" |  | ||||||
|         ] |  | ||||||
|     } |  | ||||||
| } |  | ||||||
| @ -1,58 +0,0 @@ | |||||||
| <?php |  | ||||||
| require __DIR__ . '/vendor/autoload.php'; |  | ||||||
| 
 |  | ||||||
| use Jumbojett\OpenIDConnectClient; |  | ||||||
| 
 |  | ||||||
| // session_start();
 |  | ||||||
| 
 |  | ||||||
| // // --- OIDC login ---
 |  | ||||||
| // $oidc = new OpenIDConnectClient(
 |  | ||||||
| //     getenv('OIDC_ISSUER'),
 |  | ||||||
| //     getenv('OIDC_CLIENT_ID'),
 |  | ||||||
| //     getenv('OIDC_CLIENT_SECRET')
 |  | ||||||
| // );
 |  | ||||||
| 
 |  | ||||||
| // if (!isset($_SESSION['user'])) {
 |  | ||||||
| //     $oidc->authenticate();
 |  | ||||||
| //     $_SESSION['user'] = $oidc->getVerifiedClaims();
 |  | ||||||
| // }
 |  | ||||||
| 
 |  | ||||||
| // --- Formulaire pour créer un compte ---
 |  | ||||||
| if ($_SERVER['REQUEST_METHOD'] === 'POST') { |  | ||||||
|     $user = $_POST['username']; |  | ||||||
|     $pass = $_POST['password']; |  | ||||||
| 
 |  | ||||||
|     $soapUser = 'SOAPUSER'; |  | ||||||
|     $soapPass = 'SOAPPASS'; |  | ||||||
|     $host = getenv('SOAP_HOST'); |  | ||||||
|     $port = getenv('SOAP_PORT'); |  | ||||||
| 
 |  | ||||||
|     $command = "account create $user $pass"; |  | ||||||
|     $command = "account list"; |  | ||||||
| 
 |  | ||||||
|     $client = new SoapClient(NULL, [ |  | ||||||
|         "location" => "http://mangosd:7878/", |  | ||||||
|         "uri" => "urn:MaNGOS", |  | ||||||
|         "style" => SOAP_RPC, |  | ||||||
|         'login' => $soapUser, |  | ||||||
|         'password' => $soapPass |  | ||||||
|     ]); |  | ||||||
| 
 |  | ||||||
|     try { |  | ||||||
|         // NOTE : ne pas mettre de préfixe ns1:
 |  | ||||||
|         $result = $client->__soapCall('executeCommand', [new SoapParam($command, 'command')]); |  | ||||||
|         echo "✅ Command executed:\n"; |  | ||||||
|         echo $result; |  | ||||||
|         var_dump($result); |  | ||||||
|     } catch (Exception $e) { |  | ||||||
|         echo "❌ Command failed:\n"; |  | ||||||
|         echo $e->getMessage(); |  | ||||||
|     } |  | ||||||
| } |  | ||||||
| ?>
 |  | ||||||
| 
 |  | ||||||
| <form method="post"> |  | ||||||
|     <input type="text" name="username" placeholder="Username" required> |  | ||||||
|     <input type="password" name="password" placeholder="Password" required> |  | ||||||
|     <button type="submit">Create Account</button> |  | ||||||
| </form> |  | ||||||
							
								
								
									
										50
									
								
								php/srp6.php
									
									
									
									
									
								
							
							
						
						
									
										50
									
								
								php/srp6.php
									
									
									
									
									
								
							| @ -1,50 +0,0 @@ | |||||||
| <?php |  | ||||||
| /** |  | ||||||
|  * SRP6 (WoW/MaNGOS) – génération de v et s corrects. |  | ||||||
|  * Points clés : |  | ||||||
|  * - USERNAME & PASSWORD en MAJUSCULES |  | ||||||
|  * - x = SHA1( salt || SHA1(USER:PASS) ) |  | ||||||
|  * - N = 0x894B...E9BB7 (256-bit), g = 7 |  | ||||||
|  * - Endianness : on évite gmp_import et on passe par hex pour ne pas se tromper |  | ||||||
|  * - Hex MAJUSCULE + padding à la longueur de N |  | ||||||
|  */ |  | ||||||
| final class SRP6 |  | ||||||
| { |  | ||||||
|     // N et g utilisés par WoW (256-bit)
 |  | ||||||
|     private const N_HEX = '894B645E89E1535BBDAD5B8B290650530801B18EBFBF5E8FAB3C82872A3E9BB7'; |  | ||||||
|     private const G_HEX = '07'; |  | ||||||
| 
 |  | ||||||
|     public static function createVerifierAndSalt(string $username, string $password): array |  | ||||||
|     { |  | ||||||
|         $U = strtoupper($username); |  | ||||||
|         $P = strtoupper($password); |  | ||||||
| 
 |  | ||||||
|         // 32 octets de sel (=> 64 hex)
 |  | ||||||
|         $saltBin = random_bytes(32); |  | ||||||
| 
 |  | ||||||
|         // h1 = SHA1(U:P)
 |  | ||||||
|         $h1 = sha1($U . ':' . $P, true); |  | ||||||
| 
 |  | ||||||
|         // h2 = SHA1(salt || h1)
 |  | ||||||
|         $h2 = sha1($saltBin . $h1, true); |  | ||||||
| 
 |  | ||||||
|         // x = int( h2 ) (interprété comme un entier non signé big-endian)
 |  | ||||||
|         // -> on passe par l'hex pour éviter les soucis d'endianness
 |  | ||||||
|         $x = gmp_init(bin2hex($h2), 16); |  | ||||||
| 
 |  | ||||||
|         $N = gmp_init(self::N_HEX, 16); |  | ||||||
|         $g = gmp_init(self::G_HEX, 16); |  | ||||||
| 
 |  | ||||||
|         // v = g^x mod N
 |  | ||||||
|         $v = gmp_powm($g, $x, $N); |  | ||||||
| 
 |  | ||||||
|         // Longueur hex attendue = longueur de N en hex (ici 64 chars)
 |  | ||||||
|         $nLen = strlen(self::N_HEX); |  | ||||||
| 
 |  | ||||||
|         // Hex MAJUSCULE + padding
 |  | ||||||
|         $vHex = strtoupper(str_pad(gmp_strval($v, 16), $nLen, '0', STR_PAD_LEFT)); |  | ||||||
|         $sHex = strtoupper(str_pad(bin2hex($saltBin), 64, '0', STR_PAD_LEFT)); // 32 bytes => 64 hex
 |  | ||||||
| 
 |  | ||||||
|         return ['v' => $vHex, 's' => $sHex]; |  | ||||||
|     } |  | ||||||
| } |  | ||||||
							
								
								
									
										59
									
								
								soap.php
									
									
									
									
									
								
							
							
						
						
									
										59
									
								
								soap.php
									
									
									
									
									
								
							| @ -1,59 +0,0 @@ | |||||||
| <?php |  | ||||||
| /* |  | ||||||
|  * This file is part of the CMaNGOS Project. See AUTHORS file for Copyright information |  | ||||||
|  * |  | ||||||
|  * 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., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA |  | ||||||
|  */ |  | ||||||
| 
 |  | ||||||
| /** |  | ||||||
|  * MaNGOSsoap client example |  | ||||||
|  * |  | ||||||
|  * a simple example how to invoke commands using SOAP |  | ||||||
|  * |  | ||||||
|  * Make sure you enabled SOAP in your mangosd.conf! |  | ||||||
|  *  SOAP.Enabled = 1 |  | ||||||
|  */ |  | ||||||
| 
 |  | ||||||
| /* |  | ||||||
|  * $username and $password MUST be uppercase |  | ||||||
|  * account $username needs at least SEC_ADMINISTRATOR |  | ||||||
|  */ |  | ||||||
| $username = 'ADMINISTRATOR'; |  | ||||||
| $password = 'ADMINISTRATOR'; |  | ||||||
| 
 |  | ||||||
| $host = "localhost"; |  | ||||||
| $soapport = 7878; |  | ||||||
| $command = "server info"; |  | ||||||
| 
 |  | ||||||
| $client = new SoapClient(NULL, |  | ||||||
| array( |  | ||||||
|     "location" => "http://$host:$soapport/", |  | ||||||
|     "uri" => "urn:MaNGOS", |  | ||||||
|     "style" => SOAP_RPC, |  | ||||||
|     'login' => $username, |  | ||||||
|     'password' => $password |  | ||||||
| )); |  | ||||||
| 
 |  | ||||||
| try { |  | ||||||
|     $result = $client->executeCommand(new SoapParam($command, "command")); |  | ||||||
| 
 |  | ||||||
|     echo "Command succeeded! Output:<br />\n"; |  | ||||||
|     echo $result; |  | ||||||
| } |  | ||||||
| catch (Exception $e) |  | ||||||
| { |  | ||||||
|     echo "Command failed! Reason:<br />\n"; |  | ||||||
|     echo $e->getMessage(); |  | ||||||
| } |  | ||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user
	