Browse Source

Merge pull request #2977 from rabuzarus/20161128_-_help_page_polishing

Add protocol docu to the help docs
pull/2983/head
Michael Vogel 6 years ago committed by GitHub
parent
commit
efb2df41ba
  1. 8
      doc/Home.md
  2. 22
      doc/Message-Flow.md
  3. 40
      doc/Protocol.md
  4. 15
      doc/de/Home.md
  5. 12
      doc/de/Message-Flow.md
  6. 3
      include/dfrn.php
  7. 30
      mod/dfrn_confirm.php
  8. 9
      mod/dfrn_notify.php
  9. BIN
      spec/dfrn2.odt
  10. BIN
      spec/dfrn2.pdf
  11. BIN
      spec/dfrn2_contact_confirmation.png
  12. 162
      spec/dfrn2_contact_confirmation.svg
  13. BIN
      spec/dfrn2_contact_request.png
  14. 218
      spec/dfrn2_contact_request.svg
  15. 34
      view/theme/frio/css/style.css

8
doc/Home.md

@ -7,11 +7,11 @@ Friendica Documentation and Resources
* [Account Basics](help/Account-Basics)
* [New User Quick Start](help/Quick-Start-guide)
* [Creating posts](help/Text_editor)
* [BBCode tag reference](help/BBCode)
* [BBCode tag reference](help/BBCode)
* [Comment, sort and delete posts](help/Text_comment)
* [Profiles](help/Profiles)
* [Accesskey reference](help/Accesskeys)
* [Events](help/events)
* [Events](help/events)
* You and other users
* [Connectors](help/Connectors)
* [Making Friends](help/Making-Friends)
@ -31,9 +31,7 @@ Friendica Documentation and Resources
* [Settings & Admin Panel](help/Settings)
* [Installing Connectors (Twitter/GNU Social)](help/Installing-Connectors)
* [Install an ejabberd server (XMPP chat) with synchronized credentials](help/install-ejabberd)
* [Message Flow](help/Message-Flow)
* [Using SSL with Friendica](help/SSL)
* [Twitter/GNU Social API Functions](help/api)
* [Config values that can only be set in .htconfig.php](help/htconfig)
**Developer Manual**
@ -46,9 +44,11 @@ Friendica Documentation and Resources
* [Plugin Development](help/Plugins)
* [Theme Development](help/themes)
* [Smarty 3 Templates](help/smarty3-templates)
* [Protocol Documentation](help/Protocol)
* [Database schema documantation](help/database)
* [Class Autoloading](help/autoloader)
* [Code - Reference(Doxygen generated - sets cookies)](doc/html/)
* [Twitter/GNU Social API Functions](help/api)
**External Resources**

22
doc/Message-Flow.md

