Untitled
unknown
php
3 years ago
7.0 kB
4
Indexable
<?php /* Discord Oauth v.4.1 * This file contains the core functions of the oauth2 script. * @author : MarkisDev * @copyright : https://markis.dev */ # Starting session so we can store all the variables session_start(); # Setting the base url for API requests $GLOBALS['base_url'] = "https://discord.com"; # Setting bot token for related requests $GLOBALS['bot_token'] = ""; $bot_token = ""; # A function to generate a random string to be used as state | (protection against CSRF) function gen_state() { $_SESSION['state'] = bin2hex(openssl_random_pseudo_bytes(12)); return $_SESSION['state']; } # A function to generate oAuth2 URL for logging in function url($clientid, $redirect, $scope) { $state = gen_state(); return 'https://discordapp.com/api/oauth2/authorize?response_type=code&client_id=' . $clientid . '&redirect_uri=' . $redirect . '&scope=' . $scope . "&state=" . $state; } # A function to initialize and store access token in SESSION to be used for other requests function init($redirect_url, $client_id, $client_secret, $bot_token) { if ($bot_token) $GLOBALS['bot_token'] = $bot_token; $code = $_GET['code']; $state = $_GET['state']; # Check if $state == $_SESSION['state'] to verify if the login is legit | CHECK THE FUNCTION get_state($state) FOR MORE INFORMATION. $url = $GLOBALS['base_url'] . "/api/oauth2/token"; $data = array( "client_id" => $client_id, "client_secret" => $client_secret, "grant_type" => "authorization_code", "code" => $code, "redirect_uri" => $redirect_url ); $curl = curl_init(); curl_setopt($curl, CURLOPT_URL, $url); curl_setopt($curl, CURLOPT_POST, true); curl_setopt($curl, CURLOPT_POSTFIELDS, http_build_query($data)); curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); $response = curl_exec($curl); curl_close($curl); $results = json_decode($response, true); $_SESSION['access_token'] = $results['access_token']; } # A function to get user information | (identify scope) function get_user() { if(isset( $_GET['error'] )) { return; } $url = $GLOBALS['base_url'] . "/api/users/@me"; $headers = array('Content-Type: application/x-www-form-urlencoded', 'Authorization: Bearer ' . $_SESSION['access_token']); $curl = curl_init(); curl_setopt($curl, CURLOPT_URL, $url); curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); curl_setopt($curl, CURLOPT_HTTPHEADER, $headers); $response = curl_exec($curl); curl_close($curl); $results = json_decode($response, true); $_SESSION['user'] = $results; $_SESSION['username'] = $results['username']; $_SESSION['discrim'] = $results['discriminator']; $_SESSION['user_id'] = $results['id']; $_SESSION['user_avatar'] = $results['avatar']; $_SESSION['email'] = $results['email']; $_SESSION['mfa_enabled'] = $results['mfa_enabled']; $_SESSION['user_verified'] = $results['verified']; } function get_guilds() { $url = $GLOBALS['base_url'] . "/api/users/@me/guilds"; $headers = array('Content-Type: application/x-www-form-urlencoded', 'Authorization: Bearer ' . $_SESSION['access_token']); $curl = curl_init(); curl_setopt($curl, CURLOPT_URL, $url); curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); curl_setopt($curl, CURLOPT_HTTPHEADER, $headers); $response = curl_exec($curl); $status = curl_getinfo($curl, CURLINFO_HTTP_CODE); curl_close($curl); $results = json_decode($response, true); return $results; } # A function to fetch information on a single guild | (requires bot token) function get_guild($id) { $url = $GLOBALS['base_url'] . "/api/guilds/$id"; $headers = array('Content-Type: application/x-www-form-urlencoded', 'Authorization: Bot ' . $GLOBALS['bot_token']); $curl = curl_init(); curl_setopt($curl, CURLOPT_URL, $url); curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); curl_setopt($curl, CURLOPT_HTTPHEADER, $headers); $response = curl_exec($curl); curl_close($curl); $results = json_decode($response, true); return $results; } # A function to get user connections | (connections scope) function get_connections() { $url = $GLOBALS['base_url'] . "/api/users/@me/connections"; $headers = array('Content-Type: application/x-www-form-urlencoded', 'Authorization: Bearer ' . $_SESSION['access_token']); $curl = curl_init(); curl_setopt($curl, CURLOPT_URL, $url); curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); curl_setopt($curl, CURLOPT_HTTPHEADER, $headers); $response = curl_exec($curl); curl_close($curl); $results = json_decode($response, true); return $results; } function give_role($guildid, $roleid) { $data = json_encode(array("roles" => array("$roleid"))); $url = $GLOBALS['base_url'] . "/api/guilds/$guildid/members/" . $_SESSION['user_id'] . "/roles/$roleid"; $headers = array('Content-Type: application/json', 'Authorization: Bot ' . $GLOBALS['bot_token']); $curl = curl_init(); curl_setopt($curl, CURLOPT_URL, $url); curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); curl_setopt($curl, CURLOPT_CUSTOMREQUEST, "PUT"); curl_setopt($curl, CURLOPT_HTTPHEADER, $headers); curl_setopt($curl, CURLOPT_POSTFIELDS, $data); $response = curl_exec($curl); curl_close($curl); $results = json_decode($response, true); return $results; } # Function to make user join a guild | (guilds.join scope) # Note : The bot has to be a member of the server with CREATE_INSTANT_INVITE permission. # The bot DOES NOT have to be online, just has to be a bot application and has to be a member of the server. # This is the basic function with no parameters, you can build on this to give the user a nickname, mute, deafen or assign a role. function join_guild($guildid) { $url = $GLOBALS['base_url'] . "/api/guilds/".$guildid."/members/" . $_SESSION['user_id']; $headers = array('Content-Type: application/json', 'Authorization: Bot ' . $GLOBALS['bot_token']); $curl = curl_init(); curl_setopt($curl, CURLOPT_URL, $url); curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); curl_setopt($curl, CURLOPT_CUSTOMREQUEST, "PUT"); curl_setopt($curl, CURLOPT_HTTPHEADER, $headers); curl_setopt($curl, CURLOPT_POSTFIELDS, $data); $response = curl_exec($curl); curl_close($curl); $results = json_decode($response, true); return $results; } # A function to verify if login is legit function check_state($state) { if ($state == $_SESSION['state']) { return true; } else { # The login is not valid, so you should probably redirect them back to home page return false; } }
Editor is loading...