public static function authenticateWithToken($token) { global $wpdb; $response = array('error' => false); if (strlen($token) < 32) { $response['error'] = true; $response['errorType'] = 'UserException'; $response['errorMessage'] = __('Invalid token', 'bim-bcf-management'); } else { $userId = $wpdb->get_var($wpdb->prepare("SELECT user_id\n FROM {$wpdb->usermeta}\n WHERE meta_key LIKE '_bcf_viewer_token_%%' AND meta_value COLLATE utf8_bin LIKE %s", $token)); if ($userId != '') { $timestamp = get_user_meta($userId, '_bcf_viewer_timestamp', true); if ($timestamp > time()) { // Token is valid $serverId = $wpdb->get_var($wpdb->prepare("SELECT meta_key\n FROM {$wpdb->usermeta}\n WHERE meta_key LIKE '_bcf_viewer_token_%%' AND meta_value COLLATE utf8_bin LIKE %s AND user_id = %d", $token, $userId)); $serverId = str_replace('_bcf_viewer_token_', '', $serverId); $server = BIMsie::getServerById($serverId, $userId); if ($server !== false) { $tokenData = get_user_meta($userId, 'bimsie_token', true); if (isset($tokenData) && $tokenData != '' && $tokenData['timestamp'] > time() - Bimsie::$tokenTimeout) { // Token is still valid $token = BIMsie::updateTokenTimestamp($userId); } else { $token = BIMsie::updateTokenTimestamp($userId, BIMSie::generateToken()); } $response['result'] = array('bimserver_url' => $server['uri'], 'bimserver_username' => $server['username'], 'bimserver_password' => $server['password'], 'bcfserver_token' => $token); } else { $response['error'] = true; $response['errorType'] = 'UserException'; $response['errorMessage'] = __('Invalid token', 'bim-bcf-management'); } } else { $response['error'] = true; $response['errorType'] = 'UserException'; $response['errorMessage'] = __('Expired token', 'bim-bcf-management'); } } else { $response['error'] = true; $response['errorType'] = 'UserException'; $response['errorMessage'] = __('Invalid token', 'bim-bcf-management'); } } return $response; }
public static function getProject($uri, $poid, $userId = -1) { $server = BIMsie::getServerByUri($uri, $userId); if ($server === false) { return false; } else { $userId = $userId == -1 ? get_current_user_id() : $userId; $bimsieCache = BIMsie::getCacheByUri($uri, $userId); if ($bimsieCache === false || !isset($bimsieCache['projects'][$poid])) { // Retrieve data from Bimsie server if possible if (isset($server['token']) && isset($server['tokenValid']) && $server['tokenValid'] > time()) { $projects = BIMSie::getProjects($uri, $userId); if ($projects && isset($projects['projects'][$poid])) { return $projects['projects'][$poid]; } else { return false; } } else { return false; } } else { return $bimsieCache['projects'][$poid]; } } }