diff --git a/doc/ui.txt b/doc/ui.txt index d53d2945dc..63fade7deb 100644 --- a/doc/ui.txt +++ b/doc/ui.txt @@ -84,13 +84,15 @@ call attach_to_project(PROJ_URL, true) function attach_to_project(PROJ_URL, bool user_supplied_url) -1) Dialog: +1) Dialog ("query_key"): + Attaching to PROJ_URL. Do you already have an account on PROJ_URL? - No [button] + No - create new account [button] Yes [button] paste account key here: ______________________ [text field] How to find an existing account key [button] + Cancel Dialog (how to find an existing account key): @@ -119,7 +121,7 @@ If answer to 1) is "no": 2) BOINC client tries to communicates with project, create account 3) if succeed in creating account -Dialog: +Dialog ("welcome"): Welcome to PROJ_NAME Your web browser should now show a @@ -135,8 +137,8 @@ Web page (foo.edu/welcome.php?auth=xxxxx) Your new account has a name and optional email address. You can changes these if you like: - Name: xxx - (this wil be shown on our web site) + Name: xxx (the user's account name on host) + (this will be shown on our web site) Email address: (this will not be displayed or distributed) OK to send periodic email newsletters [checkbox] @@ -158,14 +160,19 @@ Web page (foo.edu/welcome.php?auth=xxxxx) go to the Foo@home home page [link] - (update button goes to a "account info updated" page) + Notes: + - update button goes to a "account info updated" page + - if email address already exists, show + "An account with that email address already exists. + + (User is done) 4) if project replies with an error message: -Dialog: +Dialog ("project_unavailable"): PROJ_NAME is temporarily unavailable. Please check PROJ_URL [link] for information. @@ -178,15 +185,15 @@ Go to Projects tab. user is done. 5) If no connection failure or no reply - call network_failure() - Go to 6) + retry = network_failure() + if (retry) go to 2 If answer to 4) is "yes": 10) if account key is syntactically invalid -Dialog: +Dialog ("invalid_key"): The account key xxx is invalid. Account keys are 32 characters, each of which is a-f or 0-9. @@ -196,7 +203,7 @@ Dialog: 11) If project is up, and account key is verified -Dialog: +Dialog ("valid_key"): Account key is valid. This computer is now participating in Foo@home. @@ -205,7 +212,7 @@ Dialog: User is done. 12) If project is up, and account key is not verified -Dialog: +Dialog ("unrecognized_key"): xxx is not the key of any existing account on Foo@home. Account keys from other BOINC projects will not work on Foo@home. Please check your account key. @@ -216,7 +223,7 @@ Go to 4 13) if project replies with an error message: -Dialog: +Dialog ("project_unavailable"): Foo@home is temporarily unavailable. Please check http://foo.edu [link] for information. @@ -228,7 +235,7 @@ Dialog: Go to Projects tab. user is done. -14) else (if no reply): call network_failure() +14) else (if no reply): call network_failure(user_supplied_url) ---------------- @@ -238,7 +245,7 @@ function network_failure(bool user_supplied_url): or got no reply. Returns true if we should retry the operation.) -Dialog: +Dialog ("unable_to_contact"): BOINC is unable to contact PROJ_URL Possible reasons are: diff --git a/doc/ui_impl.txt b/doc/ui_impl.txt index d622b011a4..7bfff354f2 100644 --- a/doc/ui_impl.txt +++ b/doc/ui_impl.txt @@ -1,6 +1,158 @@ Implementation notes -What do we know at the start? -If they downloaded the installer then they have network connectivity -and working proxy setup for their browser. -If via CD-ROM, nothing is known. +------------------------------------------ +project-specific installers + +These produce a file "start_project.xml" containing the URL +(and possibly the name) of the starting project in the BOINC directory. +This file tells the BOINC manager to attach to this project. + +The file could be produced either of two ways: + +1) The file is part of the install bundle. +This would require projects to edit the installers +released by BOINC, using ORCA or whatever tools are needed + +2) The project URL is encoded in the installer filename, +and the installer runs a script that finds this name +and creates the file. +(Not sure how easy this is to do) + +------------------------------------------ +Database + +Allow nulls in the email_addr table. +Make it non-unique. + +------------------------------------------ +Web interfaces + +- "get account key" page can now return + multiple accounts with same email address + (show creation time, credit in email message) +- can possibly provide interface for merging accounts + (but this is tricky and can wait) + +welcome.php?auth=xxx + shows welcome page (see doc) + and returns cookie with account key + +create_account.php +in: + name +out: + status + account key + +verify_account.php +in: + acct key +out: + yes/no + if yes: + name + +------------------------------------------ +Scheduler +------------------------------------------ +GUI RPCs + +create_account(); + in: URL + Implementation: + fetches URL/create_account.php +poll_create_account(); + returns status: + in_progress, + success, + returns account key in this case + project_down, + no_reply + +verify_account() + in: URL, key + +poll_verify_account() + returns status: + in_progress, + success, + returns yes/no, name in this case + project_down, + no_reply +------------------------------------------ +Manager + +On startup: +If start_project.xml exists + attach_to_project(url, false) + +attach_to_project(url/name, user_supplied_url) { +restart: + switch(show_dialog(query_key)) { + yes: + if (invalid_key) { + show_dialog(invalid_key) + goto restart + } + verify_account(URL, key) + while (1) + ret = poll_verify_account() + if (!in_progress) break + sleep(1); + } + switch(ret) { + success/yes: + show_dialog(valid_key); + return; + success/no: + show_dialog(unrecognized_key); + goto restart; + error: + show_dialog(project_unavailable) + no_reply: + retry = network_failure() + if (retry) goto restart; + } + no: + name = get local account name on host +retry: + gui_rpc.create_account() + while (1) + ret = poll_create_account() + if !in_progress break; + sleep(1); + } + switch(ret) { + success: + show_web_page(welcome.php?auth=acct_key) + show_dialog(welcome) + set tab to projects + project_down: + show_dialog(project_unavailable") + set tab to projects + no_reply: + retry = network_failure(); + if (goto retry) + set tab to projects + } + cancel: + } +} + +bool network_failure(bool user_supplied_url) { + show_web_page(url/proxy_problems.php) + ret = show_dialog(unable_to_contact) + switch (ret) { + change: + show_dialog(proxy_settings) + retry: + return true; + cancel: + return false; + } +} + +Miscellaneous: +- Add a "account key" button in the Projects tab. + When clicked, it shows the account key + in a way that can be cut/pasted.