From bd0551b22076b82a6d49e9f7a2b2e0c90a1b2326 Mon Sep 17 00:00:00 2001
From: Aleksander Machniak <alec@alec.pl>
Date: Fri, 05 Feb 2016 07:25:27 -0500
Subject: [PATCH] Secure also downloads of addressbook exports, managesieve script exports and Enigma keys exports

---
 plugins/enigma/lib/enigma_key.php |   72 +++++++++++++++++++++++------------
 1 files changed, 47 insertions(+), 25 deletions(-)

diff --git a/plugins/enigma/lib/enigma_key.php b/plugins/enigma/lib/enigma_key.php
index 520c36b..976cb45 100644
--- a/plugins/enigma/lib/enigma_key.php
+++ b/plugins/enigma/lib/enigma_key.php
@@ -1,20 +1,14 @@
 <?php
-/*
+
+/**
  +-------------------------------------------------------------------------+
  | Key class for the Enigma Plugin                                         |
  |                                                                         |
- | This program is free software; you can redistribute it and/or modify    |
- | it under the terms of the GNU General Public License version 2          |
- | as published by the Free Software Foundation.                           |
+ | Copyright (C) 2010-2015 The Roundcube Dev Team                          |
  |                                                                         |
- | This program is distributed in the hope that it will be useful,         |
- | but WITHOUT ANY WARRANTY; without even the implied warranty of          |
- | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the           |
- | GNU General Public License for more details.                            |
- |                                                                         |
- | You should have received a copy of the GNU General Public License along |
- | with this program; if not, write to the Free Software Foundation, Inc., |
- | 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.             |
+ | Licensed under the GNU General Public License version 3 or              |
+ | any later version with exceptions for skins & plugins.                  |
+ | See the README file for a full license statement.                       |
  |                                                                         |
  +-------------------------------------------------------------------------+
  | Author: Aleksander Machniak <alec@alec.pl>                              |
@@ -25,12 +19,18 @@
 {
     public $id;
     public $name;
-    public $users = array();
+    public $users   = array();
     public $subkeys = array();
 
     const TYPE_UNKNOWN = 0;
     const TYPE_KEYPAIR = 1;
-    const TYPE_PUBLIC = 2;
+    const TYPE_PUBLIC  = 2;
+
+    const CAN_ENCRYPT      = 1;
+    const CAN_SIGN         = 2;
+    const CAN_CERTIFY      = 4;
+    const CAN_AUTHENTICATE = 8;
+
 
     /**
      * Keys list sorting callback for usort()
@@ -55,7 +55,7 @@
 
     /**
      * Returns true if all user IDs are revoked
-     */    
+     */
     function is_revoked()
     {
         foreach ($this->subkeys as $subkey)
@@ -67,7 +67,7 @@
 
     /**
      * Returns true if any user ID is valid
-     */    
+     */
     function is_valid()
     {
         foreach ($this->users as $user)
@@ -76,19 +76,39 @@
 
         return false;
     }
-    
+
     /**
      * Returns true if any of subkeys is not expired
-     */    
+     */
     function is_expired()
     {
         $now = time();
-        
+
         foreach ($this->subkeys as $subkey)
             if (!$subkey->expires || $subkey->expires > $now)
                 return true;
-    
+
         return false;
+    }
+
+    /**
+     * Get key ID by user email
+     */
+    function find_subkey($email, $mode)
+    {
+        $now = time();
+
+        foreach ($this->users as $user) {
+            if ($user->email === $email && $user->valid && !$user->revoked) {
+                foreach ($this->subkeys as $subkey) {
+                    if (!$subkey->revoked && (!$subkey->expires || $subkey->expires > $now)) {
+                        if ($subkey->usage & $mode) {
+                            return $subkey;
+                        }
+                    }
+                }
+            }
+        }
     }
 
     /**
@@ -101,7 +121,7 @@
     static function format_id($id)
     {
         // E.g. 04622F2089E037A5 => 89E037A5
-        
+
         return substr($id, -8);
     }
 
@@ -114,16 +134,18 @@
      */
     static function format_fingerprint($fingerprint)
     {
-        if (!$fingerprint)
+        if (!$fingerprint) {
             return '';
-    
+        }
+
         $result = '';
         for ($i=0; $i<40; $i++) {
-            if ($i % 4 == 0)
+            if ($i % 4 == 0) {
                 $result .= ' ';
+            }
             $result .= $fingerprint[$i];
         }
+
         return $result;
     }
-
 }

--
Gitblit v1.9.1