public function createToken($TokenType, $ProviderKey, $UserKey = null, $Authorized = false)
{
$TokenKey = implode('.', array('token', $ProviderKey, time(), mt_rand(0, 100000)));
$TokenSecret = sha1(md5(implode('.', array($TokenKey, mt_rand(0, 100000)))));
$Timestamp = time();
$Lifetime = Gdn::config('Garden.Authenticators.handshake.TokenLifetime', 60);
if ($Lifetime == 0 && $TokenType == 'request') {
$Lifetime = 300;
}
$InsertArray = array('Token' => $TokenKey, 'TokenSecret' => $TokenSecret, 'TokenType' => $TokenType, 'ProviderKey' => $ProviderKey, 'Lifetime' => $Lifetime, 'Authorized' => $Authorized, 'ForeignUserKey' => null);
if ($UserKey !== null) {
$InsertArray['ForeignUserKey'] = $UserKey;
}
try {
Gdn::sql()->set('Timestamp', 'NOW()', false)->insert('UserAuthenticationToken', $InsertArray);
if ($TokenType == 'access' && !is_null($UserKey)) {
$this->deleteToken($ProviderKey, $UserKey, 'request');
}
} catch (Exception $e) {
return false;
}
return $InsertArray;
}