@ -4,7 +4,7 @@ Friendica Message Flow
This page documents some of the details of how messages get from one person to another in the Friendica network.
There are multiple paths, using multiple protocols and message formats.
Those attempting to understand these message flows should become familiar with (at the minimum) the [DFRN protocol document](http://dfrn.org/dfrn.pdf) and the message passing elements of the OStatus stack (salmon and Pubsubhubbub).
Those attempting to understand these message flows should become familiar with (at the minimum) the [DFRN protocol document](https://github.com/friendica/friendica/blob/master/spec/dfrn2.pdf) and the message passing elements of the OStatus stack (salmon and Pubsubhubbub).
Most message passing involves the file include/items.php, which has functions for several feed-related import/export activities.
@ -21,8 +21,8 @@ Push (pubsubhubbub) feeds arrive via mod/pubsub.php
DFRN-poll feed imports arrive via include/poller.php as a scheduled task, this implements the local side of the DFRN-poll protocol.
Scenario #1. Bob posts a public status message
---
### Scenario #1. Bob posts a public status message
This is a public message with no conversation members so no private transport is used.
There are two paths it can take - as a bbcode path to DFRN clients, and converted to HTML with the server's PuSH (pubsubhubbub) hubs notified.
When a PuSH hub is operational, dfrn-poll clients prefer to receive their information through the PuSH channel.
@ -30,31 +30,31 @@ They will fall back on a daily poll in case the hub has delivery issues (this is
If there is no specified hub or hubs, DFRN clients will poll at a configurable (per-contact) rate at up to 5-minute intervals.
Feeds retrieved via dfrn-poll are bbcode and may also contain private conversations which the poller has permissions to see.
Scenario #2. Jack replies to Bob's public message. Jack is on the Friendica/DFRN network.
---
### Scenario #2. Jack replies to Bob's public message. Jack is on the Friendica/DFRN network.
Jack uses dfrn-notify to send a direct reply to Bob.
Bob then creates a feed of the conversation and sends it to everybody involved in the conversation using dfrn-notify.
PuSH hubs are notified that new content is available.
The hub or hubs will then retrieve the latest feed and transmit it to all hub subscribers (which may be on different networks).
Scenario #3. Mary replies to Bob's public message. Mary is on the Friendica/DFRN network.
---
### Scenario #3. Mary replies to Bob's public message. Mary is on the Friendica/DFRN network.
Mary uses dfrn-notify to send a direct reply to Bob.
Bob then creates a feed of the conversation and sends it to everybody involved in the conversation (excluding himself, the conversation is now sent to both Jack and Mary).
Messages are sent using dfrn-notify.
Push hubs are also notified that new content is available.
The hub or hubs will then retrieve the latest feed and transmit it to all hub subscribers (which may be on different networks).
Scenario #4. William replies to Bob's public message. William is on the OStatus network.
---
### Scenario #4. William replies to Bob's public message. William is on the OStatus network.
William uses salmon to notify Bob of the reply.
Content is html embedded in salmon magic envelope.
Bob then creates a feed of the conversation and sends it to all Friendica participants involved in the conversation using dfrn-notify (excluding himself, the conversation is sent to both Jack and Mary).
Push hubs are notified that new content is available.
The hub or hubs will then retrieve the latest feed and transmit it to all hub subscribers (which may be on different networks).
Scenario #5. Bob posts a private message to Mary and Jack.
---
### Scenario #5. Bob posts a private message to Mary and Jack.
Message is delivered immediately to Mary and Jack using dfrn_notify.
Public hubs are not notified.
Requeueing is attempted in case of timeout.

40
doc/Protocol.md

@ -0,0 +1,40 @@
Used Protocols
===============
Friendicas DFRN Protocol
---
* [Document with the DFRN specification](spec/dfrn2.pdf)
* [Schema of the contact request process](spec/dfrn2_contact_request.png)
* [Schema of the contact request confirmation](spec/dfrn2_contact_confirmation.png)
* [Description of the message flow](help/Message-Flow)
ActivityStreams
---
Friendica is using ActivityStreams in version 1.0 for its activities and object types.
Additional types are used for non standard activities.
* [Link to the specification](http://activitystrea.ms/head/activity-schema.html)
* [List of used ActivityStreams verbs and object types.](https://github.com/friendica/friendica/wiki/ActivityStreams)
Salmon
---
Salmon is used as a message exchange protocol for replies and mentions.
* [Link to the protocol summary](http://www.salmon-protocol.org/salmon-protocol-summary)
Portable Contacts
---
Portable Contacts is used for friends lists.
* [Link to the specification](https://web.archive.org/web/20160426223008/http://portablecontacts.net/draft-spec.html) (Link to archive.org)
pubsubhubbub
---
pubsubhubbub is used for OStatus.
* [Link to the specification](https://pubsubhubbub.github.io/PubSubHubbub/pubsubhubbub-core-0.4.html)

15
doc/de/Home.md

@ -26,32 +26,31 @@ Friendica - Dokumentation und Ressourcen
* [Bugs und Probleme](help/Bugs-and-Issues)
* [Häufig gestellte Fragen (FAQ)](help/FAQ)
**Technische Dokumentation**
**Dokumentation für Administratoren**
* [Installation](help/Install)
* [Konfigurationen & Admin-Panel](help/Settings)
* [Plugins](help/Plugins)
* [Konnektoren (Connectors) installieren (Twitter/GNU Social)](help/Installing-Connectors)
* [Installation eines ejabberd Servers (XMPP-Chat) mit synchronisierten Anmeldedaten](help/install-ejabberd) (EN)
* [Nachrichtenfluss](help/Message-Flow)
* [Betreibe deine Seite mit einem SSL-Zertifikat](help/SSL)
* [Entwickler](help/Developers)
* [Twitter/GNU Social API Functions](help/api) (EN)
* [Translation of Friendica](help/translations) (EN)
* [Konfigurationswerte, die nur in der .htconfig.php gesetzt werden können](help/htconfig) (EN)
**Entwickler Dokumentation**
**Dokumentation für Entwickler**
* [Where to get started?](help/Developers-Intro)
* [Entwickler](help/Developers)
* [Where to get started?](help/Developers-Intro) (EN)
* [Help on Github](help/Github)
* [Help on Vagrant](help/Vagrant)
* [How to translate Friendica](help/translations)
* [How to translate Friendica](help/translations) (EN)
* [Bugs and Issues](help/Bugs-and-Issues)
* [Plugin Development](help/Plugins)
* [Theme Development](help/themes)
* [Smarty 3 Templates](help/smarty3-templates)
* [Protokoll Dokumentation](help/Protocol) (EN)
* [Datenbank-Schema](help/database)
* [Code-Referenz (mit doxygen generiert - setzt Cookies)](doc/html/)
* [Twitter/GNU Social API Functions](help/api) (EN)
**Externe Ressourcen**

12
doc/de/Message-Flow.md

@ -6,7 +6,7 @@ Friendica Nachrichtenfluss
Diese Seite soll einige Infos darüber dokumentieren, wie Nachrichten innerhalb von Friendica von einer Person zur anderen übertragen werden.
Es gibt verschiedene Pfade, die verschiedene Protokolle und Nachrichtenformate nutzen.
Diejenigen, die den Nachrichtenfluss genauer verstehen wollen, sollten sich mindestens mit dem DFRN-Protokoll (http://dfrn.org/dfrn.pdf) und den Elementen zur Nachrichtenverarbeitung des OStatus Stack informieren (salmon und Pubsubhubbub).
Diejenigen, die den Nachrichtenfluss genauer verstehen wollen, sollten sich mindestens mit dem DFRN-Protokoll ([Dokument mit den DFRN Spezifikationen](https://github.com/friendica/friendica/blob/master/spec/dfrn2.pdf)) und den Elementen zur Nachrichtenverarbeitung des OStatus Stack informieren (salmon und Pubsubhubbub).
Der Großteil der Nachrichtenverarbeitung nutzt die Datei include/items.php, welche Funktionen für verschiedene Feed-bezogene Import-/Exportaktivitäten liefert.
@ -24,7 +24,7 @@ PuSh-Feeds (pubsubhubbub) kommen via mod/pubsub.php an.
DFRN-poll Feed-Imports kommen via include/poller.php als geplanter Task an, das implementiert die lokale Bearbeitung (local side) des DFRN-Protokolls.
Szenario #1. Bob schreibt eine öffentliche Statusnachricht
### Szenario #1. Bob schreibt eine öffentliche Statusnachricht
Dies ist eine öffentliche Nachricht ohne begrenzte Nutzerfreigabe, so dass keine private Übertragung notwendig ist.
Es gibt zwei Wege, die genutzt werden können - als bbcode an DFRN-Clients oder als durch den Server konvertierten HTML-Code (mit PuSH; pubsubhubbub).
@ -33,13 +33,13 @@ Sie fallen zurück auf eine tägliche Abfrage, wenn der Hub Übertragungsschwier
Wenn kein spezifizierter Hub oder Hubs ausgewählt sind, werden DFRN-Clients in einer pro Kontakt konfigurierbaren Rate mit bis zu 5-Minuten-Intervallen abfragen.
Feeds, die via DFRN-Poll abgerufen werden, sind bbcode und können auch private Unterhaltungen enthalten, die vom Poller auf ihre Zugriffsrechte hin geprüft werden.
Szenario #2. Jack antwortet auf Bobs öffentliche Nachricht. Jack ist im Friendica/DFRN-Netzwerk.
### Szenario #2. Jack antwortet auf Bobs öffentliche Nachricht. Jack ist im Friendica/DFRN-Netzwerk.
Jack nutzt dfrn-notify, um eine direkte Antwort an Bob zu schicken.
Bob erstellt dann einen Feed der Unterhaltung und sendet diesen an jeden, der an der Unterhaltung beteiligt ist und dfrn-notify nutzt.
Die PuSH-Hubs werden darüber informiert, dass neuer Inhalt verfügbar ist. Der/die Hub/s erhalten dann die neuesten Feeds und übertragen diese an alle Hub-Teilnehmer (die auch zu verschiedenen Netzwerken gehören können).
Szenario #3. Mary antwortet auf Bobs öffentliche Nachricht. Mary ist im Friendica/DFRN-Netzwerk.
### Szenario #3. Mary antwortet auf Bobs öffentliche Nachricht. Mary ist im Friendica/DFRN-Netzwerk.
Mary nutzt dfrn-notify, um eine direkte Antwort an Bob zu schicken.
Bob erstellt dann einen Feed der Unterhaltung und sendet diesen an jeden, der an der Unterhaltung beteiligt ist (mit Ausnahme von Bob selbst; die Unterhaltung wird nun an Jack und Mary geschickt).
@ -47,14 +47,14 @@ Die Nachrichten werden mit dfrn-notify übertragen.
PuSH-Hubs werden darüber informiert, dass neuer Inhalt verfügbar ist.
Der/die Hub/s erhalten dann die neuesten Feeds und übertragen sie an alle Hub-Teilnehmer (die auch zu verschiedenen Netzwerken gehören können).
Szenario #4. William antwortet auf Bobs öffentliche Nachricht. William ist in einem OStatus-Netzwerk.
### Szenario #4. William antwortet auf Bobs öffentliche Nachricht. William ist in einem OStatus-Netzwerk.
William nutzt salmon, um Bob über seine Antwort zu benachrichtigen.
Der Inhalt ist HTML-Code, der in das Salmon Magic Envelope eingebettet ist.
Bob erstellt dann einen Feed der Unterhaltung und sendet es an alle Friendica-Nutzer, die an der Unterhaltung beteiligt sind und dfrn-notify nutzen (mit Ausnahme von William selbst; die Unterhaltung wird an Jack und Mary weitergeleitet).
PuSH-Hubs werden darüber informiert, dass neuer Inhalt verfügbar ist. Der/die Hub/s erhalten dann die neuesten Feeds und übertragen sie an alle Hub-Teilnehmer (die auch zu verschiedenen Netzwerken gehören können).
Szenario #5. Bob schreibt eine private Nachricht an Mary und Jack.
### Szenario #5. Bob schreibt eine private Nachricht an Mary und Jack.
Die Nachricht wird sofort an Mary und Jack mit Hilfe von dfrn_notify geschickt.
Öffentliche Hubs werden nicht benachrichtigt.

3
include/dfrn.php

@ -3,7 +3,8 @@
* @file include/dfrn.php
* @brief The implementation of the dfrn protocol
*
* https://github.com/friendica/friendica/wiki/Protocol
* @see https://github.com/friendica/friendica/wiki/Protocol and
* https://github.com/friendica/friendica/blob/master/spec/dfrn2.pdf
*/
require_once("include/Contact.php");

30
mod/dfrn_confirm.php

@ -1,17 +1,21 @@
<?php
/*
* Module: dfrn_confirm
/**
* @file mod/dfrn_confirm.php
* @brief Module: dfrn_confirm
* Purpose: Friendship acceptance for DFRN contacts
*
*.
* There are two possible entry points and three scenarios.
*
*.
* 1. A form was submitted by our user approving a friendship that originated elsewhere.
* This may also be called from dfrn_request to automatically approve a friendship.
*
* 2. We may be the target or other side of the conversation to scenario 1, and will
* interact with that process on our own user's behalf.
*
*.
* @see PDF with dfrn specs: https://github.com/friendica/friendica/blob/master/spec/dfrn2.pdf
* You also find a graphic which describes the confirmation process at
* https://github.com/friendica/friendica/blob/master/spec/dfrn2_contact_confirmation.png
*/
require_once('include/enotify.php');
@ -22,7 +26,7 @@ function dfrn_confirm_post(&$a,$handsfree = null) {
if(is_array($handsfree)) {
/**
/*
* We were called directly from dfrn_request due to automatic friend acceptance.
* Any $_POST parameters we may require are supplied in the $handsfree array.
*
@ -37,7 +41,7 @@ function dfrn_confirm_post(&$a,$handsfree = null) {
$node = $a->argv[1];
}
/**
/*
*
* Main entry point. Scenario 1. Our user received a friend request notification (perhaps
* from another site) and clicked 'Approve'.
@ -87,7 +91,7 @@ function dfrn_confirm_post(&$a,$handsfree = null) {
$activity = ((x($_POST,'activity')) ? intval($_POST['activity']) : 0 );
}
/**
/*
*
* Ensure that dfrn_id has precedence when we go to find the contact record.
* We only want to search based on contact id if there is no dfrn_id,
@ -103,7 +107,7 @@ function dfrn_confirm_post(&$a,$handsfree = null) {
logger('Confirming follower with contact_id: ' . $cid);
/**
/*
*
* The other person will have been issued an ID when they first requested friendship.
* Locate their record. At this time, their record will have both pending and blocked set to 1.
@ -139,7 +143,7 @@ function dfrn_confirm_post(&$a,$handsfree = null) {
if($network === NETWORK_DFRN) {
/**
/*
*
* Generate a key pair for all further communications with this person.
* We have a keypair for every contact, and a site key for unknown people.
@ -166,7 +170,7 @@ function dfrn_confirm_post(&$a,$handsfree = null) {
$params = array();
/**
/*
*
* Per the DFRN protocol, we will verify both ends by encrypting the dfrn_id with our
* site private key (person on the other end can decrypt it with our site public key).
@ -212,7 +216,7 @@ function dfrn_confirm_post(&$a,$handsfree = null) {
logger('Confirm: posting data to ' . $dfrn_confirm . ': ' . print_r($params,true), LOGGER_DATA);
/**
/*
*
* POST all this stuff to the other site.
* Temporarily raise the network timeout to 120 seconds because the default 60
@ -506,7 +510,7 @@ function dfrn_confirm_post(&$a,$handsfree = null) {
//NOTREACHED
}
/**
/*
*
*
* End of Scenario 1. [Local confirmation of remote friend request].

9
mod/dfrn_notify.php

@ -1,5 +1,10 @@
<?php
/**
* @file mod/dfrn_notify.php
* @brief The dfrn notify endpoint
* @see PDF with dfrn specs: https://github.com/friendica/friendica/blob/master/spec/dfrn2.pdf
*/
require_once('include/items.php');
require_once('include/dfrn.php');
require_once('include/event.php');
@ -7,7 +12,7 @@ require_once('include/event.php');
require_once('library/defuse/php-encryption-1.2.1/Crypto.php');
function dfrn_notify_post(&$a) {
logger(__function__, LOGGER_TRACE);
logger(__function__, LOGGER_TRACE);
$dfrn_id = ((x($_POST,'dfrn_id')) ? notags(trim($_POST['dfrn_id'])) : '');
$dfrn_version = ((x($_POST,'dfrn_version')) ? (float) $_POST['dfrn_version'] : 2.0);
$challenge = ((x($_POST,'challenge')) ? notags(trim($_POST['challenge'])) : '');
@ -117,7 +122,7 @@ function dfrn_notify_post(&$a) {
if($dissolve == 1) {
/**
/*
* Relationship is dissolved permanently
*/

BIN
spec/dfrn2.odt

Binary file not shown.

BIN
spec/dfrn2.pdf

Binary file not shown.

BIN
spec/dfrn2_contact_confirmation.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 245 KiB

162
spec/dfrn2_contact_confirmation.svg

@ -0,0 +1,162 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg version="1.2" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0" y="0" width="1633" height="2173" viewBox="0 0 1633 2173">
<style type="text/css"><![CDATA[
text { font:12px Dialog; }
]]></style>
<rect x="-485" y="-485" width="2603" height="3143" style="fill:rgb(255,255,255);stroke:none" />
<clipPath id="clip1"><path d="M614,37 L1056,37 L1056,106 L614,106 L614,37 Z" /></clipPath>
<path d="M616,39 L616,103 L1053,103 L1053,39 Z" style="fill:rgb(202,221,254);stroke:none" clip-path="url(#clip1)" />
<clipPath id="clip2"><path d="M614,37 L1056,37 L1056,106 L614,106 L614,37 Z" /></clipPath>
<path d="M616,39 L616,103 L1053,103 L1053,39 Z" style="fill:none;stroke:rgb(61,83,127)" clip-path="url(#clip2)" />
<text x="649" y="76" style="font:18px Open Sans">Friendica - Contact confirmation</text>
<clipPath id="clip3"><path d="M1198,202 L1388,202 L1388,244 L1198,244 L1198,202 Z" /></clipPath>
<path d="M1208,204 C1203.5820313,204 1200,207.5820313 1200,212 L1200,233 C1200,237.4179688 1203.5820313,241 1208,241 L1377,241 C1381.4179688,241 1385,237.4179688 1385,233 L1385,212 C1385,207.5820313 1381.4179688,204 1377,204 Z" style="fill:rgb(0,131,191);stroke:none" clip-path="url(#clip3)" />
<clipPath id="clip4"><path d="M1198,202 L1388,202 L1388,244 L1198,244 L1198,202 Z" /></clipPath>
<path d="M1208,204 C1203.5820313,204 1200,207.5820313 1200,212 L1200,233 C1200,237.4179688 1203.5820313,241 1208,241 L1377,241 C1381.4179688,241 1385,237.4179688 1385,233 L1385,212 C1385,207.5820313 1381.4179688,204 1377,204 Z" style="fill:none;stroke:rgb(0,131,191)" clip-path="url(#clip4)" />
<text x="1213" y="225" style="font:13px Tahoma">bob@example.com</text>
<image x="0" y="0" width="1374" height="231" xlink:href="data:image/png;base64,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" /><clipPath id="clip5"><path d="M181,198 L432,198 L432,240 L181,240 L181,198 Z" /></clipPath>
<path d="M191,200 C186.5820313,200 183,203.5820313 183,208 L183,229 C183,233.4179688 186.5820313,237 191,237 L421,237 C425.4179688,237 429,233.4179688 429,229 L429,208 C429,203.5820313 425.4179688,200 421,200 Z" style="fill:rgb(0,131,191);stroke:none" clip-path="url(#clip5)" />
<clipPath id="clip6"><path d="M181,198 L432,198 L432,240 L181,240 L181,198 Z" /></clipPath>
<path d="M191,200 C186.5820313,200 183,203.5820313 183,208 L183,229 C183,233.4179688 186.5820313,237 191,237 L421,237 C425.4179688,237 429,233.4179688 429,229 L429,208 C429,203.5820313 425.4179688,200 421,200 Z" style="fill:none;stroke:rgb(0,131,191)" clip-path="url(#clip6)" />
<text x="197" y="221" style="font:13px Tahoma">karen@karenhompage.com</text>
<image x="0" y="0" width="418" height="227" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAaIAAADjCAYAAADHeBASAAAE2klEQVR42u3cS29VVRiAYRKNP0ApIg64CImEQEAEbe0pF6EookKhBSlGQGoISlBQDNeUg1RAI5cCcm3BtiiiRGIMAw0goYUUhHIpNyVAyx9AGXRCP3eP0RinLXHyPMkanazJmrz59l5nd+oEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP+PiGjXAoAODdHwvVc7p/Y2luXWXDqfrJbM2nu5IVVzKd32mxABcN9C9HzNuSnZFefuZg0uif5Fe2L8xsvxyrpLMXzZoRg4f0fkVjXeSVU3ThIiADo8RCN2NxSlqi62Dio5EI+NOx2D5zZG0bamKNraFIXJmrj5Zgxb/mPkVV9sHVF1oUiIAOiwEKUqzmSlKs//nvPBoWQCuhFjyq7H5O1NMWVHU0zd1RzDS69Fr2kNMWB2Y/QaXRkjqhv/yPniXBchAqBjQrSjIT3g7S2Rs/BKFJTfitd2NicriVBFcxQkk1DusqvRe8a56DrhdDySXx99i1dHavvZMiECoENClLv1TEPPYeXxzIJLmUdxU3c1RXFlc0zb3Rz5a6/HsJXXYnj6SjxRfDS65u+PHjlLYkjZD5eT7Q85QQDaH6JNp1uGvNMQ4zfe/OtxXDIJvb6nOd6ouh25K67Fy+t/i6Hzj0X2gi9j4YnaWHTqRBRs+/pesr2bEwSg/SHaUN/y4uqr/7wXKs6E6HYUbLkZXab/ElmTj8bT7+6PRfVJgD6tjmdnrcnEqE9eXp4TBKD9IfrsZEPq/YNRsPlWFG27lbmg0DYRFW67Hj1nHIknZ1bHmFU1MWZ5ZeTNrYiX0pviwxO1rZ17937KCQLQ7hCl1tSlB87aGKPSv0a/kgvx6oYbUbzrRkxcV59MQN/Ekvq6mLXvYLy177uYsHZ3MhnVxQurNtcl27OcIADtDlHOJ7Vdcj8+fid7zsF4OP9U9JneEBPXn43CdQdiaRKdUUt2JFPStzH7wPeZCI3+qKLl8SHjBybbH3SCALQ7RJmpaOWxSc+lf27tkbslhr7XGGPTP8Xik8eTGFVHr3GbInfezmRCqoy8xbta+81cX9IWIde3AeiwEGXeFa04Wpi97PDdQW+WR86cz2PpqWT6WbguxpWWx5L62hi1Yk/LwNnbpyfbHvBlBQA6PESZj56WHumcKj1cNmTeV5cnbqi51xajZDJqHZsuP/7o4LH9/56EhAiA+xKifwWm7c+q3fqOHJnXuXv3tttxWf+NUNv6E/vueIp8e9bqAAAAAElFTkSuQmCC" /><clipPath id="clip7"><path d="M215,325 L390,325 L390,367 L215,367 L215,325 Z" /></clipPath>
<path d="M224,326 C219.5820313,326 216,329.5820313 216,334 L216,357 C216,361.4179688 219.5820313,365 224,365 L380,365 C384.4179688,365 388,361.4179688 388,357 L388,334 C388,329.5820313 384.4179688,326 380,326 Z" style="fill:rgb(127,127,127);stroke:none" clip-path="url(#clip7)" />
<text x="230" y="348" style="font:13px Open Sans">notifications.php</text>
<clipPath id="clip8"><path d="M30,409 L580,409 L580,566 L30,566 L30,409 Z" /></clipPath>
<path d="M39,410 C34.5820313,410 31,413.5820313 31,418 L31,556 C31,560.4179688 34.5820313,564 39,564 L570,564 C574.4179688,564 578,560.4179688 578,556 L578,418 C578,413.5820313 574.4179688,410 570,410 Z" style="fill:rgb(255,255,3);stroke:none" clip-path="url(#clip8)" />
<text x="45" y="432" style="font:13px Open Sans">notifications_content()</text>
<text x="45" y="455" style="font:13px Open Sans">-----------------------------------------</text>
<text x="45" y="501" style="font:13px Open Sans">- This is the page where Karen see Bobs friendship request</text>
<text x="45" y="524" style="font:13px Open Sans">- the submit form redirects to Karens local dfrn_confirm page </text>
<text x="45" y="547" style="font:13px Open Sans">($dfrn_id, $contact_id, $intro_id are submitted)</text>
<clipPath id="clip9"><path d="M219,640 L399,640 L399,682 L219,682 L219,640 Z" /></clipPath>
<path d="M228,641 C223.5820313,641 220,644.5820313 220,649 L220,672 C220,676.4179688 223.5820313,680 228,680 L389,680 C393.4179688,680 397,676.4179688 397,672 L397,649 C397,644.5820313 393.4179688,641 389,641 Z" style="fill:rgb(127,127,127);stroke:none" clip-path="url(#clip9)" />
<text x="234" y="663" style="font:13px Open Sans">dfrn_confirm.php</text>
<clipPath id="clip10"><path d="M14,698 L594,698 L594,1798 L14,1798 L14,698 Z" /></clipPath>
<path d="M23,699 C18.5820313,699 15,702.5820313 15,707 L15,1788 C15,1792.4179688 18.5820313,1796 23,1796 L584,1796 C588.4179688,1796 592,1792.4179688 592,1788 L592,707 C592,702.5820313 588.4179688,699 584,699 Z" style="fill:rgb(255,255,3);stroke:none" clip-path="url(#clip10)" />
<text x="29" y="721" style="font:13px Open Sans">dfrn_confirm_post()</text>
<text x="29" y="744" style="font:13px Open Sans">SCENARIO 1 ( no $_POST['source_url'] available)</text>
<text x="29" y="767" style="font:13px Open Sans">--------------------------------------------------------------------------------</text>
<text x="29" y="813" style="font:13px Open Sans">- contact data come either form $handsfree (if autoconfirm) or </text>
<text x="29" y="836" style="font:13px Open Sans">from $_POST</text>
<text x="29" y="882" style="font:13px Open Sans">- get all data about Karen form the user table</text>
<text x="29" y="928" style="font:13px Open Sans">[Note: Bob have been issued an ID (contact issue-id) when he first </text>
<text x="29" y="951" style="font:13px Open Sans">requested the friendship. Locate Bobs contact record. At this </text>
<text x="29" y="974" style="font:13px Open Sans">time, his record will have both pending and blocked set to 1. </text>
<text x="29" y="997" style="font:13px Open Sans">There won't be any dfrn_id if this is a network follower, so use </text>
<text x="29" y="1020" style="font:13px Open Sans">the contact_id instead]</text>
<text x="29" y="1066" style="font:13px Open Sans">- search for Bob in the contact table by contact_id, dfrn_id and </text>
<text x="29" y="1089" style="font:13px Open Sans">issued-id not empty (for the uid -&gt; Karens user id)</text>
<text x="29" y="1135" style="font:13px Open Sans">- if network = dfrn </text>
<text x="29" y="1158" style="font:13px Open Sans"> -&gt; create a new keypair (prvkey &amp; pubkey) and update the </text>
<text x="29" y="1181" style="font:13px Open Sans">contact</text>
<text x="29" y="1227" style="font:13px Open Sans">[Note: Generate a key pair for all further communications with </text>
<text x="29" y="1250" style="font:13px Open Sans">this person. We have a keypair for every contact, and a site key </text>
<text x="29" y="1273" style="font:13px Open Sans">for unknown people. This provides a means to carry on </text>
<text x="29" y="1296" style="font:13px Open Sans">relationships with other people any single key is compromised. It </text>
<text x="29" y="1319" style="font:13px Open Sans">is a robust key. We're much more worried about key leakage </text>
<text x="29" y="1342" style="font:13px Open Sans">than anybody cracking it.]</text>
<text x="29" y="1388" style="font:13px Open Sans"> -&gt; update Bobs contact record (in the contact table) with the </text>
<text x="29" y="1411" style="font:13px Open Sans">generated prvkey</text>
<text x="29" y="1457" style="font:13px Open Sans"> -&gt; encrypting the dfrn_id with Karens prvkey (Bob can decrypt it </text>
<text x="29" y="1480" style="font:13px Open Sans">on the other and with Karens site-pubkey) and add it to the </text>
<text x="29" y="1503" style="font:13px Open Sans">transmit params.</text>
<text x="29" y="1549" style="font:13px Open Sans"> -&gt; encrypting Karens profile url with Bobs site-pubkey (Bob </text>
<text x="29" y="1572" style="font:13px Open Sans">can decrypt it with his own private key) and add it to the </text>
<text x="29" y="1595" style="font:13px Open Sans">transmit params.</text>
<text x="29" y="1641" style="font:13px Open Sans"> -&gt; add the above generated public key to params which </text>
<text x="29" y="1664" style="font:13px Open Sans">getting transmitted (if $aes_allow -&gt; encrypt the the public key)</text>
<text x="29" y="1710" style="font:13px Open Sans"> -&gt; add duplex state and page-flags to the params</text>
<text x="29" y="1756" style="font:13px Open Sans"> -&gt; send params to Bobs dfrn_confirm page ($res = </text>
<text x="29" y="1779" style="font:13px Open Sans">post_url($dfrn_confirm,$params);</text>
<clipPath id="clip11"><path d="M1041,1319 L1619,1319 L1619,1913 L1041,1913 L1041,1319 Z" /></clipPath>
<path d="M1050,1320 C1045.5820313,1320 1042,1323.5820313 1042,1328 L1042,1903 C1042,1907.4179688 1045.5820313,1911 1050,1911 L1609,1911 C1613.4179688,1911 1617,1907.4179688 1617,1903 L1617,1328 C1617,1323.5820313 1613.4179688,1320 1609,1320 Z" style="fill:rgb(255,255,3);stroke:none" clip-path="url(#clip11)" />
<text x="1055" y="1342" style="font:13px Open Sans">dfrn_confirm_post()</text>
<text x="1055" y="1365" style="font:13px Open Sans">SCENARIO 2 ( $_POST['source_url'] is available)</text>
<text x="1055" y="1388" style="font:13px Open Sans">------------------------------------------------------------------------</text>
<text x="1055" y="1434" style="font:13px Open Sans">- get all data about Bob from the user table (prvkey and uid form </text>
<text x="1055" y="1457" style="font:13px Open Sans">Bob )</text>
<text x="1055" y="1503" style="font:13px Open Sans">- decrypt the transmitted source_url (profile url) with Bobs </text>
<text x="1055" y="1526" style="font:13px Open Sans">prvkey</text>
<text x="1055" y="1572" style="font:13px Open Sans">- get data of Karen from contact table by her source_url (and by </text>
<text x="1055" y="1595" style="font:13px Open Sans">her user id)</text>
<text x="1055" y="1641" style="font:13px Open Sans">- decrypt the dfrn_id sent by Karen with Karens site-pubkey </text>
<text x="1055" y="1664" style="font:13px Open Sans">(taken from contact table)</text>
<text x="1055" y="1710" style="font:13px Open Sans">- if possible decrpyt the pubkey sent by Karen with the prvkey of </text>
<text x="1055" y="1733" style="font:13px Open Sans">Bob (taken from user table) -&gt; if this is not possible use the raw </text>
<text x="1055" y="1756" style="font:13px Open Sans">pubkey</text>
<text x="1055" y="1802" style="font:13px Open Sans">- search if the dfrn_id is already present in the contact table (if it </text>
<text x="1055" y="1825" style="font:13px Open Sans">is prensent it is a duplicate)</text>
<text x="1055" y="1871" style="font:13px Open Sans">- update dfrn-id and pubkey for Karens contact entry in the </text>
<text x="1055" y="1894" style="font:13px Open Sans">contact table</text>
<clipPath id="clip12"><path d="M42,1841 L559,1841 L559,1906 L42,1906 L42,1841 Z" /></clipPath>
<path d="M51,1842 C46.5820313,1842 43,1845.5820313 43,1850 L43,1896 C43,1900.4179688 46.5820313,1904 51,1904 L549,1904 C553.4179688,1904 557,1900.4179688 557,1896 L557,1850 C557,1845.5820313 553.4179688,1842 549,1842 Z" style="fill:rgb(255,255,3);stroke:none" clip-path="url(#clip12)" />
<text x="57" y="1864" style="font:13px Open Sans"> -&gt; set the relation for the contact and set pending = 0 and </text>
<text x="57" y="1887" style="font:13px Open Sans">blocked = 0</text>
<clipPath id="clip13"><path d="M1128,1950 L1541,1950 L1541,2061 L1128,2061 L1128,1950 Z" /></clipPath>
<path d="M1137,1951 C1132.5820313,1951 1129,1954.5820313 1129,1959 L1129,2051 C1129,2055.4179688 1132.5820313,2059 1137,2059 L1531,2059 C1535.4179688,2059 1539,2055.4179688 1539,2051 L1539,1959 C1539,1954.5820313 1535.4179688,1951 1531,1951 Z" style="fill:rgb(255,255,3);stroke:none" clip-path="url(#clip13)" />
<text x="1142" y="1973" style="font:13px Open Sans">- update the relationship of the contact Karen</text>
<text x="1142" y="2019" style="font:13px Open Sans">-&gt; if duplex delete the issued-id</text>
<text x="1142" y="2042" style="font:13px Open Sans">-&gt; set blocked = 0 and pending = 0</text>
<clipPath id="clip14"><path d="M1241,2117 L1428,2117 L1428,2159 L1241,2159 L1241,2117 Z" /></clipPath>
<path d="M1250,2118 C1245.5820313,2118 1242,2121.5820313 1242,2126 L1242,2149 C1242,2153.4179688 1245.5820313,2157 1250,2157 L1418,2157 C1422.4179688,2157 1426,2153.4179688 1426,2149 L1426,2126 C1426,2121.5820313 1422.4179688,2118 1418,2118 Z" style="fill:rgb(255,255,3);stroke:none" clip-path="url(#clip14)" />
<text x="1255" y="2140" style="font:13px Open Sans">send a notification</text>
<clipPath id="clip15"><path d="M190,1937 L410,1937 L410,1979 L190,1979 L190,1937 Z" /></clipPath>
<path d="M199,1938 C194.5820313,1938 191,1941.5820313 191,1946 L191,1969 C191,1973.4179688 194.5820313,1977 199,1977 L400,1977 C404.4179688,1977 408,1973.4179688 408,1969 L408,1946 C408,1941.5820313 404.4179688,1938 400,1938 Z" style="fill:rgb(255,255,3);stroke:none" clip-path="url(#clip15)" />
<text x="205" y="1960" style="font:13px Open Sans">delete the intro of Bob</text>
<clipPath id="clip16"><path d="M156,14 L512,14 L512,125 L156,125 L156,14 Z" /></clipPath>
<path d="M165,15 C160.5820313,15 157,18.5820313 157,23 L157,115 C157,119.4179688 160.5820313,123 165,123 L502,123 C506.4179688,123 510,119.4179688 510,115 L510,23 C510,18.5820313 506.4179688,15 502,15 Z" style="fill:rgb(255,255,255);stroke:none" clip-path="url(#clip16)" />
<text x="171" y="38" style="font:13px Open Sans">Note: this chart respects only dfrn </text>
<text x="171" y="61" style="font:13px Open Sans">contacts and focuses on key exchange </text>
<text x="171" y="84" style="font:13px Open Sans">(for other areas it might be very </text>
<text x="171" y="106" style="font:13px Open Sans">incomplete)</text>
<clipPath id="clip17"><path d="M266,361 L341,361 L341,414 L266,414 L266,361 Z" /></clipPath>
<path d="M302.4140625,365 L303.1328125,410" style="fill:none;stroke:rgb(182,44,37);stroke-width:3;stroke-dasharray:18,9;stroke-dashoffset:0" clip-path="url(#clip17)" />
<clipPath id="clip18"><path d="M266,361 L341,361 L341,414 L266,414 L266,361 Z" /></clipPath>
<path d="M297.9960938,401.421875 L303.1328125,410 L307.9960938,401.2617188 Z" style="fill:rgb(182,44,37);stroke:none" clip-path="url(#clip18)" />
<clipPath id="clip19"><path d="M266,361 L341,361 L341,414 L266,414 L266,361 Z" /></clipPath>
<path d="M297.9960938,401.421875 L303.1328125,410 L307.9960938,401.2617188 Z" style="fill:none;stroke:rgb(182,44,37);stroke-width:3" clip-path="url(#clip19)" />
<clipPath id="clip20"><path d="M271,676 L346,676 L346,703 L271,703 L271,676 Z" /></clipPath>
<path d="M308.3515625,680 L308.6445313,699" style="fill:none;stroke:rgb(182,44,37);stroke-width:3;stroke-dasharray:18,9;stroke-dashoffset:0" clip-path="url(#clip20)" />
<clipPath id="clip21"><path d="M271,676 L346,676 L346,703 L271,703 L271,676 Z" /></clipPath>
<path d="M303.5117188,690.4179688 L308.6445313,699 L313.5078125,690.265625 Z" style="fill:rgb(182,44,37);stroke:none" clip-path="url(#clip21)" />
<clipPath id="clip22"><path d="M271,676 L346,676 L346,703 L271,703 L271,676 Z" /></clipPath>
<path d="M303.5117188,690.4179688 L308.6445313,699 L313.5078125,690.265625 Z" style="fill:none;stroke:rgb(182,44,37);stroke-width:3" clip-path="url(#clip22)" />
<clipPath id="clip23"><path d="M270,560 L345,560 L345,645 L270,645 L270,560 Z" /></clipPath>
<path d="M306.4921875,564 L308.1054688,641" style="fill:none;stroke:rgb(182,44,37);stroke-width:3;stroke-dasharray:18,9;stroke-dashoffset:0" clip-path="url(#clip23)" />
<clipPath id="clip24"><path d="M270,560 L345,560 L345,645 L270,645 L270,560 Z" /></clipPath>
<path d="M302.9257813,632.4453125 L308.1054688,641 L312.9257813,632.2382813 Z" style="fill:rgb(182,44,37);stroke:none" clip-path="url(#clip24)" />
<clipPath id="clip25"><path d="M270,560 L345,560 L345,645 L270,645 L270,560 Z" /></clipPath>
<path d="M302.9257813,632.4453125 L308.1054688,641 L312.9257813,632.2382813 Z" style="fill:none;stroke:rgb(182,44,37);stroke-width:3" clip-path="url(#clip25)" />
<clipPath id="clip26"><path d="M588,1338 L1046,1338 L1046,1770 L588,1770 L588,1338 Z" /></clipPath>
<path d="M592,1766.2265625 L1042,1342.65625" style="fill:none;stroke:rgb(182,44,37);stroke-width:3;stroke-dasharray:18,9;stroke-dashoffset:0" clip-path="url(#clip26)" />
<clipPath id="clip27"><path d="M588,1338 L1046,1338 L1046,1770 L588,1770 L588,1338 Z" /></clipPath>
<path d="M1039.1210938,1352.2304688 L1042,1342.65625 L1032.265625,1344.9492188 Z" style="fill:rgb(182,44,37);stroke:none" clip-path="url(#clip27)" />
<clipPath id="clip28"><path d="M588,1338 L1046,1338 L1046,1770 L588,1770 L588,1338 Z" /></clipPath>
<path d="M1039.1210938,1352.2304688 L1042,1342.65625 L1032.265625,1344.9492188 Z" style="fill:none;stroke:rgb(182,44,37);stroke-width:3" clip-path="url(#clip28)" />
<clipPath id="clip29"><path d="M263,1792 L338,1792 L338,1846 L263,1846 L263,1792 Z" /></clipPath>
<path d="M300.4296875,1796 L300.1992188,1842" style="fill:none;stroke:rgb(182,44,37);stroke-width:3;stroke-dasharray:18,9;stroke-dashoffset:0" clip-path="url(#clip29)" />
<clipPath id="clip30"><path d="M263,1792 L338,1792 L338,1846 L263,1846 L263,1792 Z" /></clipPath>
<path d="M295.2421875,1833.3164063 L300.1992188,1842 L305.2421875,1833.3632813 Z" style="fill:rgb(182,44,37);stroke:none" clip-path="url(#clip30)" />
<clipPath id="clip31"><path d="M263,1792 L338,1792 L338,1846 L263,1846 L263,1792 Z" /></clipPath>
<path d="M295.2421875,1833.3164063 L300.1992188,1842 L305.2421875,1833.3632813 Z" style="fill:none;stroke:rgb(182,44,37);stroke-width:3" clip-path="url(#clip31)" />
<clipPath id="clip32"><path d="M1295,1907 L1370,1907 L1370,1955 L1295,1955 L1295,1907 Z" /></clipPath>
<path d="M1332.9140625,1911 L1333.4453125,1951" style="fill:none;stroke:rgb(182,44,37);stroke-width:3;stroke-dasharray:18,9;stroke-dashoffset:0" clip-path="url(#clip32)" />
<clipPath id="clip33"><path d="M1295,1907 L1370,1907 L1370,1955 L1295,1955 L1295,1907 Z" /></clipPath>
<path d="M1328.3320313,1942.40625 L1333.4453125,1951 L1338.328125,1942.2734375 Z" style="fill:rgb(182,44,37);stroke:none" clip-path="url(#clip33)" />
<clipPath id="clip34"><path d="M1295,1907 L1370,1907 L1370,1955 L1295,1955 L1295,1907 Z" /></clipPath>
<path d="M1328.3320313,1942.40625 L1333.4453125,1951 L1338.328125,1942.2734375 Z" style="fill:none;stroke:rgb(182,44,37);stroke-width:3" clip-path="url(#clip34)" />
<clipPath id="clip35"><path d="M1296,2055 L1371,2055 L1371,2122 L1296,2122 L1296,2055 Z" /></clipPath>
<path d="M1334,2059 L1334,2118" style="fill:none;stroke:rgb(182,44,37);stroke-width:3;stroke-dasharray:18,9;stroke-dashoffset:0" clip-path="url(#clip35)" />
<clipPath id="clip36"><path d="M1296,2055 L1371,2055 L1371,2122 L1296,2122 L1296,2055 Z" /></clipPath>
<path d="M1329,2109.3398438 L1334,2118 L1339,2109.3398438 Z" style="fill:rgb(182,44,37);stroke:none" clip-path="url(#clip36)" />
<clipPath id="clip37"><path d="M1296,2055 L1371,2055 L1371,2122 L1296,2122 L1296,2055 Z" /></clipPath>
<path d="M1329,2109.3398438 L1334,2118 L1339,2109.3398438 Z" style="fill:none;stroke:rgb(182,44,37);stroke-width:3" clip-path="url(#clip37)" />
<clipPath id="clip38"><path d="M263,1900 L338,1900 L338,1942 L263,1942 L263,1900 Z" /></clipPath>
<path d="M300,1904 L299.6171875,1938" style="fill:none;stroke:rgb(182,44,37);stroke-width:3;stroke-dasharray:18,9;stroke-dashoffset:0" clip-path="url(#clip38)" />
<clipPath id="clip39"><path d="M263,1900 L338,1900 L338,1942 L263,1942 L263,1900 Z" /></clipPath>
<path d="M294.7148438,1929.2851563 L299.6171875,1938 L304.7148438,1929.3984375 Z" style="fill:rgb(182,44,37);stroke:none" clip-path="url(#clip39)" />
<clipPath id="clip40"><path d="M263,1900 L338,1900 L338,1942 L263,1942 L263,1900 Z" /></clipPath>
<path d="M294.7148438,1929.2851563 L299.6171875,1938 L304.7148438,1929.3984375 Z" style="fill:none;stroke:rgb(182,44,37);stroke-width:3" clip-path="url(#clip40)" />
</svg>

After

Width:  |  Height:  |  Size: 24 KiB

BIN
spec/dfrn2_contact_request.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 317 KiB

218
spec/dfrn2_contact_request.svg

@ -0,0 +1,218 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg version="1.2" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0" y="0" width="1458" height="2526" viewBox="0 0 1458 2526">
<style type="text/css"><![CDATA[
text { font:12px Dialog; }
]]></style>
<rect x="-485" y="-485" width="2428" height="3496" style="fill:rgb(255,255,255);stroke:none" />
<clipPath id="clip1"><path d="M468,32 L867,32 L867,101 L468,101 L468,32 Z" /></clipPath>
<path d="M470,34 L470,98 L864,98 L864,34 Z" style="fill:rgb(202,221,254);stroke:none" clip-path="url(#clip1)" />
<clipPath id="clip2"><path d="M468,32 L867,32 L867,101 L468,101 L468,32 Z" /></clipPath>
<path d="M470,34 L470,98 L864,98 L864,34 Z" style="fill:none;stroke:rgb(61,83,127)" clip-path="url(#clip2)" />
<text x="503" y="71" style="font:18px Open Sans">Friendica - Contact request</text>
<image x="0" y="0" width="834" height="74" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAA0IAAABKCAYAAACW5eSEAAAEYElEQVR42u3dyW+VVRjAYRKNf4BSRFwwCImEQEAs2tpbCjIoIkJLC1KMgGAISlBQDGPgKhWQWKCATG3BtiiiRGIMCw0gaQspCGUokxJKyz+AsuiGvt7WIcatq9s8T/Iubr6czdn9cr7v3G7dAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKBLi4j/NQAAAGkfQnkHrndPHGgqyam5cjE1bZ1z4GpjouZKsuOZEAIAALpUCD1fc2F6VsWFexnD58Xgov0xeevVmFR6JfJWHY2hi/dETlXT3UR101QhBAAAdIkQGrWvsShRdbl92LzD8djEszF8YVMU7WqJop0tUZiagu3NMXL1D5Fbfbl9VNWlIiEEAACkdQglKs5lJCov/pb9/tGYVHorxpfcjGm7W2L6npaYUd4aeWtuRL+ZjTFkflP0G1sZo6qbfs/+/EIPIQQAAKRvCO1pTA55a0dkL70W+WW349W9ralJRVBFa+Rvb46cVdej/+wL0XPK2XhkXEMMLF4fid3nS4QQAACQtiGUs/NcY9+RZfHMkiudr8LNKG+J4srWmLmvNcZtvBkjP7wReclr8UTxieg57lD0yV4RmSXfX00tf8gOAgAA6RlC2862Zb7dGJO3Nv/5OlxFa7y2vzVer7oTOWtvxMubf40Ri09G1pIvYumpulh25lTk7/rqfmp5LzsIAACkZwhtaWh7cf31f74LKu4MoTuRv6M5esz6OTKmnYin3zkUyxpSAbSpOp6du6Ezhgbk5ubaQQAAID1D6NPTjYn3jkT+9ttRtOt25wUJHSdChbtuRt/Zx+PJOdUxfl1NjF9dGbkLK+Kl5Lb44FRde/f+/Z+ygwAAQFqGUGJDfXLo3K0xJvlLDJp3KV7ZciuKy29FQWlD5G/6OlY01Mfcg0fizYPfxpSN+2JZ6vcL67bXp5Zn2EEAACAtQyj7k7oeOR/X3s1acCQeHncmBsxqjILN56Ow9HCsTEXPmBV7Ykb5NzH/8HedETT2o4q2xzMnD00tf9AOAgAAaRlCnadCH56c+lzyp/Y+OTtixLtNMSH5Yyw/XZuKoeroN3Fb5CzaGwWllZG7vLx90JzN8zoiyPXZAABAWodQ57dCa08UZq06dm/YG2WRveCzWHmmPsYuLY2Ja8piRUNdjFm7v23o/N2zUsse+HsNAABAWodQx+StOd49seZYSeaiL68WbKm53xFDy0/Xtk9IltU+OnzC4G5/nQQJIQAAoMuE0L8Cp+PPUnsNHD06t3vv3h23w2X8N4I65g/3mXiK17zpCgAAAABJRU5ErkJggg==" /><clipPath id="clip3"><path d="M1006,236 L1266,236 L1266,278 L1006,278 L1006,236 Z" /></clipPath>
<path d="M1016,238 C1011.5820313,238 1008,241.5820313 1008,246 L1008,267 C1008,271.4179688 1011.5820313,275 1016,275 L1255,275 C1259.4179688,275 1263,271.4179688 1263,267 L1263,246 C1263,241.5820313 1259.4179688,238 1255,238 Z" style="fill:rgb(0,131,191);stroke:none" clip-path="url(#clip3)" />
<clipPath id="clip4"><path d="M1006,236 L1266,236 L1266,278 L1006,278 L1006,236 Z" /></clipPath>
<path d="M1016,238 C1011.5820313,238 1008,241.5820313 1008,246 L1008,267 C1008,271.4179688 1011.5820313,275 1016,275 L1255,275 C1259.4179688,275 1263,271.4179688 1263,267 L1263,246 C1263,241.5820313 1259.4179688,238 1255,238 Z" style="fill:none;stroke:rgb(0,131,191)" clip-path="url(#clip4)" />
<text x="1021" y="259" style="font:13px Tahoma">karenn@karenhompage.com</text>
<image x="0" y="0" width="1252" height="265" xlink:href="data:image/png;base64,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" /><clipPath id="clip5"><path d="M235,234 L425,234 L425,276 L235,276 L235,234 Z" /></clipPath>
<path d="M245,236 C240.5820313,236 237,239.5820313 237,244 L237,265 C237,269.4179688 240.5820313,273 245,273 L414,273 C418.4179688,273 422,269.4179688 422,265 L422,244 C422,239.5820313 418.4179688,236 414,236 Z" style="fill:rgb(0,131,191);stroke:none" clip-path="url(#clip5)" />
<clipPath id="clip6"><path d="M235,234 L425,234 L425,276 L235,276 L235,234 Z" /></clipPath>
<path d="M245,236 C240.5820313,236 237,239.5820313 237,244 L237,265 C237,269.4179688 240.5820313,273 245,273 L414,273 C418.4179688,273 422,269.4179688 422,265 L422,244 C422,239.5820313 418.4179688,236 414,236 Z" style="fill:none;stroke:rgb(0,131,191)" clip-path="url(#clip6)" />
<text x="251" y="257" style="font:13px Tahoma">bob@example.com</text>
<image x="0" y="0" width="411" height="263" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAZsAAAEHCAYAAAB4POvAAAAFDElEQVR42u3c3ZOOZRzAcTM1/QG1K+nAS8xkDEOibPusl1glFYslqwnRGGUUpWExPLKhpsUir7tkV0mZTNM4qEHGLrPELtaiDHb9A8rBnthf9z5NTdPR4rDPZ+Y6euY6uU6+87vv67k7dAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+H+LiPtaAHDXsRm693JWam9DSW7VxXPJasmsvY11qaqL6bbfxAaA+4rN81X1kweX19/OHjAr+hTujrEbGuOV0osxdOmh6Dd/e+TuabiVqmyYIDYA3FNshu2qK0ztudDaf9aBeGzM6RgwtyEKtzZF4ZammJis8Zuux5BlP0Ze5YXWYXvOF4oNAHcVm1T5mexUxbnfcz44lEwy12JUydWYtK0pJm9viik7m2Po8ivRfWpd9J3dEN1HVsSwyoY/cr6o7yg2ALQ/Ntvr0n3f3hw5Cy9FQdmNeG1Hc7KS0JQ3R0Ey0eQuvRw9ptdHp3Gn45H82uhVtDpS286WiA0A7Y5N7pYzdd2GlMUzCy5mHptN2dkURRXNMXVXc+SvvRpDVl6JoelL8UTR0eiUvz+65hTHwJIfGpPtDzlBANoXm42nWwa+UxdjN1z/69FZMtG8vrs53thzM3JXXImX1/0Wg+Yfi8ELvoyFJ6pj0akTUbD16zvJ9s5OEID2xWZ9bcuLqy//856mKBObm1Gw+Xp0nPZLZE86Gk+/uz8W1SaR+bQynp25JhOcnnl5eU4QgPbF5rOTdan3D0bBphtRuPVG5lJA22QzcevV6Db9SDw5ozJGraqKUcsqIm9uebyU3hgfnqhuzerR4yknCEC7YpNaU5PuN3NDjEj/Gr1nnY9X11+Lop3XYnxpbTLJfBPFtTUxc9/BeGvfdzFu7a5kwqmJF1Ztqkm2ZztBANoVm5xPqjvmfnz81uA5B+Ph/FPRc1pdjF93NiaWHoglSVhGFG9Ppp1vY/aB7zOhGflRecvjA8f2S7Y/6AQBaFdsMtPNymMTnkv/3No1d3MMeq8hRqd/isUnjyfBqYzuYzZG7rwdyaRTEXmLd7b2nrFuVltoXH0G4K5ik3l3s+LoxMFLD9/u/2ZZ5Mz5PJacSqaYhaUxZnlZFNdWx4gVu1v6zd42Ldn2gC8IAHBPscl8iHP5kazU8sMlA+d91Th+fdWdtuAkE07r6HTZ8UcHjO7z90QjNgDcc2z+FZG2P2x27jV8eF5Wly5tt86y/xuatvUnRFJ4iu/wPU8AAAAASUVORK5CYII=" /><clipPath id="clip7"><path d="M953,363 L1344,363 L1344,451 L953,451 L953,363 Z" /></clipPath>
<path d="M962,364 C957.5820313,364 954,367.5820313 954,372 L954,441 C954,445.4179688 957.5820313,449 962,449 L1334,449 C1338.4179688,449 1342,445.4179688 1342,441 L1342,372 C1342,367.5820313 1338.4179688,364 1334,364 Z" style="fill:rgb(127,127,127);stroke:none" clip-path="url(#clip7)" />
<text x="1073" y="386" style="font:13px Open Sans"> dfrn_request.php</text>
<text x="1146" y="409" style="font:13px Open Sans">-</text>
<text x="968" y="432" style="font:13px Open Sans">https://karenhompage/dfrn_request/karin</text>
<clipPath id="clip8"><path d="M890,808 L1416,808 L1416,1448 L890,1448 L890,808 Z" /></clipPath>
<path d="M899,809 C894.5820313,809 891,812.5820313 891,817 L891,1438 C891,1442.4179688 894.5820313,1446 899,1446 L1406,1446 C1410.4179688,1446 1414,1442.4179688 1414,1438 L1414,817 C1414,812.5820313 1410.4179688,809 1406,809 Z" style="fill:rgb(255,255,3);stroke:none" clip-path="url(#clip8)" />
<text x="904" y="831" style="font:13px Open Sans">dfrn_request_post - SCENARIO 1</text>
<text x="904" y="854" style="font:13px Open Sans">----------------------------------------------</text>
<text x="904" y="900" style="font:13px Open Sans">- Cleanup old introductions that remain blocked + Cleanup </text>
<text x="904" y="923" style="font:13px Open Sans">any old email intros - which will have a greater lifetime</text>
<text x="904" y="969" style="font:13px Open Sans">- probe_url Bobs posted dfrn_url and get the network with </text>
<text x="904" y="992" style="font:13px Open Sans">webfinger_dfrn</text>
<text x="904" y="1038" style="font:13px Open Sans">- try to select all contact data of Bob (contact table) by the </text>
<text x="904" y="1061" style="font:13px Open Sans">url ($_POST['dfrn_url] and profile uid ($a-&gt;profile['uid']) </text>
<text x="904" y="1084" style="font:13px Open Sans">where self = 0 to look if this contact is already there (if </text>
<text x="904" y="1107" style="font:13px Open Sans">issued-id or rel is already available return here because it </text>
<text x="904" y="1130" style="font:13px Open Sans">seems that we are already connected)</text>
<text x="904" y="1176" style="font:13px Open Sans">- create a issued-id with $issued_id = random_string();</text>
<text x="904" y="1222" style="font:13px Open Sans">- if we already found a contact record above update the </text>
<text x="904" y="1245" style="font:13px Open Sans">issued-id with the one we have created</text>
<text x="904" y="1291" style="font:13px Open Sans">- otherwise if Bob is not already in the contact table scrape </text>
<text x="904" y="1314" style="font:13px Open Sans">Bobs profile and create a new contact with this data (e.g. </text>
<text x="904" y="1337" style="font:13px Open Sans">the scraped issued-id / profiles pubkey becomes contacts </text>
<text x="904" y="1360" style="font:13px Open Sans">site-pubkey) in the contact table (blocked = 1, pending = 1)</text>
<text x="904" y="1406" style="font:13px Open Sans">- select this created contact from contact table and create </text>
<text x="904" y="1429" style="font:13px Open Sans">an intro in the intro table (blocked = 1)</text>
<clipPath id="clip9"><path d="M925,693 L1374,693 L1374,735 L925,735 L925,693 Z" /></clipPath>
<path d="M934,694 C929.5820313,694 926,697.5820313 926,702 L926,725 C926,729.4179688 929.5820313,733 934,733 L1364,733 C1368.4179688,733 1372,729.4179688 1372,725 L1372,702 C1372,697.5820313 1368.4179688,694 1364,694 Z" style="fill:rgb(255,255,3);stroke:none" clip-path="url(#clip9)" />
<text x="939" y="716" style="font:13px Open Sans">$_POST['dfrn_url'] is transmited and is Bobs profile url</text>
<clipPath id="clip10"><path d="M888,1557 L1418,1557 L1418,1852 L888,1852 L888,1557 Z" /></clipPath>
<path d="M897,1558 C892.5820313,1558 889,1561.5820313 889,1566 L889,1842 C889,1846.4179688 892.5820313,1850 897,1850 L1408,1850 C1412.4179688,1850 1416,1846.4179688 1416,1842 L1416,1566 C1416,1561.5820313 1412.4179688,1558 1408,1558 Z" style="fill:rgb(255,255,3);stroke:none" clip-path="url(#clip10)" />
<text x="902" y="1580" style="font:13px Open Sans">redirect to Bobs request page</text>
<text x="902" y="1626" style="font:13px Open Sans">goaway($parms['dfrn-request'] . "?dfrn_url=$dfrn_url"</text>
<text x="902" y="1649" style="font:13px Open Sans"> . '&amp;dfrn_version=' . </text>
<text x="902" y="1672" style="font:13px Open Sans">DFRN_PROTOCOL_VERSION</text>
<text x="902" y="1695" style="font:13px Open Sans"> . '&amp;confirm_key=' . $hash</text>
<text x="902" y="1718" style="font:13px Open Sans"> . (($aes_allow) ? "&amp;aes_allow=1" : "")</text>
<text x="902" y="1741" style="font:13px Open Sans"> );</text>
<text x="902" y="1787" style="font:13px Open Sans">http://example.com/dfrn_request/bob?dfrn_url=6874747</text>
<text x="902" y="1810" style="font:13px Open Sans">03a2f2f6b6172656e686f6d65706167652e636f6d2f70726f66</text>
<text x="902" y="1833" style="font:13px Open Sans">696c652f6b6172656e&amp;aes_allow=1&amp;confirm_key=”ABC123”</text>
<clipPath id="clip11"><path d="M287,1180 L464,1180 L464,1222 L287,1222 L287,1180 Z" /></clipPath>
<path d="M296,1181 C291.5820313,1181 288,1184.5820313 288,1189 L288,1212 C288,1216.4179688 291.5820313,1220 296,1220 L454,1220 C458.4179688,1220 462,1216.4179688 462,1212 L462,1189 C462,1184.5820313 458.4179688,1181 454,1181 Z" style="fill:rgb(127,127,127);stroke:none" clip-path="url(#clip11)" />
<text x="302" y="1203" style="font:13px Open Sans">dfrn_request.php</text>
<clipPath id="clip12"><path d="M134,1399 L624,1399 L624,2315 L134,2315 L134,1399 Z" /></clipPath>
<path d="M143,1400 C138.5820313,1400 135,1403.5820313 135,1408 L135,2305 C135,2309.4179688 138.5820313,2313 143,2313 L614,2313 C618.4179688,2313 622,2309.4179688 622,2305 L622,1408 C622,1403.5820313 618.4179688,1400 614,1400 Z" style="fill:rgb(255,255,3);stroke:none" clip-path="url(#clip12)" />
<text x="149" y="1422" style="font:13px Open Sans">http://example.com/dfrn_request/bob?</text>
<text x="149" y="1445" style="font:13px Open Sans">dfrn_url=</text>
<text x="149" y="1468" style="font:13px Open Sans">687474703a2f2f6b6172656e686f6d65706167652e</text>
<text x="149" y="1491" style="font:13px Open Sans">636f6d2f70726f66696c652f6b6172656e&amp;aes_allow=1&amp;</text>
<text x="149" y="1514" style="font:13px Open Sans">confirm_key=”ABC123”</text>
<text x="149" y="1560" style="font:13px Open Sans">dfrn_request_content()</text>
<text x="149" y="1583" style="font:13px Open Sans">------------------------------------------</text>
<text x="149" y="1606" style="font:13px Open Sans">- copy the posted parameters (dfrn_url, key and so on) </text>
<text x="149" y="1629" style="font:13px Open Sans">to $_POST</text>
<text x="149" y="1698" style="font:13px Open Sans"> dfrn_request_post() - SCENARIO 2 </text>
<text x="149" y="1721" style="font:13px Open Sans">($_POST['localconfirm'] == 1)</text>
<text x="149" y="1744" style="font:13px Open Sans">-----------------------------------------------------------------------</text>
<text x="149" y="1767" style="font:13px Open Sans">- if(local_user() &amp;&amp; ($a-&gt;user['nickname'] == $a-</text>
<text x="149" y="1790" style="font:13px Open Sans">&gt;argv[1]) &amp;&amp; (x($_POST,'dfrn_url')))</text>
<text x="149" y="1813" style="font:13px Open Sans">-&gt;</text>
<text x="149" y="1859" style="font:13px Open Sans">- $confirm_key comes from $_POST</text>
<text x="149" y="1905" style="font:13px Open Sans">- get data for contact Karen (contact table) by </text>
<text x="149" y="1928" style="font:13px Open Sans">$dfrn_url (contacts url and nurl) -&gt; if contact Karen </text>
<text x="149" y="1951" style="font:13px Open Sans">does already have a dfrn-id Bob seems already </text>
<text x="149" y="1974" style="font:13px Open Sans">connected with Karen (abort here)</text>
<text x="149" y="2020" style="font:13px Open Sans">- if this contact (Karen) isn't available in the contact </text>
<text x="149" y="2043" style="font:13px Open Sans">tabel, scrape Karens profile page to pick up the dfrn </text>
<text x="149" y="2066" style="font:13px Open Sans">links, key, fn, and photo</text>
<text x="149" y="2112" style="font:13px Open Sans">- create a contact for Karen in the contact table with </text>
<text x="149" y="2135" style="font:13px Open Sans">the scraped data with blocked = 1 and pending = 1 </text>
<text x="149" y="2158" style="font:13px Open Sans">(Karens pubkey becomes the contact site-pubkey)</text>
<text x="149" y="2204" style="font:13px Open Sans">- fetch_url($dfrn_request . '?confirm_key=' . </text>
<text x="149" y="2227" style="font:13px Open Sans">$confirm_key);</text>
<text x="149" y="2273" style="font:13px Open Sans">- fetch_url(http://karenhomepage.com/dfrn_request?</text>
<text x="149" y="2296" style="font:13px Open Sans">confirm_key=”ABC123”)</text>
<clipPath id="clip13"><path d="M1061,2027 L1238,2027 L1238,2069 L1061,2069 L1061,2027 Z" /></clipPath>
<path d="M1070,2028 C1065.5820313,2028 1062,2031.5820313 1062,2036 L1062,2059 C1062,2063.4179688 1065.5820313,2067 1070,2067 L1228,2067 C1232.4179688,2067 1236,2063.4179688 1236,2059 L1236,2036 C1236,2031.5820313 1232.4179688,2028 1228,2028 Z" style="fill:rgb(127,127,127);stroke:none" clip-path="url(#clip13)" />
<text x="1075" y="2050" style="font:13px Open Sans">dfrn_request.php</text>
<clipPath id="clip14"><path d="M857,2205 L1444,2205 L1444,2454 L857,2454 L857,2205 Z" /></clipPath>
<path d="M866,2206 C861.5820313,2206 858,2209.5820313 858,2214 L858,2444 C858,2448.4179688 861.5820313,2452 866,2452 L1434,2452 C1438.4179688,2452 1442,2448.4179688 1442,2444 L1442,2214 C1442,2209.5820313 1438.4179688,2206 1434,2206 Z" style="fill:rgb(255,255,3);stroke:none" clip-path="url(#clip14)" />
<text x="871" y="2228" style="font:13px Open Sans">http://karenhomepage.com/dfrn_request?confirm_key=”ABC123”</text>
<text x="871" y="2274" style="font:13px Open Sans">dfrn_request_content() -</text>
<text x="871" y="2297" style="font:13px Open Sans">(elseif((x($_GET,'confirm_key')) &amp;&amp; strlen($_GET['confirm_key'])) )</text>
<text x="871" y="2320" style="font:13px Open Sans">----------------------------------------------------------------------------------------------</text>
<text x="871" y="2366" style="font:13px Open Sans">- select the intro by confirm_key (intro table) -&gt; get contact id</text>
<text x="871" y="2389" style="font:13px Open Sans">- use the intro contact id to get the contact in the contact table</text>
<text x="871" y="2412" style="font:13px Open Sans">- build a notification package ( notification(array.....) )</text>
<text x="871" y="2435" style="font:13px Open Sans">- update intro in intro table (blocked = 0)</text>
<clipPath id="clip15"><path d="M227,2424 L531,2424 L531,2512 L227,2512 L227,2424 Z" /></clipPath>
<path d="M236,2425 C231.5820313,2425 228,2428.5820313 228,2433 L228,2502 C228,2506.4179688 231.5820313,2510 236,2510 L521,2510 C525.4179688,2510 529,2506.4179688 529,2502 L529,2433 C529,2428.5820313 525.4179688,2425 521,2425 Z" style="fill:rgb(255,255,3);stroke:none" clip-path="url(#clip15)" />
<text x="242" y="2447" style="font:13px Open Sans">Bob stays on his Friendica server</text>
<text x="242" y="2493" style="font:13px Open Sans">- goaway($forwardurl);</text>
<clipPath id="clip16"><path d="M14,14 L370,14 L370,125 L14,125 L14,14 Z" /></clipPath>
<path d="M23,15 C18.5820313,15 15,18.5820313 15,23 L15,115 C15,119.4179688 18.5820313,123 23,123 L360,123 C364.4179688,123 368,119.4179688 368,115 L368,23 C368,18.5820313 364.4179688,15 360,15 Z" style="fill:rgb(255,255,255);stroke:none" clip-path="url(#clip16)" />
<text x="29" y="38" style="font:13px Open Sans">Note: this chart respects only dfrn </text>
<text x="29" y="61" style="font:13px Open Sans">contacts and focuses on key exchange </text>
<text x="29" y="83" style="font:13px Open Sans">(for other areas it might be very </text>
<text x="29" y="106" style="font:13px Open Sans">incomplete)</text>
<clipPath id="clip17"><path d="M871,491 L1431,491 L1431,648 L871,648 L871,491 Z" /></clipPath>
<path d="M880,492 C875.5820313,492 872,495.5820313 872,500 L872,638 C872,642.4179688 875.5820313,646 880,646 L1421,646 C1425.4179688,646 1429,642.4179688 1429,638 L1429,500 C1429,495.5820313 1425.4179688,492 1421,492 Z" style="fill:rgb(255,255,3);stroke:none" clip-path="url(#clip17)" />
<text x="885" y="514" style="font:13px Open Sans">dfrn_request_content()</text>
<text x="885" y="537" style="font:13px Open Sans">------------------------------------</text>
<text x="885" y="583" style="font:13px Open Sans">- the page for the on Katrins server where Bob do a connection </text>
<text x="885" y="606" style="font:13px Open Sans">request</text>
<text x="885" y="629" style="font:13px Open Sans">- the form transmit on submit Bobs profile url as dfrn_url</text>
<clipPath id="clip18"><path d="M402,267 L974,267 L974,313 L402,313 L402,267 Z" /></clipPath>
<path d="M422,271.734375 L954,370.5703125" style="fill:none;stroke:rgb(182,44,37);stroke-width:3;stroke-dasharray:18,9;stroke-dashoffset:0" clip-path="url(#clip18)" />
<clipPath id="clip19"><path d="M402,329 L974,329 L974,377 L402,377 L402,329 Z" /></clipPath>
<path d="M422,271.734375 L954,370.5703125" style="fill:none;stroke:rgb(182,44,37);stroke-width:3;stroke-dasharray:18,9;stroke-dashoffset:0" clip-path="url(#clip19)" />
<clipPath id="clip20"><path d="M402,311 L974,311 L974,331 L402,331 L402,311 Z" /></clipPath>
<path d="M422,271.734375 L954,370.5703125" style="fill:none;stroke:rgb(182,44,37);opacity:0.09803921568627451;stroke-width:3;stroke-dasharray:18,9;stroke-dashoffset:0" clip-path="url(#clip20)" />
<clipPath id="clip21"><path d="M402,267 L974,267 L974,377 L402,377 L402,267 Z" /></clipPath>
<path d="M944.5703125,373.9023438 L954,370.5703125 L946.3984375,364.0703125 Z" style="fill:rgb(182,44,37);stroke:none" clip-path="url(#clip21)" />
<clipPath id="clip22"><path d="M402,267 L974,267 L974,377 L402,377 L402,267 Z" /></clipPath>
<path d="M944.5703125,373.9023438 L954,370.5703125 L946.3984375,364.0703125 Z" style="fill:none;stroke:rgb(182,44,37);stroke-width:3" clip-path="url(#clip22)" />
<text x="405" y="323" style="font:10px Georgia">bob wants to make a request and is directed from karens profile page to karens dfrn-request page</text>
<clipPath id="clip23"><path d="M1111,729 L1186,729 L1186,813 L1111,813 L1111,729 Z" /></clipPath>
<path d="M1149.1875,733 L1149.4335938,763.3984375 L1149.5585938,778.6015625 L1149.8046875,809" style="fill:none;stroke:rgb(182,44,37);stroke-width:3;stroke-dasharray:18,9;stroke-dashoffset:0" clip-path="url(#clip23)" />
<clipPath id="clip24"><path d="M1111,729 L1186,729 L1186,813 L1111,813 L1111,729 Z" /></clipPath>
<path d="M1144.734375,800.3789063 L1149.8046875,809 L1154.734375,800.3007813 Z" style="fill:rgb(182,44,37);stroke:none" clip-path="url(#clip24)" />
<clipPath id="clip25"><path d="M1111,729 L1186,729 L1186,813 L1111,813 L1111,729 Z" /></clipPath>
<path d="M1144.734375,800.3789063 L1149.8046875,809 L1154.734375,800.3007813 Z" style="fill:none;stroke:rgb(182,44,37);stroke-width:3" clip-path="url(#clip25)" />
<clipPath id="clip26"><path d="M1115,1442 L1190,1442 L1190,1562 L1115,1562 L1115,1442 Z" /></clipPath>
<path d="M1152.7773438,1446 L1152.625,1558" style="fill:none;stroke:rgb(182,44,37);stroke-width:3;stroke-dasharray:18,9;stroke-dashoffset:0" clip-path="url(#clip26)" />
<clipPath id="clip27"><path d="M1115,1442 L1190,1442 L1190,1562 L1115,1562 L1115,1442 Z" /></clipPath>
<path d="M1147.6367188,1549.3320313 L1152.625,1558 L1157.6367188,1549.3476563 Z" style="fill:rgb(182,44,37);stroke:none" clip-path="url(#clip27)" />
<clipPath id="clip28"><path d="M1115,1442 L1190,1442 L1190,1562 L1115,1562 L1115,1442 Z" /></clipPath>
<path d="M1147.6367188,1549.3320313 L1152.625,1558 L1157.6367188,1549.3476563 Z" style="fill:none;stroke:rgb(182,44,37);stroke-width:3" clip-path="url(#clip28)" />
<clipPath id="clip29"><path d="M458,1201 L893,1201 L893,1375 L458,1375 L458,1201 Z" /></clipPath>
<path d="M889,1561.9492188 L462,1205.3515625" style="fill:none;stroke:rgb(182,44,37);stroke-width:3;stroke-dasharray:18,9;stroke-dashoffset:0" clip-path="url(#clip29)" />
<clipPath id="clip30"><path d="M458,1391 L893,1391 L893,1565 L458,1565 L458,1391 Z" /></clipPath>
<path d="M889,1561.9492188 L462,1205.3515625" style="fill:none;stroke:rgb(182,44,37);stroke-width:3;stroke-dasharray:18,9;stroke-dashoffset:0" clip-path="url(#clip30)" />
<clipPath id="clip31"><path d="M458,1373 L575,1373 L575,1393 L458,1393 L458,1373 Z" /></clipPath>
<path d="M889,1561.9492188 L462,1205.3515625" style="fill:none;stroke:rgb(182,44,37);stroke-width:3;stroke-dasharray:18,9;stroke-dashoffset:0" clip-path="url(#clip31)" />
<clipPath id="clip32"><path d="M776,1373 L893,1373 L893,1393 L776,1393 L776,1373 Z" /></clipPath>
<path d="M889,1561.9492188 L462,1205.3515625" style="fill:none;stroke:rgb(182,44,37);stroke-width:3;stroke-dasharray:18,9;stroke-dashoffset:0" clip-path="url(#clip32)" />
<clipPath id="clip33"><path d="M573,1373 L778,1373 L778,1393 L573,1393 L573,1373 Z" /></clipPath>
<path d="M889,1561.9492188 L462,1205.3515625" style="fill:none;stroke:rgb(182,44,37);opacity:0.09803921568627451;stroke-width:3;stroke-dasharray:18,9;stroke-dashoffset:0" clip-path="url(#clip33)" />
<clipPath id="clip34"><path d="M458,1201 L893,1201 L893,1565 L458,1565 L458,1201 Z" /></clipPath>
<path d="M471.8515625,1207.0664063 L462,1205.3515625 L465.4414063,1214.7421875 Z" style="fill:rgb(182,44,37);stroke:none" clip-path="url(#clip34)" />
<clipPath id="clip35"><path d="M458,1201 L893,1201 L893,1565 L458,1565 L458,1201 Z" /></clipPath>
<path d="M471.8515625,1207.0664063 L462,1205.3515625 L465.4414063,1214.7421875 Z" style="fill:none;stroke:rgb(182,44,37);stroke-width:3" clip-path="url(#clip35)" />
<text x="576" y="1385" style="font:10px Georgia">redirict to bobs dfrn_request page</text>
<clipPath id="clip36"><path d="M339,1216 L414,1216 L414,1404 L339,1404 L339,1216 Z" /></clipPath>
<path d="M375.1171875,1220 L376.0625,1400" style="fill:none;stroke:rgb(182,44,37);stroke-width:3;stroke-dasharray:18,9;stroke-dashoffset:0" clip-path="url(#clip36)" />
<clipPath id="clip37"><path d="M339,1216 L414,1216 L414,1404 L339,1404 L339,1216 Z" /></clipPath>
<path d="M371.015625,1391.3671875 L376.0625,1400 L381.015625,1391.3125 Z" style="fill:rgb(182,44,37);stroke:none" clip-path="url(#clip37)" />
<clipPath id="clip38"><path d="M339,1216 L414,1216 L414,1404 L339,1404 L339,1216 Z" /></clipPath>
<path d="M371.015625,1391.3671875 L376.0625,1400 L381.015625,1391.3125 Z" style="fill:none;stroke:rgb(182,44,37);stroke-width:3" clip-path="url(#clip38)" />
<clipPath id="clip39"><path d="M618,2024 L1072,2024 L1072,2158 L618,2158 L618,2024 Z" /></clipPath>
<path d="M622,2305.015625 L1068.1992188,2028" style="fill:none;stroke:rgb(182,44,37);stroke-width:3;stroke-dasharray:18,9;stroke-dashoffset:0" clip-path="url(#clip39)" />
<clipPath id="clip40"><path d="M618,2174 L1072,2174 L1072,2309 L618,2309 L618,2174 Z" /></clipPath>
<path d="M622,2305.015625 L1068.1992188,2028" style="fill:none;stroke:rgb(182,44,37);stroke-width:3;stroke-dasharray:18,9;stroke-dashoffset:0" clip-path="url(#clip40)" />
<clipPath id="clip41"><path d="M618,2156 L650,2156 L650,2176 L618,2176 L618,2156 Z" /></clipPath>
<path d="M622,2305.015625 L1068.1992188,2028" style="fill:none;stroke:rgb(182,44,37);stroke-width:3;stroke-dasharray:18,9;stroke-dashoffset:0" clip-path="url(#clip41)" />
<clipPath id="clip42"><path d="M1041,2156 L1072,2156 L1072,2176 L1041,2176 L1041,2156 Z" /></clipPath>
<path d="M622,2305.015625 L1068.1992188,2028" style="fill:none;stroke:rgb(182,44,37);stroke-width:3;stroke-dasharray:18,9;stroke-dashoffset:0" clip-path="url(#clip42)" />
<clipPath id="clip43"><path d="M648,2156 L1043,2156 L1043,2176 L648,2176 L648,2156 Z" /></clipPath>
<path d="M622,2305.015625 L1068.1992188,2028" style="fill:none;stroke:rgb(182,44,37);opacity:0.09803921568627451;stroke-width:3;stroke-dasharray:18,9;stroke-dashoffset:0" clip-path="url(#clip43)" />
<clipPath id="clip44"><path d="M618,2024 L1072,2024 L1072,2309 L618,2309 L618,2024 Z" /></clipPath>
<path d="M1063.4804688,2036.8164063 L1068.1992188,2028 L1058.2070313,2028.3203125 Z" style="fill:rgb(182,44,37);stroke:none" clip-path="url(#clip44)" />
<clipPath id="clip45"><path d="M618,2024 L1072,2024 L1072,2309 L618,2309 L618,2024 Z" /></clipPath>
<path d="M1063.4804688,2036.8164063 L1068.1992188,2028 L1058.2070313,2028.3203125 Z" style="fill:none;stroke:rgb(182,44,37);stroke-width:3" clip-path="url(#clip45)" />
<text x="651" y="2168" style="font:10px Georgia">http://karenhomepage.com/dfrn_request?confirm_key=”ABC123”</text>
<clipPath id="clip46"><path d="M1111,2063 L1186,2063 L1186,2210 L1111,2210 L1111,2063 Z" /></clipPath>
<path d="M1149.0703125,2067 L1149.5625,2206" style="fill:none;stroke:rgb(182,44,37);stroke-width:3;stroke-dasharray:18,9;stroke-dashoffset:0" clip-path="url(#clip46)" />
<clipPath id="clip47"><path d="M1111,2063 L1186,2063 L1186,2210 L1111,2210 L1111,2063 Z" /></clipPath>
<path d="M1144.53125,2197.359375 L1149.5625,2206 L1154.53125,2197.3203125 Z" style="fill:rgb(182,44,37);stroke:none" clip-path="url(#clip47)" />
<clipPath id="clip48"><path d="M1111,2063 L1186,2063 L1186,2210 L1111,2210 L1111,2063 Z" /></clipPath>
<path d="M1144.53125,2197.359375 L1149.5625,2206 L1154.53125,2197.3203125 Z" style="fill:none;stroke:rgb(182,44,37);stroke-width:3" clip-path="url(#clip48)" />
<clipPath id="clip49"><path d="M342,2309 L417,2309 L417,2429 L342,2429 L342,2309 Z" /></clipPath>
<path d="M378.875,2313 L378.5351563,2425" style="fill:none;stroke:rgb(182,44,37);stroke-width:3;stroke-dasharray:18,9;stroke-dashoffset:0" clip-path="url(#clip49)" />
<clipPath id="clip50"><path d="M342,2309 L417,2309 L417,2429 L342,2429 L342,2309 Z" /></clipPath>
<path d="M373.5625,2416.3242188 L378.5351563,2425 L383.5625,2416.3554688 Z" style="fill:rgb(182,44,37);stroke:none" clip-path="url(#clip50)" />
<clipPath id="clip51"><path d="M342,2309 L417,2309 L417,2429 L342,2429 L342,2309 Z" /></clipPath>
<path d="M373.5625,2416.3242188 L378.5351563,2425 L383.5625,2416.3554688 Z" style="fill:none;stroke:rgb(182,44,37);stroke-width:3" clip-path="url(#clip51)" />
<clipPath id="clip52"><path d="M1111,445 L1186,445 L1186,496 L1111,496 L1111,445 Z" /></clipPath>
<path d="M1148.7851563,449 L1149.3125,492" style="fill:none;stroke:rgb(182,44,37);stroke-width:3;stroke-dasharray:18,9;stroke-dashoffset:0" clip-path="url(#clip52)" />
<clipPath id="clip53"><path d="M1111,445 L1186,445 L1186,496 L1111,496 L1111,445 Z" /></clipPath>
<path d="M1144.2070313,483.4023438 L1149.3125,492 L1154.2070313,483.2773438 Z" style="fill:rgb(182,44,37);stroke:none" clip-path="url(#clip53)" />
<clipPath id="clip54"><path d="M1111,445 L1186,445 L1186,496 L1111,496 L1111,445 Z" /></clipPath>
<path d="M1144.2070313,483.4023438 L1149.3125,492 L1154.2070313,483.2773438 Z" style="fill:none;stroke:rgb(182,44,37);stroke-width:3" clip-path="url(#clip54)" />
<clipPath id="clip55"><path d="M1026,642 L1272,642 L1272,662 L1026,662 L1026,642 Z" /></clipPath>
<path d="M1149.703125,646 L1149.2695313,694" style="fill:none;stroke:rgb(182,44,37);stroke-width:3;stroke-dasharray:18,9;stroke-dashoffset:0" clip-path="url(#clip55)" />
<clipPath id="clip56"><path d="M1026,678 L1272,678 L1272,698 L1026,698 L1026,678 Z" /></clipPath>
<path d="M1149.703125,646 L1149.2695313,694" style="fill:none;stroke:rgb(182,44,37);stroke-width:3;stroke-dasharray:18,9;stroke-dashoffset:0" clip-path="url(#clip56)" />
<clipPath id="clip57"><path d="M1026,660 L1272,660 L1272,680 L1026,680 L1026,660 Z" /></clipPath>
<path d="M1149.703125,646 L1149.2695313,694" style="fill:none;stroke:rgb(182,44,37);opacity:0.09803921568627451;stroke-width:3;stroke-dasharray:18,9;stroke-dashoffset:0" clip-path="url(#clip57)" />
<clipPath id="clip58"><path d="M1026,642 L1272,642 L1272,698 L1026,698 L1026,642 Z" /></clipPath>
<path d="M1144.3476563,685.296875 L1149.2695313,694 L1154.3476563,685.3867188 Z" style="fill:rgb(182,44,37);stroke:none" clip-path="url(#clip58)" />
<clipPath id="clip59"><path d="M1026,642 L1272,642 L1272,698 L1026,698 L1026,642 Z" /></clipPath>
<path d="M1144.3476563,685.296875 L1149.2695313,694 L1154.3476563,685.3867188 Z" style="fill:none;stroke:rgb(182,44,37);stroke-width:3" clip-path="url(#clip59)" />
<text x="1029" y="672" style="font:10px Georgia">Bob fills request form and presses submit</text>
</svg>

After

Width:  |  Height:  |  Size: 33 KiB

34
view/theme/frio/css/style.css

@ -2105,7 +2105,6 @@ ul li:hover .contact-wrapper a.contact-action-link:hover {
/* Events page */
.fc .fc-month-view .fc-content .fc-title .item-desc:hover {
color: $link_hover_color;
}
@ -2305,6 +2304,39 @@ little modifications to emulate a standard page template */
-moz-box-shadow: 0 0 3px #dadada;
}
/* Help Page */
section.help-content-wrapper h1 {
padding-bottom: 0.3em;
font-size: 1.8em;
border-bottom: 1px solid #ddd;
}
section.help-content-wrapper h2 {
padding-bottom: 0.3em;
font-size: 1.5em;
border-bottom: 1px solid #ddd;
}
section.help-content-wrapper h3 {
font-size: 1.2em;
}
section.help-content-wrapper h1,
section.help-content-wrapper h2,
section.help-content-wrapper h3,
section.help-content-wrapper h5,
section.help-content-wrapper h6 {
margin-top: 24px;
margin-bottom: 16px;
font-weight: 600;
line-height: 1.25;
}
section.help-content-wrapper p {
margin: 0.4em 0;
}
section.help-content-wrapper p,
section.help-content-wrapper a {
line-height: 1.6;
font-size: 0.96em;
}
/*
* Overwriting for transparency and other colors
*/

Loading…
Cancel
Save