<?php // The client is asking for authorization. Allow everything. if (isset($_GET['redirect_uri'])) { $redirect = $_GET['redirect_uri']; if (strpos($_GET['redirect_uri'], '?') === false) { $redirect .= '?'; } else { $redirect .= '&'; } $parameters = [ 'code' => 'ok' . (isset($_GET['scope'])?$_GET['scope']:''), 'me' => $_GET['fakeme'] . '?' . http_build_query([ 'endpoint' => $_GET['endpoint'], 'token' => $_GET['token'], 'fakeme' => $_GET['fakeme'], ]), ]; if (isset($_GET['state'])) { $parameters['state'] = $_GET['state']; } $redirect .= http_build_query($parameters); header('Location: ' . $redirect, true, 302); exit(); } // The client is asking for access token. Give them what they want. if (isset($_POST['code'])) { header('Content-Type: application/json'); exit(json_encode([ 'access_token' => $_GET['token'], 'me' => $_GET['fakeme'] . '?' . http_build_query([ 'endpoint' => $_GET['endpoint'], 'token' => $_GET['token'], 'fakeme' => $_GET['fakeme'], ]), 'scope' => substr($_POST['code'], 2), ])); } // Figure out current URL. $ssl = false; $url = 'http'; if (empty($_SERVER['HTTPS']) === false && $_SERVER['HTTPS'] === 'on') { $url .= 's'; $ssl = true; } $url .= '://' . $_SERVER['HTTP_HOST']; if ($ssl && $_SERVER['SERVER_PORT'] !== '443' || $ssl === false && $_SERVER['SERVER_PORT'] !== '80') { $url .= ':' . $_SERVER['SERVER_PORT']; } $url .= $_SERVER['REQUEST_URI']; $url = htmlspecialchars($url, ENT_COMPAT | ENT_HTML5, 'UTF-8'); ?><!doctype html> <html> <head> <meta charset="utf-8"> <title>Generate Magic login URL for Micropub endpoints</title> <?php if (isset($_GET['endpoint']) && isset($_GET['token'])) { ?> <link rel="authorization_endpoint" href="<?= $url ?>"> <link rel="token_endpoint" href="<?= $url ?>"> <link rel="micropub" href="<?= $_GET['endpoint'] ?>"> <?php } ?> <style> * { box-sizing: border-box; } form { text-align: center; padding-top: 1em; } label, input { width: 30em; display: block; margin: 0 auto; text-align: left; font-size: 100%; font-family: sans-serif; line-height: 1.4; padding: .3em .5em .2em; } input { margin-bottom: 1em; border: 1px solid currentColor; background-color: transparent; } input[type="submit"] { text-align: center; } p { font-size: 80%; font-family: sans-serif; width: 37.5em; margin: -.2em auto 0; text-align: left; padding: 0 .7em .4em; line-height: 1.4; } </style> </head> <body> <?php if (isset($_GET['endpoint']) && isset($_GET['token'])) { ?> <form> <label for="url">Your magic URL</label> <input type="text" id="url" name="url" value="<?= $url ?>"> </form> <?php } else { ?> <form> <label for="endpoint"><a href="https://micropub.net">Micropub</a> endpoint URL</label> <input type="text" id="endpoint" name="endpoint" placeholder="https://example.com/micropub"> <label for="token">Bearer token</label> <p>If you need a token from an actual <a href="https://indieauth.net">IndieAuth</a> flow, you can use the <a href="https://gimme-a-token.5eb.nl">Homebrew Access Token</a> service.</p> <input type="text" id="token" name="token" placeholder="token"> <input type="hidden" name="fakeme" value="<?= $url ?>"> <input type="submit" value="Create URL"> </form> <?php } ?> </body> </html>