Browse Source

Track token expiration

Force reauthentication after the token expires.
pull/149/head
Jesse Morgan 1 month ago
parent
commit
d347e8286b
5 changed files with 20 additions and 1 deletions
  1. +5
    -0
      controllers/auth.php
  2. +11
    -1
      controllers/controllers.php
  3. +2
    -0
      schema/migrations/0013.sql
  4. +1
    -0
      schema/mysql.sql
  5. +1
    -0
      schema/sqlite.sql

+ 5
- 0
controllers/auth.php View File

@ -175,6 +175,10 @@ $app->get('/auth/callback', function() use($app) {
$user->token_endpoint = $tokenEndpoint;
$user->micropub_endpoint = $micropubEndpoint;
$user->micropub_access_token = $token['response']['access_token'];
if(is_numeric($token['response']['expires_in'])) {
$expiration = time() + $token['response']['expires_in'];
$user->micropub_token_expiration = date('Y-m-d H:i:s', $expiration);
}
$user->micropub_scope = $token['response']['scope'];
$user->micropub_response = $token['raw_response'];
$user->save();
@ -236,6 +240,7 @@ $app->post('/auth/reset', function() use($app) {
$user->micropub_media_endpoint = '';
$user->micropub_scope = '';
$user->micropub_access_token = '';
$user->micropub_token_expiration = '';
$user->syndication_targets = '';
$user->supported_post_types = '';
$user->save();

+ 11
- 1
controllers/controllers.php View File

@ -30,7 +30,17 @@ function require_login(&$app, $redirect=true) {
$app->redirect('/', 302);
return false;
} else {
return ORM::for_table('users')->find_one($_SESSION['user_id']);
$user = ORM::for_table('users')->find_one($_SESSION['user_id']);
if(isset($user->micropub_token_expiration)) {
$now = new DateTime();
$expiration = new DateTime($user->micropub_token_expiration);
if($now > $expiration) {
header('X-Error: TokenExpired');
$app->redirect('/auth/start?'.http_build_query(array('me' => $user->url)), 302);
return false;
}
}
return $user;
}
}

+ 2
- 0
schema/migrations/0013.sql View File

@ -0,0 +1,2 @@
ALTER TABLE users
ADD COLUMN `micropub_token_expiration` datetime DEFAULT NULL;

+ 1
- 0
schema/mysql.sql View File

@ -6,6 +6,7 @@ CREATE TABLE `users` (
`micropub_endpoint` varchar(255) DEFAULT NULL,
`micropub_media_endpoint` varchar(255) DEFAULT NULL,
`micropub_access_token` text,
`micropub_token_expiration` datetime DEFAULT NULL,
`micropub_scope` varchar(255) DEFAULT NULL,
`micropub_response` text,
`micropub_slug_field` varchar(255) NOT NULL DEFAULT 'mp-slug',

+ 1
- 0
schema/sqlite.sql View File

@ -6,6 +6,7 @@ CREATE TABLE users (
micropub_endpoint TEXT,
micropub_media_endpoint TEXT,
micropub_access_token TEXT,
micropub_token_expiration datetime,
micropub_scope TEXT,
micropub_response TEXT,
micropub_slug_field TEXT default 'mp-slug',

Loading…
Cancel
Save