When registering a new user during an inline login, preserve the room we started...
authorArt Cancro <ajc@citadel.org>
Sun, 30 Jan 2011 19:17:23 +0000 (14:17 -0500)
committerWilfried Goesgens <dothebart@citadel.org>
Sun, 4 Sep 2011 14:11:05 +0000 (14:11 +0000)
This commit was brought to you from the front seat of my car.  I have some time to kill and I've got
my netbook tethered to my awesome Android phone hooked up to the T-Mobile network.  I'm not some
snobby metropolitan self-importanterati with an iPhone.  Android is where it's at, and where it
will continue to be.

webcit/auth.c
webcit/webcit.c
webcit/webcit.h

index 16ff9ce647e3d6c45395b09d8337f9963d2df93b..cb5ea4b473a6cb3a1721b917711889e4026765db 100644 (file)
@@ -24,8 +24,6 @@
 
 extern uint32_t hashlittle( const void *key, size_t length, uint32_t initval);
 
-void display_reg(int during_login);
-
 /*
  * Access level definitions.  This is initialized from a function rather than a
  * static array so that the strings may be localized.
index c99f64c4777dfee4ba2e62bb66b2f6a1ede9b598..4b317d9352b2f415d7843b4c73945a09ec25c356 100644 (file)
@@ -512,17 +512,33 @@ void push_destination(void) {
 void pop_destination(void) {
        wcsession *WCC = WC;
 
+       /*
+        * If we are in the middle of a new user signup, the server may request that
+        * we first pass through a registration screen.
+        */
        if ((WCC) && (WCC->need_regi)) {
+               if ((WCC->PushedDestination != NULL) && (StrLength(WCC->PushedDestination) > 0)) {
+                       /* Registering will take us to the My Citadel Config room, so save our place */
+                       StrBufAppendBufPlain(WCC->PushedDestination, HKEY("?go="), 0);
+                       StrBufUrlescAppend(WCC->PushedDestination, WCC->CurRoom.name, NULL);
+               }
                WCC->need_regi = 0;
                display_reg(1);
                return;
        }
 
+       /*
+        * Do something reasonable if we somehow ended up requesting a pop without
+        * having first done a push.
+        */
        if ( (!WCC) || (WCC->PushedDestination == NULL) || (StrLength(WCC->PushedDestination) == 0) ) {
                do_welcome();
                return;
        }
 
+       /*
+        * All righty then!  We have a destination saved, so go there now.
+        */
        syslog(9, "Pop: %s\n", ChrPtr(WCC->PushedDestination));
        http_redirect(ChrPtr(WCC->PushedDestination));
 }
index 33af96720eaceb5a38723f7b35d9d18bf8fa82a9..bbb86603530c8d909978462230bcddf61870a64c 100644 (file)
@@ -646,6 +646,7 @@ void display_openids(void);
 void display_default_landing_page(void);
 void do_welcome(void);
 void do_logout(void);
+void display_reg(int during_login);
 void display_main_menu(void);
 void display_aide_menu(void);
 void slrp_highest(void);