#!/usr/bin/env php getString('application', 'simplesamlphp'); $base = $translationconfig->getString('baseurl') . '/module.php/translationportal/'; if (!preg_match('/^(.*?)(?:\.(definition|translation))?\.(json|php)/', $file, $match)) throw new Exception('Illlegal file name. Must end on (definition|translation).json'); $fileWithoutExt = $match[1]; if (!empty($match[2])) { $type = $match[2]; } else { $type = 'definition'; } $basefile = basename($fileWithoutExt); echo 'Action: [' . $action. ']' . "\n"; echo 'Application: [' . $application. ']' . "\n"; echo 'File orig: [' . $file . ']'. "\n"; echo 'File base: [' . $basefile . ']'. "\n"; switch($action) { case 'pulldef': $content = SimpleSAML_Utilities::fetch($base . 'export.php?aid=' . $application . '&type=def&file=' . $basefile); file_put_contents($fileWithoutExt . '.definition.json' , $content); break; case 'pull': try { $content = SimpleSAML_Utilities::fetch($base . 'export.php?aid=' . $application . '&type=translation&file=' . $basefile); file_put_contents($fileWithoutExt . '.translation.json' , $content); } catch (SimpleSAML_Error_Exception $e) { echo 'Translation unavailable for ' . $basefile; SimpleSAML_Logger::warning("Translation unavailable for $basefile in $base: " . $e->getMessage()); } break; case 'push': #$content = file_get_contents($base . 'export.php?aid=' . $application . '&type=translation&file=' . $basefile); #file_put_contents($fileWithoutExt . '.translation.json' , $content); push($file, $basefile, $application, $type); break; case 'convert': include($file); $definition = json_format(convert_definition($lang)); $translation = json_format(convert_translation($lang)) . "\n"; file_put_contents($fileWithoutExt . '.definition.json' , $definition); file_put_contents($fileWithoutExt . '.translation.json' , $translation); break; default: throw new Exception('Unknown action [' . $action . ']'); } function ssp_readline($prompt = '') { echo $prompt; return rtrim( fgets( STDIN ), "\n" ); } function convert_definition($data) { $new = array(); foreach($data AS $key => $value) { $new[$key] = array('en' => $value['en']); } return $new; } function convert_translation($data) { foreach ($data as &$value) { unset($value['en']); } return $data; } function push($file, $fileWithoutExt, $aid, $type) { if (!file_exists($file)) throw new Exception('Could not find file: ' . $file); $fileContent = file_get_contents($file); global $baseDir; require_once($baseDir . '/modules/oauth/libextinc/OAuth.php'); $translationconfig = SimpleSAML_Configuration::getConfig('translation.php'); $baseurl = $translationconfig->getString('baseurl'); $key = $translationconfig->getString('key'); $secret = $translationconfig->getString('secret'); echo 'Using OAuth to authenticate you to the translation portal' . "\n"; $consumer = new sspmod_oauth_Consumer($key, $secret); $storage = new sspmod_core_Storage_SQLPermanentStorage('oauth_clientcache'); $cachedAccessToken = $storage->get('accesstoken', 'translation', ''); $accessToken = NULL; if (empty($cachedAccessToken)) { // Get the request token $requestToken = $consumer->getRequestToken($baseurl . '/module.php/oauth/requestToken.php'); echo "Got a request token from the OAuth service provider [" . $requestToken->key . "] with the secret [" . $requestToken->secret . "]\n"; // Authorize the request token $url = $consumer->getAuthorizeRequest($baseurl . '/module.php/oauth/authorize.php', $requestToken, FALSE); echo('Go to this URL to authenticate/authorize the request: ' . $url . "\n"); system('open ' . $url); ssp_readline('Click enter when you have completed the authorization step using your web browser...'); // Replace the request token with an access token $accessToken = $consumer->getAccessToken( $baseurl . '/module.php/oauth/accessToken.php', $requestToken); echo "Got an access token from the OAuth service provider [" . $accessToken->key . "] with the secret [" . $accessToken->secret . "]\n"; $storage->set('accesstoken', 'translation', '', $accessToken); } else { $accessToken = $cachedAccessToken['value']; echo 'Successfully read OAuth Access Token from cache [' . $accessToken->key . ']' . "\n"; } $pushURL = $baseurl . '/module.php/translationportal/push.php'; $request = array('data' => base64_encode($fileContent), 'file' => $fileWithoutExt, 'aid' => $aid, 'type' => $type); $result = $consumer->postRequest($pushURL, $accessToken, $request); echo $result; } /** * Format an associative array as a json string. * * @param mixed $data The data that should be json encoded. * @param string $indentation The current indentation level. Optional. * @return string The json encoded data. */ function json_format($data, $indentation = '') { assert('is_string($indentation)'); if (!is_array($data)) { return json_encode($data); } $ret = "{"; $first = TRUE; foreach ($data as $k => $v) { $k = json_encode((string)$k); $v = json_format($v, $indentation . "\t"); if ($first) { $ret .= "\n"; $first = FALSE; } else { $ret .= ",\n"; } $ret .= $indentation . "\t" . $k . ': ' . $v; } $ret .= "\n" . $indentation . '}'; return $ret; } ?>