Diff -- /var/www/vhosts/3dshawn.com/abforge.3dshawn.com/api_keys.cgi
Diff

/var/www/vhosts/3dshawn.com/abforge.3dshawn.com/api_keys.cgi

added on local at 2026-07-01 16:00:59

Added
+30
lines
Removed
-0
lines
Context
0
unchanged
Blobs
from
to e826f3ff5153
Restore this content →
Unified diff
Naive LCS-based line diff. Additions in emerald, deletions in rose. Both sides decompressed live from BLOB_STORE.
1#!/usr/bin/perl
2use strict; use warnings;
3use lib '/var/www/vhosts/3dshawn.com/abforge.3dshawn.com';
4use CGI; use MODS::Template; use MODS::DBConnect; use MODS::Login;
5use MODS::ABForge::Config; use MODS::ABForge::Wrapper; use MODS::ABForge::Sites;
6use Digest::SHA qw(sha256_hex);
7my $q=CGI->new; my $auth=MODS::Login->new; my $wrap=MODS::ABForge::Wrapper->new; my $tfile=MODS::Template->new;
8my $cfg=MODS::ABForge::Config->new; my $db=MODS::DBConnect->new; my $sites=MODS::ABForge::Sites->new; my $DB=$cfg->settings('database_name');
9my $userinfo=$auth->login_verify(); print "Status: 302 Found\nLocation: /login.cgi\n\n" and exit unless $userinfo;
10my $form=$q->Vars; my $dbh=$db->db_connect();
11my @sites_list=$sites->list_for_user($dbh, $DB, $userinfo->{user_id});
12my $new_secret = '';
13if ($q->request_method eq 'POST' && $form->{create}) {
14 my @c=('a'..'z','A'..'Z','0'..'9'); my $secret='abk_live_'; $secret .= $c[int(rand @c)] for 1..32;
15 my $hash=sha256_hex($secret); my $prefix=substr($secret,0,8);
16 my $label = $form->{label}; $label =~ s/[\\']/\\$&/g; $label = substr($label, 0, 120);
17 $db->db_readwrite($dbh, "INSERT INTO ${DB}.api_keys (user_id, label, key_prefix, key_hash, created_at) VALUES (".$userinfo->{user_id}.", '$label', '$prefix', '$hash', NOW())", $ENV{SCRIPT_NAME}, __LINE__);
18 $new_secret = $secret;
19}
20if ($form->{revoke}) {
21 $db->db_readwrite($dbh, "UPDATE ${DB}.api_keys SET revoked_at=NOW() WHERE id=".int($form->{revoke})." AND user_id=".$userinfo->{user_id}, $ENV{SCRIPT_NAME}, __LINE__);
22}
23my @keys=$db->db_readwrite_multiple($dbh, "SELECT id, label, key_prefix, revoked_at, last_used_at, created_at FROM ${DB}.api_keys WHERE user_id=".$userinfo->{user_id}." ORDER BY created_at DESC", $ENV{SCRIPT_NAME}, __LINE__);
24foreach my $k (@keys) { $k->{is_active} = $k->{revoked_at} ? 0 : 1; }
25$db->db_disconnect($dbh);
26print "Content-Type: text/html\n\n";
27my $body=join('',$tfile->template('abforge_api_keys.html',{
28 new_secret=>$new_secret, has_new=>$new_secret?1:0, keys=>\@keys, has_keys=>scalar(@keys)?1:0,
29}, $userinfo));
30$wrap->render({userinfo=>$userinfo, page_key=>'api', title=>'API Keys', body=>$body, sites=>\@sites_list});
Keyboard: j next diff k previous diff g top G bottom r restore c compile-check ? help