]> git.mxchange.org Git - quix0rs-gnu-social.git/commitdiff
[DOCUMENTATION] New socialfy solution
authorDiogo Cordeiro <diogo@fc.up.pt>
Mon, 15 Jul 2019 00:29:39 +0000 (01:29 +0100)
committerDiogo Cordeiro <diogo@fc.up.pt>
Sat, 3 Aug 2019 16:47:28 +0000 (17:47 +0100)
DOCUMENTATION/SYSTEM_ADMINISTRATORS/socialfy-another-domain/README.md [new file with mode: 0644]
DOCUMENTATION/SYSTEM_ADMINISTRATORS/socialfy-another-domain/README.txt [deleted file]
DOCUMENTATION/SYSTEM_ADMINISTRATORS/socialfy-another-domain/dot-well-known/host-meta [deleted file]
DOCUMENTATION/SYSTEM_ADMINISTRATORS/socialfy-another-domain/dot-well-known/webfinger/example@example.com.xml [deleted file]
DOCUMENTATION/SYSTEM_ADMINISTRATORS/socialfy-another-domain/dot-well-known/webfinger/index.php

diff --git a/DOCUMENTATION/SYSTEM_ADMINISTRATORS/socialfy-another-domain/README.md b/DOCUMENTATION/SYSTEM_ADMINISTRATORS/socialfy-another-domain/README.md
new file mode 100644 (file)
index 0000000..eb510f1
--- /dev/null
@@ -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.
diff --git a/DOCUMENTATION/SYSTEM_ADMINISTRATORS/socialfy-another-domain/README.txt b/DOCUMENTATION/SYSTEM_ADMINISTRATORS/socialfy-another-domain/README.txt
deleted file mode 100644 (file)
index 7cb01ed..0000000
+++ /dev/null
@@ -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.
diff --git a/DOCUMENTATION/SYSTEM_ADMINISTRATORS/socialfy-another-domain/dot-well-known/host-meta b/DOCUMENTATION/SYSTEM_ADMINISTRATORS/socialfy-another-domain/dot-well-known/host-meta
deleted file mode 100644 (file)
index bba942f..0000000
+++ /dev/null
@@ -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>
diff --git a/DOCUMENTATION/SYSTEM_ADMINISTRATORS/socialfy-another-domain/dot-well-known/webfinger/example@example.com.xml b/DOCUMENTATION/SYSTEM_ADMINISTRATORS/socialfy-another-domain/dot-well-known/webfinger/example@example.com.xml
deleted file mode 100644 (file)
index 3e8c9de..0000000
+++ /dev/null
@@ -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>
index 91071bc4c3b65cd2806d9c7f68d0e3980b3b1699..e7176c07f7dd098f91c0590c9882dd9a28235bb1 100644 (file)
@@ -1,43 +1,56 @@
 <?php
 
-/*
- * GNU social
- * Copyright (C) 2010, Free Software Foundation, Inc
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Affero General Public License as published by
- * 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/>.
- */
-
+// FIXME: REPLACE          \/ here
+define('MY_GNUSOCIAL', 'https://www.example.org/gnusocial/index.php');
 
-// basename should make sure we can't escape this directory
-$u = basename($_GET['resource']);
+/**
+ * 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
+ * socialfy from another domain.
+ */
 
-if (!strpos($u, '@')) {
-    throw new Exception('Bad resource');
-    exit(1);
+// From https://www.php.net/manual/en/function.getallheaders.php#84262 (joyview at gmail dot com)
+if (!function_exists('getallheaders')) {
+    function getallheaders()
+    {
+        $headers = [];
+        foreach ($_SERVER as $name => $value) {
+            if (substr($name, 0, 5) == 'HTTP_') {
+                $headers[str_replace(' ', '-', ucwords(strtolower(str_replace('_', ' ', substr($name, 5)))))] = $value;
+            }
+        }
+        return $headers;
+    }
 }
-
-if (mb_strpos($u, 'acct:')===0) {
-    $u = substr($u, 5);
+$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();
+
+    $header_text = substr($response, 0, strpos($response, "\r\n\r\n"));
+
+    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;
 }
-
-// Just to be a little bit safer, you know, with all the unicode stuff going on
-$u = filter_var($u, FILTER_SANITIZE_EMAIL);
-
-$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);
+$headers = get_headers_from_curl_response($response);
+foreach ($headers as $name => $value) {
+    header("{$name}: $value");
 }
+echo $body;
+curl_close($ch);