diff options
| -rw-r--r-- | data/templates/editprofile-sslclientcerts.tpl.php | 25 | ||||
| -rw-r--r-- | data/templates/editprofile.tpl.php | 4 | ||||
| -rw-r--r-- | src/SemanticScuttle/Model/User/SslClientCert.php | 72 | ||||
| -rw-r--r-- | src/SemanticScuttle/Service/User/SslClientCert.php | 28 | ||||
| -rw-r--r-- | src/SemanticScuttle/header.php | 1 | ||||
| -rw-r--r-- | www/profile.php | 4 | ||||
| -rw-r--r-- | www/scuttle.css | 4 | 
7 files changed, 136 insertions, 2 deletions
diff --git a/data/templates/editprofile-sslclientcerts.tpl.php b/data/templates/editprofile-sslclientcerts.tpl.php new file mode 100644 index 0000000..e6fc5c3 --- /dev/null +++ b/data/templates/editprofile-sslclientcerts.tpl.php @@ -0,0 +1,25 @@ +<h3><?php echo T_('SSL client certificates'); ?></h3> +<?php if (count($sslClientCerts)) { ?> +<table> + <thead> +  <tr> +   <th><?php echo T_('Serial'); ?></th> +   <th><?php echo T_('Name'); ?></th> +   <th><?php echo T_('Email'); ?></th> +   <th><?php echo T_('Issuer'); ?></th> +  </tr> + </thead> + <tbody> + <?php foreach($sslClientCerts as $cert) { ?> +   <tr <?php if ($cert->isCurrent()) { echo 'class="ssl-current"'; } ?>> +   <td><?php echo htmlspecialchars($cert->sslSerial); ?></td> +   <td><?php echo htmlspecialchars($cert->sslName); ?></td> +   <td><?php echo htmlspecialchars($cert->sslEmail); ?></td> +   <td><?php echo htmlspecialchars($cert->sslClientIssuerDn); ?></td> +  </tr> + <?php } ?> + </tbody> +</table> +<?php } else { ?> + <p><?php echo T_('No certificates registered'); ?></p> +<?php } ?> diff --git a/data/templates/editprofile.tpl.php b/data/templates/editprofile.tpl.php index 2a3c3b8..cc74f04 100644 --- a/data/templates/editprofile.tpl.php +++ b/data/templates/editprofile.tpl.php @@ -50,13 +50,15 @@ $this->includeTemplate($GLOBALS['top_include']);      <td><input type="submit" name="submitted" value="<?php echo T_('Save Changes'); ?>" /></td>  </tr>  </table> + +<?php include 'editprofile-sslclientcerts.tpl.php'; ?>  <h3><?php echo T_('Actions'); ?></h3>  <table class="profile">  <tr>      <th align="left"><?php echo T_('Export bookmarks'); ?></th>      <td>  	<a href="../api/export_html.php"><?php echo T_('HTML file (for browsers)')?></a> / -	<a href="../api/posts_all.php"><?php echo T_('XML file (like del.icio.us)')?></a> /  +	<a href="../api/posts_all.php"><?php echo T_('XML file (like del.icio.us)')?></a> /  	<a href="../api/export_csv.php"><?php echo T_('CSV file (for spreadsheet tools)')?></a>      </td>  </tr> diff --git a/src/SemanticScuttle/Model/User/SslClientCert.php b/src/SemanticScuttle/Model/User/SslClientCert.php new file mode 100644 index 0000000..ab7b288 --- /dev/null +++ b/src/SemanticScuttle/Model/User/SslClientCert.php @@ -0,0 +1,72 @@ +<?php +/** + * SemanticScuttle - your social bookmark manager. + * + * PHP version 5. + * + * @category Bookmarking + * @package  SemanticScuttle + * @author   Christian Weiske <cweiske@cweiske.de> + * @license  AGPL http://www.gnu.org/licenses/agpl.html + * @link     http://sourceforge.net/projects/semanticscuttle + */ + +/** + * SSL client certificate model. Represents one single client certificate + * + * @category Bookmarking + * @package  SemanticScuttle + * @author   Christian Weiske <cweiske@cweiske.de> + * @license  AGPL http://www.gnu.org/licenses/agpl.html + * @link     http://sourceforge.net/projects/semanticscuttle + */ +class SemanticScuttle_Model_User_SslClientCert +{ +    public $id; +    public $uId; +    public $sslSerial; +    public $sslClientIssuerDn; +    public $sslName; +    public $sslEmail; + +    /** +     * Creates and returns a new object and fills it with +     * tha passed values from the database. +     * +     * @param array $arCertRow Database row array +     * +     * @return SemanticScuttle_Model_User_SslClientCert +     */ +    public static function fromDb($arCertRow) +    { +        $cert = new self(); +        foreach (get_object_vars($cert) as $variable => $dummy) { +            if (isset($arCertRow[$variable])) { +                $cert->$variable = $arCertRow[$variable]; +            } +        } +        return $cert; +    } + + + +    /** +     * Tells you if this certificate is the one the user is currently browsing +     * with. +     * +     * @return boolean True if this certificate is the current browser's +     */ +    public function isCurrent() +    { +        if (!isset($_SERVER['SSL_CLIENT_M_SERIAL']) +            || !isset($_SERVER['SSL_CLIENT_I_DN']) +        ) { +            return false; +        } + +        return $this->sslSerial == $_SERVER['SSL_CLIENT_M_SERIAL'] +            && $this->sslClientIssuerDn == $_SERVER['SSL_CLIENT_I_DN']; +    } + +} +?>
\ No newline at end of file diff --git a/src/SemanticScuttle/Service/User/SslClientCert.php b/src/SemanticScuttle/Service/User/SslClientCert.php index 9e7b2c4..3c69788 100644 --- a/src/SemanticScuttle/Service/User/SslClientCert.php +++ b/src/SemanticScuttle/Service/User/SslClientCert.php @@ -180,5 +180,33 @@ class SemanticScuttle_Service_User_SslClientCert extends SemanticScuttle_DbServi          return (int)$row['uId'];      } + +    /** +     * Fetches all registered certificates for the user from the database +     * and returns it. +     * +     * @return array Array with all certificates for the user. Empty if +     *               there are none, SemanticScuttle_Model_User_SslClientCert +     *               objects otherwise. +     */ +    public function getUserCerts($uId) +    { +        $query = 'SELECT * FROM ' . $this->getTableName() +            . ' ORDER BY sslSerial DESC'; +        if (!($dbresult = $this->db->sql_query($query))) { +            message_die( +                GENERAL_ERROR, 'Could not load SSL client certificates', +                '', __LINE__, __FILE__, $query, $this->db +            ); +            return array(); +        } + +        $certs = array(); +        while ($row = $this->db->sql_fetchrow($dbresult)) { +            $certs[] = SemanticScuttle_Model_User_SslClientCert::fromDb($row); +        } +        $this->db->sql_freeresult($dbresult); +        return $certs; +    }  }  ?>
\ No newline at end of file diff --git a/src/SemanticScuttle/header.php b/src/SemanticScuttle/header.php index d812124..c1c0fcd 100644 --- a/src/SemanticScuttle/header.php +++ b/src/SemanticScuttle/header.php @@ -84,6 +84,7 @@ require_once 'SemanticScuttle/Service/Factory.php';  require_once 'SemanticScuttle/functions.php';  require_once 'SemanticScuttle/Model/Bookmark.php';  require_once 'SemanticScuttle/Model/UserArray.php'; +require_once 'SemanticScuttle/Model/User/SslClientCert.php';  if (count($GLOBALS['serviceoverrides']) > 0      && !defined('UNIT_TEST_MODE') diff --git a/www/profile.php b/www/profile.php index 35864db..446c089 100644 --- a/www/profile.php +++ b/www/profile.php @@ -121,7 +121,9 @@ if (!$userservice->isLoggedOn() || $currentUser->getId() != $userid) {  	$templatename = 'editprofile.tpl.php';  	$tplVars['formaction']  = createURL('profile', $user);  	$tplVars['token'] = $_SESSION['token']; - +	$tplVars['sslClientCerts'] = SemanticScuttle_Service_Factory::get( +		'User_SslClientCert' +	)->getUserCerts($currentUser->getId());  }  $tplVars['objectUser'] = $userinfo; diff --git a/www/scuttle.css b/www/scuttle.css index 78f24e9..9e87857 100644 --- a/www/scuttle.css +++ b/www/scuttle.css @@ -455,6 +455,10 @@ table.profile th {      width: 10em;  } +table tr.ssl-current td { +    background-color: #AFA; +} +  /* OTHER GUFF */  dd {  | 
