public function key_activation(array $options)
 {
     $this->cli->header('updating key activates');
     $reg = King23_Registry::getInstance();
     $pheal = new Pheal($reg->apimailreceiverApiUserID, $reg->apimailreceiverApiKey, 'char');
     $messages = $pheal->MailMessages(array('characterID' => $reg->apimailreceiverCharacterID))->messages;
     foreach ($messages as $message) {
         if ($message->toCharacterIDs != $reg->apimailreceiverCharacterID) {
             continue;
         }
         $token = trim($message->title);
         if (strlen($token) != Kingboard_ApiActivationToken::TOKEN_LENGTH) {
             continue;
         }
         if (!($token = Kingboard_ApiActivationToken::findOneByToken($token))) {
             continue;
         }
         $user = Kingboard_User::getById($token['userid']);
         $keys = $user['keys'];
         $apiuserid = $token['apiuserid'];
         $phealactivate = new Pheal($keys[$apiuserid]['apiuserid'], $keys[$apiuserid]['apikey']);
         $characters = $phealactivate->Characters()->characters;
         foreach ($characters as $character) {
             if ($character->characterID == $message->senderID) {
                 $keys[$apiuserid]['active'] = true;
                 $user['keys'] = $keys;
                 $user->save();
                 $token->delete();
                 $body = King23_Registry::getInstance()->sith->cachedGet('mails/activate_apikey.html')->render(array('username' => $user['username'], 'apiuserid' => $apiuserid), King23_Registry::getInstance()->sith);
                 mail($user['username'], "Kingboard API Key Activation", $body);
                 break;
             }
         }
     }
 }
 public function myKingboard(array $parameters)
 {
     $user = Kingboard_Auth::getUser();
     $activeKeys = false;
     $pendingKeys = false;
     $context = array();
     if (isset($_POST['XSRF']) && Kingboard_Form::getXSRFToken() == $_POST['XSRF']) {
         try {
             $pheal = new Pheal($_POST['apiuserid'], $_POST['apikey']);
             $pheal->accountScope->AccountStatus();
             if (!isset($user['keys'])) {
                 $keys = array();
             } else {
                 $keys = $user['keys'];
             }
             // ensure to remove existing activation keys if this is an update
             if ($activationkey = Kingboard_ApiActivationToken::findOneByUseridAndApiUserid($user->_id, $_POST['apiuserid'])) {
                 $activationkey->delete();
             }
             $activationkey = Kingboard_ApiActivationToken::create($user->_id, $_POST['apiuserid']);
             $keys[$_POST['apiuserid']] = array('apiuserid' => $_POST['apiuserid'], 'apikey' => $_POST['apikey'], 'active' => false);
             $user['keys'] = $keys;
             $user->save();
             // ensure user is refreshed in session
             Kingboard_Auth::getUser();
         } catch (PhealApiException $e) {
             $context = $_POST;
             $context['error'] = "the key could not be validated as a full apikey";
         }
     } elseif (isset($_POST['XSRF'])) {
         die('XSRF detected');
     }
     if (isset($user['keys'])) {
         foreach ($user['keys'] as $key) {
             if ($key['active']) {
                 if (!is_array($activeKeys)) {
                     $activeKeys = array();
                 }
                 $activeKeys[] = $key;
             } else {
                 if (!is_array($pendingKeys)) {
                     $pendingKeys = array();
                 }
                 $key['activationkey'] = (string) Kingboard_ApiActivationToken::findOneByUseridAndApiUserid($user->_id, $key['apiuserid']);
                 $pendingKeys[] = $key;
             }
         }
     }
     $charkeylist = array();
     foreach ($activeKeys as $key) {
         $pheal = new Pheal($key['apiuserid'], $key['apikey']);
         $chars = $pheal->accountScope->Characters()->characters->toArray();
         foreach ($chars as $char) {
             $charkeylist[$key['apiuserid'] . "|" . $char['characterID']] = $char['name'];
         }
     }
     $context = array_merge($context, array('active_keys' => $activeKeys, 'pending_keys' => $pendingKeys, 'apimailreceiver' => King23_Registry::getInstance()->apimailreceiver, 'active_characters' => $charkeylist));
     $this->render('user/index.html', $context);
 }
 public static function create($userid, $apiuserid)
 {
     $token = new Kingboard_ApiActivationToken();
     $token['userid'] = $userid;
     $token['apiuserid'] = $apiuserid;
     // ensure this key isnt in use yet
     do {
         $keyset = "abcdefghijklmABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
         $randkey = "";
         for ($i = 0; $i < Kingboard_ApiActivationToken::TOKEN_LENGTH; $i++) {
             $randkey .= substr($keyset, rand(0, strlen($keyset) - 1), 1);
         }
     } while (!is_null(Kingboard_ApiActivationToken::findOneByToken($randkey)));
     $token['token'] = $randkey;
     $token->save();
     return $token;
 }