aboutsummaryrefslogtreecommitdiffstats
path: root/Zotlabs/Module/Owa.php
diff options
context:
space:
mode:
authorMario <mario@mariovavti.com>2022-09-30 10:25:46 +0000
committerMario <mario@mariovavti.com>2022-09-30 10:25:46 +0000
commita0430f91bd72cc200165f10d3825a88efca53291 (patch)
tree886ad63637f4d72cbd6955e1ca579952b0a5525b /Zotlabs/Module/Owa.php
parent9f522bbe6c91e0ab2a2c5999f29f27f4dba7f364 (diff)
downloadvolse-hubzilla-a0430f91bd72cc200165f10d3825a88efca53291.tar.gz
volse-hubzilla-a0430f91bd72cc200165f10d3825a88efca53291.tar.bz2
volse-hubzilla-a0430f91bd72cc200165f10d3825a88efca53291.zip
fix owa in case of hub reinstalls
Diffstat (limited to 'Zotlabs/Module/Owa.php')
-rw-r--r--Zotlabs/Module/Owa.php39
1 files changed, 36 insertions, 3 deletions
diff --git a/Zotlabs/Module/Owa.php b/Zotlabs/Module/Owa.php
index e30aa5fb4..0922eb5d4 100644
--- a/Zotlabs/Module/Owa.php
+++ b/Zotlabs/Module/Owa.php
@@ -32,14 +32,14 @@ class Owa extends Controller {
$keyId = $sigblock['keyId'];
if ($keyId) {
$r = q("SELECT * FROM hubloc LEFT JOIN xchan ON hubloc_hash = xchan_hash
- WHERE hubloc_id_url = '%s' AND xchan_pubkey != '' ",
+ WHERE hubloc_id_url = '%s' AND hubloc_deleted = 0 ORDER BY hubloc_id DESC",
dbesc($keyId)
);
if (! $r) {
- $found = discover_by_webbie(str_replace('acct:','',$keyId));
+ $found = discover_by_webbie($keyId);
if ($found) {
$r = q("SELECT * FROM hubloc LEFT JOIN xchan ON hubloc_hash = xchan_hash
- WHERE hubloc_id_url = '%s' AND xchan_pubkey != '' ",
+ WHERE hubloc_id_url = '%s' AND hubloc_deleted = 0 ORDER BY hubloc_id DESC ",
dbesc($keyId)
);
}
@@ -61,10 +61,43 @@ class Owa extends Controller {
logger('OWA fail: ' . $hubloc['hubloc_id'] . ' ' . $hubloc['hubloc_id_url']);
}
}
+
+ if (!$ret['success']) {
+
+ // Possible a reinstall?
+ // In this case we probably already have an old hubloc
+ // but not the new one yet.
+
+ $found = discover_by_webbie($keyId);
+
+ if ($found) {
+ $r = q("SELECT * FROM hubloc LEFT JOIN xchan ON hubloc_hash = xchan_hash
+ WHERE hubloc_id_url = '%s' AND hubloc_deleted = 0 ORDER BY hubloc_id DESC LIMIT 1",
+ dbesc($keyId)
+ );
+
+ if ($r) {
+ $verified = HTTPSig::verify(file_get_contents('php://input'), $r[0]['xchan_pubkey']);
+ if ($verified && $verified['header_signed'] && $verified['header_valid'] && ($verified['content_valid'] || (! $verified['content_signed']))) {
+ logger('OWA header: ' . print_r($verified,true), LOGGER_DATA);
+ logger('OWA success: ' . $r[0]['hubloc_id_url'], LOGGER_DATA);
+ $ret['success'] = true;
+ $token = random_string(32);
+ Verify::create('owt', 0, $token, $r[0]['hubloc_id_url']);
+ $result = '';
+ openssl_public_encrypt($token, $result, $r[0]['xchan_pubkey']);
+ $ret['encrypted_token'] = base64url_encode($result);
+ } else {
+ logger('OWA fail: ' . $hubloc['hubloc_id'] . ' ' . $hubloc['hubloc_id_url']);
+ }
+ }
+ }
+ }
}
}
}
}
+
json_return_and_die($ret,'application/x-zot+json');
}
}