array(), ); protected $_has_one = array( 'ca'=>array('model'=>'SSL_CA','far_key'=>'ssl_ca_id','foreign_key'=>'id'), ); protected $_display_filters = array( 'csr'=>array( array('SSL::csrsubject',array(':value')), ), 'cert'=>array( array('SSL::subject',array(':value')), ), ); protected $_save_message = TRUE; /** REQUIRED ABSTRACT METHODS **/ public function attributes($variable=NULL) { return array( 'SSL DN'=>$this->namesub($variable), 'Valid From'=>$this->ca->valid_from(TRUE), 'Valid To'=>$this->ca->valid_to(TRUE), ); } public function expire($format=FALSE) { return (! $this->_so) ? ($format ? 'Not Issued' : 0) : $this->_so->get_valid_to($format); } public function name($variable=NULL) { return ($this->cert AND $this->ca->loaded()) ? sprintf('%s:%s',$this->ca->subject(),$this->display('cert')) : $this->display('csr'); } public function namesub($variable=NULL) { return $this->ca->dn(); } public function password() {} // Not used public function username() {} // Not used /** LOCAL METHODS **/ private $_so = NULL; /** * Resolve any queries to certificate details */ public function __call($name,$args) { $m = 'get_'.$name; if ($this->isCSR() AND method_exists($this,$m)) return $this->{$m}($args); elseif (method_exists($this->_so,$m)) return $this->_so->{$m}($args); else throw new Kohana_Exception('Unknown method :method',array(':method'=>$name)); } // We want to inject the SSL object into this Model protected function _load_values(array $values) { parent::_load_values($values); if ($this->cert) $this->_so = SSL::instance($this->cert); return $this; } /** * Is this just a CSR? */ public function isCSR() { return ! $this->cert AND $this->csr; } /** * Return all our CA Certs for this certificate * @deprecated Use chain() instead. */ public function cacerts() { $result = array(); $x = $this->ssl_ca_id; while ($x) { $sco = ORM::factory('SSL_CA',$x); array_push($result,$sco->sign_cert); $x = $sco->parent_ssl_ca_id; } return $result; } /** * Return the Certificate Chain * * @return array Of SSL_CA Objects representing the Chain */ public function chain() { $result = array(); // Get the first parent CA certificate $po = $this->ca; while ($po AND $po->loaded()) { array_push($result,$po); $po = ($po->validParent()) ? $po->parent : NULL; } return $result; } public function download_button() { if (! $this->pk OR ! $this->service->status OR ! preg_match('/client/',$this->service->product->plugin()->extensions) OR $this->valid_to() < time()) return ''; $output = Form::open(URL::link('user','ssl/download'),array('class'=>'form-inline')); $output .= Form::hidden('sid',$this->service->id); $output .= '