[DOCUMENTATION] New socialfy solution
This commit is contained in:
parent
e0bc35b975
commit
36dd245ee3
@ -0,0 +1,15 @@
|
|||||||
|
#Simple way to Webfinger enable your domain -- needs PHP
|
||||||
|
|
||||||
|
##Step 1
|
||||||
|
|
||||||
|
Put the 'dot-well-known' on your website, so it loads at:
|
||||||
|
|
||||||
|
https://another_cool.org/.well-known/
|
||||||
|
|
||||||
|
(Remember the . at the beginning of this one, which is common practice
|
||||||
|
for "hidden" files and why we have renamed it "dot-")
|
||||||
|
|
||||||
|
## Step 2
|
||||||
|
|
||||||
|
Edit the .well-known/webfinger/index.php file and replace "https://www.example.org/gnusocial/index.php" with the domain name
|
||||||
|
you're hosting the .well-known handler on.
|
@ -1,56 +0,0 @@
|
|||||||
Initial simple way to Webfinger enable your domain -- needs PHP.
|
|
||||||
================================================================
|
|
||||||
|
|
||||||
This guide needs some updating, since it will only guide you to present
|
|
||||||
XML data (while the curl command likely gives you JSON). The workaround
|
|
||||||
is to simply make curl get 'webfinger.xml' instead, and/or have another
|
|
||||||
file that contains JSON, but that requires editing the PHP file as well.
|
|
||||||
|
|
||||||
Step 1
|
|
||||||
======
|
|
||||||
|
|
||||||
Put the 'dot-well-known' on your website, so it loads at:
|
|
||||||
|
|
||||||
https://example.com/.well-known/
|
|
||||||
|
|
||||||
(Remember the . at the beginning of this one, which is common practice
|
|
||||||
for "hidden" files and why we have renamed it "dot-")
|
|
||||||
|
|
||||||
Step 2
|
|
||||||
======
|
|
||||||
|
|
||||||
Edit the .well-known/host-meta file and replace "example.com" with the
|
|
||||||
domain name you're hosting the .well-known directory on.
|
|
||||||
|
|
||||||
Using vim you can do this as a quick method:
|
|
||||||
$ vim .well-known/host-meta [ENTER]
|
|
||||||
:%s/example.com/domain.com/ [ENTER]
|
|
||||||
:wq [ENTER]
|
|
||||||
|
|
||||||
Step 3
|
|
||||||
======
|
|
||||||
|
|
||||||
For each user on your site, and this might only be you...
|
|
||||||
|
|
||||||
In the webfinger directory, make a copy of the example@example.com.xml file
|
|
||||||
so that it's called (replace username and example.com with appropriate
|
|
||||||
values, the domain name should be the same as you're "socialifying"):
|
|
||||||
|
|
||||||
username@example.com.xml
|
|
||||||
|
|
||||||
Then edit the file contents, replacing "social.example.com" with your
|
|
||||||
GNU social instance's base path, and change the user ID number (and
|
|
||||||
nickname for the FOAF link) to that of your account on your social
|
|
||||||
site. If you don't know your user ID number, you can see this on your
|
|
||||||
GNU social profile page by looking at the destination URLs in the
|
|
||||||
Feeds links.
|
|
||||||
|
|
||||||
PROTIP: You can get the bulk of the contents (note the <Subject> element though)
|
|
||||||
from curling down your real webfinger data:
|
|
||||||
$ curl https://social.example.com/.well-known/webfinger?resource=acct:username@social.example.com
|
|
||||||
|
|
||||||
Finally
|
|
||||||
=======
|
|
||||||
|
|
||||||
Using this method, though fiddly, you can now be @user@domain without
|
|
||||||
the need for any prefixes for subdomains, etc.
|
|
@ -1,5 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
|
||||||
<XRD xmlns="http://docs.oasis-open.org/ns/xri/xrd-1.0" xmlns:hm="http://host-meta.net/xrd/1.0">
|
|
||||||
<Link rel="lrdd" type="application/xrd+xml"
|
|
||||||
template="https://example.com/.well-known/webfinger?resource={uri}"/>
|
|
||||||
</XRD>
|
|
@ -1,35 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
|
||||||
<XRD xmlns="http://docs.oasis-open.org/ns/xri/xrd-1.0">
|
|
||||||
<Subject>acct:username@example.com</Subject>
|
|
||||||
<Alias>acct:username@social.example.com</Alias>
|
|
||||||
<Alias>https://social.example.com/user/1</Alias>
|
|
||||||
<Link rel="http://webfinger.net/rel/profile-page"
|
|
||||||
type="text/html"
|
|
||||||
href="https://social.example.com/user/1"/>
|
|
||||||
|
|
||||||
<Link rel="http://schemas.google.com/g/2010#updates-from"
|
|
||||||
type="application/atom+xml"
|
|
||||||
href="https://social.example.com/api/statuses/user_timeline/1.atom"/>
|
|
||||||
|
|
||||||
<!-- Is this/was this ever supported?
|
|
||||||
<Link rel="http://microformats.org/profile/hcard"
|
|
||||||
type="text/html"
|
|
||||||
href="https://social.example.com/hcard"/> -->
|
|
||||||
|
|
||||||
<Link rel="http://gmpg.org/xfn/11"
|
|
||||||
type="text/html"
|
|
||||||
href="https://social.example.com/user/1"/>
|
|
||||||
|
|
||||||
<Link rel="describedby"
|
|
||||||
type="application/rdf+xml"
|
|
||||||
href="https://social.example.com/username/foaf"/>
|
|
||||||
|
|
||||||
<Link rel="http://salmon-protocol.org/ns/salmon-replies"
|
|
||||||
href="https://social.example.com/main/salmon/user/1"/>
|
|
||||||
|
|
||||||
<Link rel="http://salmon-protocol.org/ns/salmon-mention"
|
|
||||||
href="https://social.example.com/main/salmon/user/1"/>
|
|
||||||
|
|
||||||
<Link rel="http://ostatus.org/schema/1.0/subscribe"
|
|
||||||
template="https://social.example.com/main/ostatussub?profile={uri}"/>
|
|
||||||
</XRD>
|
|
@ -1,43 +1,56 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
/*
|
// FIXME: REPLACE \/ here
|
||||||
* GNU social
|
define('MY_GNUSOCIAL', 'https://www.example.org/gnusocial/index.php');
|
||||||
* Copyright (C) 2010, Free Software Foundation, Inc
|
|
||||||
*
|
/**
|
||||||
* This program is free software: you can redistribute it and/or modify
|
* This is a general solution for when you can't have your GNU social instance in the domain root and for when you want to
|
||||||
* it under the terms of the GNU Affero General Public License as published by
|
* socialfy from another domain.
|
||||||
* the Free Software Foundation, either version 3 of the License, or
|
|
||||||
* (at your option) any later version.
|
|
||||||
*
|
|
||||||
* This program is distributed in the hope that it will be useful,
|
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
* GNU Affero General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU Affero General Public License
|
|
||||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
// From https://www.php.net/manual/en/function.getallheaders.php#84262 (joyview at gmail dot com)
|
||||||
// basename should make sure we can't escape this directory
|
if (!function_exists('getallheaders')) {
|
||||||
$u = basename($_GET['resource']);
|
function getallheaders()
|
||||||
|
{
|
||||||
if (!strpos($u, '@')) {
|
$headers = [];
|
||||||
throw new Exception('Bad resource');
|
foreach ($_SERVER as $name => $value) {
|
||||||
exit(1);
|
if (substr($name, 0, 5) == 'HTTP_') {
|
||||||
|
$headers[str_replace(' ', '-', ucwords(strtolower(str_replace('_', ' ', substr($name, 5)))))] = $value;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return $headers;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
$ch = curl_init();
|
||||||
|
curl_setopt($ch, CURLOPT_HTTPHEADER, getallheaders());
|
||||||
|
curl_setopt($ch, CURLOPT_URL, MY_GNUSOCIAL . str_replace('webfinger/', 'webfinger', $_SERVER['REQUEST_URI']));
|
||||||
|
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
|
||||||
|
curl_setopt($ch, CURLOPT_HEADER, true);
|
||||||
|
$response = curl_exec($ch);
|
||||||
|
$header_size = curl_getinfo($ch, CURLINFO_HEADER_SIZE);
|
||||||
|
$body = substr($response, $header_size);
|
||||||
|
// From https://stackoverflow.com/a/10590242 (c.hill)
|
||||||
|
function get_headers_from_curl_response($response)
|
||||||
|
{
|
||||||
|
$headers = array();
|
||||||
|
|
||||||
if (mb_strpos($u, 'acct:')===0) {
|
$header_text = substr($response, 0, strpos($response, "\r\n\r\n"));
|
||||||
$u = substr($u, 5);
|
|
||||||
|
foreach (explode("\r\n", $header_text) as $i => $line) {
|
||||||
|
if ($i === 0) {
|
||||||
|
$headers['http_code'] = $line;
|
||||||
|
} else {
|
||||||
|
list($key, $value) = explode(': ', $line);
|
||||||
|
|
||||||
|
$headers[$key] = $value;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return $headers;
|
||||||
}
|
}
|
||||||
|
$headers = get_headers_from_curl_response($response);
|
||||||
// Just to be a little bit safer, you know, with all the unicode stuff going on
|
foreach ($headers as $name => $value) {
|
||||||
$u = filter_var($u, FILTER_SANITIZE_EMAIL);
|
header("{$name}: $value");
|
||||||
|
|
||||||
$f = $u . ".xml";
|
|
||||||
|
|
||||||
if (file_exists($f)) {
|
|
||||||
header('Content-Disposition: attachment; filename="'.urlencode($f).'"');
|
|
||||||
header('Content-type: application/xrd+xml');
|
|
||||||
echo file_get_contents($f);
|
|
||||||
}
|
}
|
||||||
|
echo $body;
|
||||||
|
curl_close($ch);
|
||||||
|
Loading…
Reference in New Issue
Block a user