public function beforeAction($action)
{
foreach (Yii::app()->log->routes as $route) {
if ($route instanceof CWebLogRoute) {
$route->enabled = false;
}
}
// Output format can be selected using a special GET param or by Accept: header
if (isset($_GET['_format'])) {
if (preg_match('/json/', $_GET['_format'])) {
$this->output_format = 'json';
} elseif (preg_match('/xml/', $_GET['_format'])) {
$this->output_format = 'xml';
}
} else {
foreach (Yii::app()->request->preferredAcceptTypes as $type) {
if ($type['baseType'] == 'xml' || $type['subType'] == 'xml' || $type['subType'] == '*') {
$this->output_format = 'xml';
break;
}
if ($type['baseType'] == 'json' || $type['subType'] == 'json') {
$this->output_format = 'json';
break;
}
}
}
if (!isset($this->output_format)) {
$this->sendResponse(406);
}
// Attach error handlers as soon as we know what format to send the error in
Yii::app()->attachEventHandler('onError', array($this, 'handleError'));
Yii::app()->attachEventHandler('onException', array($this, 'handleException'));
if (!isset($_SERVER['PHP_AUTH_USER'])) {
$this->sendError('Authentication required', 401, FhirValueSet::ISSUETYPE_SECURITY_LOGIN);
}
$identity = new UserIdentity($_SERVER['PHP_AUTH_USER'], $_SERVER['PHP_AUTH_PW']);
if (!$identity->authenticate()) {
$this->sendError('Authentication failed', 401, FhirValueSet::ISSUETYPE_SECURITY_UNKNOWN);
}
Yii::app()->user->login($identity);
if (!Yii::app()->user->checkAccess('OprnApi')) {
$this->sendError('Not authorised', 403, FhirValueSet::ISSUETYPE_SECURITY_FORBIDDEN);
}
// Tags, aka HTTP categories: http://hl7.org/implement/standards/fhir/http.html#tags
$tags = CategoryHeader::load();
$this->general_tags = $tags->get('http://hl7.org/fhir/tag');
$this->profile_tags = $tags->get('http://hl7.org/fhir/tag/profile');
$this->security_tags = $tags->get('http://hl7.org/fhir/tag/security');
return true;
}