pre-fill auth form with $me data
authorChristian Weiske <cweiske@cweiske.de>
Thu, 4 Aug 2016 05:48:57 +0000 (07:48 +0200)
committerChristian Weiske <cweiske@cweiske.de>
Thu, 4 Aug 2016 05:48:57 +0000 (07:48 +0200)
data/schema.sql
data/templates/auth-choose.htm
src/anoweco/Urls.php
www/auth.php

index 25e7cad..2861787 100644 (file)
@@ -15,7 +15,6 @@ CREATE TABLE `comments` (
 CREATE TABLE `users` (
   `user_id` int(11) NOT NULL AUTO_INCREMENT,
   `user_name` varchar(128) NOT NULL,
-  `user_email` varchar(256) NOT NULL,
   `user_imageurl` varchar(1024) NOT NULL,
   PRIMARY KEY (`user_id`)
 ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
index 96945fd..baf44e7 100644 (file)
    <ul>
     <li>
      <label>
-      <input type="radio" name="id[mode]" value="anonymous" checked="checked"/>
+      <input type="radio" name="id[mode]" value="anonymous"
+             {%if id.mode=="anonymous"%}checked="checked"{%endif%}/>
       Anonymous
      </label>
     </li>
     <li>
      <label>
-      <input type="radio" name="id[mode]" value="data"/> With a name
+      <input type="radio" name="id[mode]" value="data"
+             {%if id.mode=="data"%}checked="checked"{%endif%}/>
+      With a name
      </label>
      <ul>
       <li>
        <label for="id-name">Name:</label>
-       <input type="text" name="id[name]" id="id-name"/>
+       <input type="text" name="id[name]" id="id-name" value="{{id.name}}"/>
       </li>
       <li>
-       <label for="id-email">E-Mail:</label>
+       {% if id.imageurl %}
+       <img src="{{id.imageurl}}" width="32" height="32" alt="Avatar image"/>
+       {% endif %}
+       <label for="id-imageurl">Avatar image URL:</label>
+       <input type="url" name="id[imageurl]" id="id-imageurl"
+              value="{{id.imageurl}}" size="60"/>
+       <br/>
+       alternatively, provide an email so we can autodetect its avatar:
        <input type="email" name="id[email]" id="id-email"/>
-       (used to fetch avatar image. not stored.)
+       (will not be stored.)
       </li>      
      </ul>
      <p>
index a82d36c..35084a5 100644 (file)
@@ -13,9 +13,9 @@ class Urls
         return '/user/' . intval($id) . '.htm';
     }
 
-    public static function userImg($rowUser)
+    public static function userImg($rowUser = null)
     {
-        if ($rowUser->user_imageurl != '') {
+        if ($rowUser !== null && $rowUser->user_imageurl != '') {
             return $rowUser->user_imageurl;
         }
         return static::full('/img/anonymous.svg');
index d3325b0..5e3ed23 100644 (file)
@@ -8,7 +8,7 @@ namespace anoweco;
 header('HTTP/1.0 500 Internal Server Error');
 require 'www-header.php';
 
-function getOrCreateUser($mode, $name, $email)
+function getOrCreateUser($mode, $name, $imageurl, $email)
 {
     if ($mode == 'anonymous') {
         $name  = 'Anonymous';
@@ -18,7 +18,9 @@ function getOrCreateUser($mode, $name, $email)
             $name = 'Anonymous';
         }
     }
-    $imageurl = getImageUrl($email);
+    if ($imageurl == '') {
+        $imageurl = getImageUrl($email);
+    }
 
     $storage = new Storage();
     $id = $storage->findUser($name, $imageurl);
@@ -52,7 +54,28 @@ if ($_SERVER['REQUEST_METHOD'] == 'GET') {
     $response_type = getOptionalParameter($_GET, 'response_type', 'id');
     $scope         = getOptionalParameter($_GET, 'scope', null);
 
-    //FIXME: if $me is an actual user, load his data
+    $id = array(
+        'mode'     => 'anonymous',
+        'name'     => '',
+        'imageurl' => '',
+    );
+    $userbaseurl = Urls::full('/user/');
+    if (substr($me, 0, strlen($userbaseurl)) == $userbaseurl) {
+        //actual user URL - loads his data
+        $userid = substr($me, strrpos($me, '/') + 1, -4);
+        if (intval($userid) == $userid) {
+            $storage = new Storage();
+            $rowUser = $storage->getUser($userid);
+            if ($rowUser !== null) {
+                $id['mode']     = 'data';
+                $id['name']     = $rowUser->user_name;
+                $id['imageurl'] = $rowUser->user_imageurl;
+                if ($id['imageurl'] == Urls::userImg()) {
+                    $id['imageurl'] = '';
+                }
+            }
+        }
+    }
 
     //let the user choose his identity
     header('HTTP/1.0 200 OK');
@@ -66,6 +89,7 @@ if ($_SERVER['REQUEST_METHOD'] == 'GET') {
                 'response_type' => $response_type,
                 'scope'         => $scope,
             ),
+            'id' => $id,
             'formaction' => '/auth.php?action=login',
         )
     );
@@ -84,7 +108,8 @@ if ($_SERVER['REQUEST_METHOD'] == 'GET') {
         verifyParameter($id, 'mode');
 
         $userId = getOrCreateUser(
-            $id['mode'], trim($id['name']), trim($id['email'])
+            $id['mode'], trim($id['name']), trim($id['imageurl']),
+            trim($id['email'])
         );
         $me = Urls::full(Urls::user($userId));