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,,