﻿id	summary	reporter	owner	description	type	status	priority	milestone	component	version	resolution	keywords	cc	launchpad_bug
126	"add ""Invite a Friend"" button"	warner		"== Invite a Friend ==

Once we get the new Introducer code in place, we need to add a button to the
node's welcome page. It should say something like this:

 To invite a friend to join your Tahoe network, fill in their name here and
 press the ""Invite!"" button. This will create a personalized invitation that
 you can paste into an email or IM. When your friend finishes installing
 their own Tahoe node, they can accept your invitation by pasting it into
 their own node's ""Join a Network"" box.

 The name you provide here will be used as a ""pet name"" for your friend.
 Everything that this node tells you about your friend's node will be
 labelled with this name. When your node introduces your friend to other
 nodes, they will see the pet names you choose for your friend too. For
 example, if you are Alice and you have a friend you call Bob, and you
 introduce Bob to your mother (who calls you Ally), your mother's node will
 refer to Bob's node as ""Ally's friend Bob"".

Internally, this button will create an Invitation object (tagged with the pet
name), generate a persistent FURL for it (probably by using the new
Tub.registerNameLookupHandler feature in Foolscap-0.1.5), then display a page
with the FURL and some instructions on its use.

== Accept an Invitation ==

Assume that Alice created an Invitation and sends it to Bob.

The accept-invitation form should take a backwards-facing pet name (what does
the recipient call the person who sent the invitation?) and the FURL. It
should create an identity (the Who object in the Horton protocol: a random
number for now, eventually a Sealer, i.e., a public key). 

Bob's side then contacts the Invitation (using the FURL that was pasted in)
on Alice's side and fetches AliceWho. Then Bob creates a PersonalIntroducer
for the Alice, persists it, and sends (BobWho, PersonalIntroducerForAlice) to
the Invitation. The Invitation is one-shot: it destroys itself after use.

When the Invitation, on Alice's side, receives !BobWho/BPIa, it creates APIb
(recording the previously-stashed ""Bob"" petname) and returns APIb. Bob adds
APIb to his list of servers.

From then on the inductive case holds: new peers are introduced via the
""introduce_me_to_other_servers"" and ""create_an_introducer_for_X"" methods,
tracked in #68. This ticket is specifically about the Invite/Accept buttons
and classes.
"	enhancement	new	major	undecided	code-network	0.7.0		usability		
