' . json_encode($e->getErrors()) . '
'; $thisPage = $PROTOCOL . $_SERVER['HTTP_HOST'] . $_SERVER['PHP_SELF']; echo 'Click here to unset the access token
'; } $name = $res->getNames()[0]->getGivenName(); $surname = $res->getNames()[0]->getFamilyName(); $emailAddresses = []; foreach ($res->getEmailAddresses() as $addr) { array_push($emailAddresses, $addr->value); } $typedId = explode('/', $res->getResourceName())[1]; $identity = new Identity(Identity::GOOGLE); $identity->typedId = $typedId; $identity->email = $emailAddresses[0]; $identity->name = $name; $identity->surname = $surname; return $this->onIdentityDataReceived($identity); } else { // Redirect to Google authorization URL for obtaining an access token $authUrl = $client->createAuthUrl(); header('Location: ' . $authUrl); die(); } return null; } } rap-ia2-master/classes/login/LinkedInLogin.php 0000664 0000000 0000000 00000012534 14156372554 0021567 0 ustar 00root root 0000000 0000000 locator->config->authenticationMethods->LinkedIn; $url = "https://www.linkedin.com/oauth/v2/authorization?response_type=code"; $url .= "&client_id=" . $LinkedIn->id; $url .= "&redirect_uri=" . $this->locator->getBasePath() . $LinkedIn->callback; $url .= "&state=" . bin2hex(random_bytes(5)); $url .= "&scope=r_liteprofile%20r_emailaddress%20w_member_social"; return $url; } public function retrieveToken(): string { // Retrieve LinkedIn configuration $LinkedIn = $this->locator->config->authenticationMethods->LinkedIn; if (!isset($_REQUEST['code'])) { die("Unable to get LinkedIn client code"); } //create array of data to be posted to get AccessToken $post_data = array( 'grant_type' => "authorization_code", 'code' => $_REQUEST['code'], 'redirect_uri' => $this->locator->getBasePath() . $LinkedIn->callback, 'client_id' => $LinkedIn->id, 'client_secret' => $LinkedIn->secret ); //traverse array and prepare data for posting (key1=value1) foreach ($post_data as $key => $value) { $post_items[] = $key . '=' . $value; } //create the final string to be posted $post_string = implode('&', $post_items); //create cURL connection $conn1 = curl_init('https://www.linkedin.com/oauth/v2/accessToken'); //set options curl_setopt($conn1, CURLOPT_CONNECTTIMEOUT, 30); curl_setopt($conn1, CURLOPT_RETURNTRANSFER, true); curl_setopt($conn1, CURLOPT_SSL_VERIFYPEER, true); curl_setopt($conn1, CURLOPT_FOLLOWLOCATION, 1); //set data to be posted curl_setopt($conn1, CURLOPT_POSTFIELDS, $post_string); //perform our request $result1 = curl_exec($conn1); $info1 = curl_getinfo($conn1); if ($info1['http_code'] === 200) { $my_token = json_decode($result1, TRUE); $access_token = $my_token['access_token']; $expires_in = $my_token['expires_in']; curl_close($conn1); } else { //show information regarding the error $errorMessage = "Error: LinkedIn server response code: " . $info1['http_code'] . " - "; $errorMessage .= curl_error($conn1); error_log($result1); curl_close($conn1); http_response_code(500); die($errorMessage); } // Call to API $conn2 = curl_init(); curl_setopt($conn2, CURLOPT_URL, "https://api.linkedin.com/v2/me"); curl_setopt($conn2, CURLOPT_HTTPHEADER, array( 'Authorization: Bearer ' . $access_token )); curl_setopt($conn2, CURLOPT_RETURNTRANSFER, true); $result = curl_exec($conn2); $info2 = curl_getinfo($conn2); if ($info2['http_code'] === 200) { $data = json_decode($result, TRUE); curl_close($conn2); if (isset($data['errorCode'])) { $errorMessage = $data['message']; die($errorMessage); } $typedId = $data['id']; // Recall to API for email $conn2 = curl_init(); curl_setopt($conn2, CURLOPT_URL, "https://api.linkedin.com/v2/emailAddress?q=members&projection=(elements*(handle~))"); curl_setopt($conn2, CURLOPT_HTTPHEADER, array( 'Authorization: Bearer ' . $access_token )); curl_setopt($conn2, CURLOPT_RETURNTRANSFER, true); $result = curl_exec($conn2); $info2 = curl_getinfo($conn2); if ($info2['http_code'] === 200) { $data2 = json_decode($result, TRUE); curl_close($conn2); if (isset($data['errorCode'])) { $errorMessage = $data['message']; die($errorMessage); } } else { //show information regarding the error $errorMessage = "Error: LinkedIn server response code: " . $info2['http_code'] . " - "; $errorMessage = $errorMessage . curl_error($conn2); curl_close($conn2); die($errorMessage); } $identity = new Identity(Identity::LINKEDIN); $identity->typedId = $typedId; $identity->email = $data2['elements'][0]['handle~']['emailAddress']; $identity->name = $data['localizedFirstName']; $identity->surname = $data['localizedLastName']; return $this->onIdentityDataReceived($identity); } else { //show information regarding the error $errorMessage = "Error: LinkedIn server response code: " . $info2['http_code'] . " - "; $errorMessage = $errorMessage . curl_error($conn2); error_log($result); curl_close($conn2); die($errorMessage); } return null; } } rap-ia2-master/classes/login/LoginHandler.php 0000664 0000000 0000000 00000014412 14156372554 0021444 0 ustar 00root root 0000000 0000000 locator = $locator; } public function onIdentityDataReceived(Identity $identity): string { $session = $this->locator->getSession(); $session->setLoginIdentityType($identity->type); $user = $this->getUser($identity); $joinStep = $this->checkJoinAction($session, $user); if ($joinStep !== null) { return $joinStep; } $session->setUser($user); $autoJoinStep = $this->checkAutoJoin(); if ($autoJoinStep !== null) { return $autoJoinStep; } if ($user->id === null) { return $this->redirectToTOUCheck($user); } else { $this->locator->getUserHandler()->updateIdentity($user, $identity); } return $this->getAfterLoginRedirect(); } private function getUser(Identity $identity): User { $userDao = $this->locator->getUserDAO(); $user = $userDao->findUserByIdentity($identity->type, $identity->typedId); if ($user === null) { // create new user with null id $user = new User(); $user->addIdentity($identity); } return $user; } private function checkJoinAction(SessionData $session, User $user): ?string { if ($session->getOAuth2RequestData() === null && $session->getAction() === 'join' && $session->getUser() !== null) { if ($session->getUser()->id === $user->id) { // attempting to join an already joined user: go to account page without joining $session->setAction('account'); } else { return $this->showConfirmJoin($user); } } return null; } public function confirmJoin(): string { $session = $this->locator->getSession(); if ($session->getUserToJoin() === null) { throw new BadRequestException("Unable to find user to join"); } $this->joinUsers(); return $this->getAfterLoginRedirect(); } private function checkAutoJoin(): ?string { $userDao = $this->locator->getUserDAO(); $session = $this->locator->getSession(); $user = $session->getUser(); if ($user->id === null) { $joinableUsers = $userDao->findJoinableUsersByEmail($user->identities[0]->email); } else { $joinableUsers = $userDao->findJoinableUsersByUserId($user->id); } if (count($session->getRejectedJoins()) > 0) { $joinableUsers = array_values(array_diff($joinableUsers, $session->getRejectedJoins())); } if (count($joinableUsers) > 0) { // select first user $userToJoin = $userDao->findUserById($joinableUsers[0]); $session->setAutojoin(true); return $this->showConfirmJoin($userToJoin); } $session->setAutojoin(false); return null; } public function rejectJoin(): string { $session = $this->locator->getSession(); $user = $session->getUser(); if ($user === null) { throw new \RAP\BadRequestException("Unable to find user"); } if ($user->id === null) { $session->addRejectedJoin($session->getUserToJoin()->id); } else { $this->locator->getUserDAO() ->insertRejectedJoin($user->id, $session->getUserToJoin()->id); } return $this->getAfterLoginRedirect(); } private function showConfirmJoin(User $userToJoin): string { $this->locator->getSession()->setUserToJoin($userToJoin); return $this->locator->getBasePath() . '/confirm-join'; } /** * Stores the data into session and Redirect to Term of Use acceptance page. */ private function redirectToTOUCheck(): string { return $this->locator->getBasePath() . '/tou-check'; } /** * Stores the user data into the database after he/she accepted the Terms of Use. */ public function register(): string { $session = $this->locator->getSession(); $user = $session->getUser(); if ($user === null) { throw new BadRequestException("User data not retrieved."); } else { $this->locator->getUserHandler()->saveUser($user); // save rejected joins stored in session foreach ($session->getRejectedJoins() as $userId) { $this->locator->getUserDAO()->insertRejectedJoin($user->id, $userId); } return $this->getAfterLoginRedirect(); } } private function joinUsers(): void { $session = $this->locator->getSession(); $user = $session->getUser(); $userToJoin = $session->getUserToJoin(); $joinedUser = $this->locator->getUserHandler()->joinUsers($user, $userToJoin); $session->setUser($joinedUser); if ($session->getAction() === 'join') { $session->setAction('account'); } $session->setUserToJoin(null); } private function getAfterLoginRedirect(): string { $autoJoinStep = $this->checkAutoJoin(); if ($autoJoinStep !== null) { return $autoJoinStep; } $session = $this->locator->getSession(); $user = $session->getUser(); if ($user->id === null) { return $this->redirectToTOUCheck($user); } $this->locator->getAuditLogger()->info("LOGIN," . $session->getLoginIdentityType() . "," . $user->id); if ($session->getOAuth2RequestData() !== null) { // Redirect to OAuth2 client callback URL $redirectUrl = $this->locator->getOAuth2RequestHandler()->getRedirectResponseUrl(); session_destroy(); return $redirectUrl; } $action = $session->getAction(); if ($action === 'account' || $action === 'admin') { return $this->locator->getBasePath() . '/' . $action; } throw new \Exception("Unable to find a proper redirect"); } } rap-ia2-master/classes/login/OrcidLogin.php 0000664 0000000 0000000 00000010670 14156372554 0021131 0 ustar 00root root 0000000 0000000 locator->config->authenticationMethods->OrcID; $url = "https://orcid.org/oauth/authorize"; $url = $url . "?client_id=" . $ORCID->id; $url = $url . "&response_type=code"; $url = $url . "&scope=/authenticate"; $url = $url . "&redirect_uri=" . $this->locator->getBasePath() . $ORCID->callback; return $url; } public function retrieveToken($code) { if ($code === null) { throw new BadRequestException("Unable to get ORCID client code"); } $token = $this->getAccessTokenFromCode($code); $access_token = $token['access_token']; $expires_in = $token['expires_in']; $orcid_id = $username = $token['orcid']; $orcid_data = $this->getOrcidDataUsingAccessToken($orcid_id, $access_token); if (!isset($orcid_data['person']['emails']['email'][0]['email'])) { throw new \Exception("ORCID didn't return the email"); } $identity = new Identity(Identity::ORCID); $identity->typedId = $orcid_id; $identity->email = $email = $orcid_data['person']['emails']['email'][0]['email']; $identity->name = $orcid_data['person']['name']['given-names']['value']; $identity->surname = $orcid_data['person']['name']['family-name']['value']; $employmentSummary = $orcid_data['activities-summary']['employments']['employment-summary']; if (count($employmentSummary) > 0) { $identity->institution = $employmentSummary[0]['organization']['name']; } return $this->onIdentityDataReceived($identity); } private function getAccessTokenFromCode($code): array { $ORCID = $this->locator->config->authenticationMethods->OrcID; //create array of data to be posted to get AccessToken $post_data = array( 'grant_type' => "authorization_code", 'code' => $code, 'redirect_uri' => $this->locator->getBasePath() . $ORCID->callback, 'client_id' => $ORCID->id, 'client_secret' => $ORCID->secret ); //traverse array and prepare data for posting (key1=value1) foreach ($post_data as $key => $value) { $post_items[] = $key . '=' . $value; } //create the final string to be posted $post_string = implode('&', $post_items); //create cURL connection $conn = curl_init('https://orcid.org/oauth/token'); //set options curl_setopt($conn, CURLOPT_CONNECTTIMEOUT, 30); curl_setopt($conn, CURLOPT_RETURNTRANSFER, true); curl_setopt($conn, CURLOPT_SSL_VERIFYPEER, true); curl_setopt($conn, CURLOPT_FOLLOWLOCATION, 1); //set data to be posted curl_setopt($conn, CURLOPT_POSTFIELDS, $post_string); //perform our request $result = curl_exec($conn); if ($result) { $token = json_decode($result, TRUE); curl_close($conn); return $token; } else { //show information regarding the error $errorMessage = curl_errno($conn) . "-"; $errorMessage = $errorMessage . curl_error($conn); curl_close($conn); throw new \Exception($errorMessage); } } private function getOrcidDataUsingAccessToken(string $orcid_id, string $access_token) { // API call $orcid_url = "https://pub.orcid.org/v2.1/" . $orcid_id . "/record"; $conn = curl_init(); curl_setopt($conn, CURLOPT_URL, $orcid_url); curl_setopt($conn, CURLOPT_HTTPHEADER, array( 'Authorization: Bearer ' . $access_token, 'Accept: application/json')); curl_setopt($conn, CURLOPT_RETURNTRANSFER, true); $result = curl_exec($conn); if ($result) { $orcid_data = json_decode($result, TRUE); curl_close($conn); return $orcid_data; } else { $errorMessage = curl_errno($conn) . "-"; $errorMessage = $errorMessage . curl_error($conn); curl_close($conn); throw new \Exception($errorMessage); } } } rap-ia2-master/classes/login/ShibbolethLogin.php 0000664 0000000 0000000 00000002645 14156372554 0022157 0 ustar 00root root 0000000 0000000 typedId = $eppn; $identity->email = $_SERVER['mail']; if (isset($_SERVER['givenName']) && $_SERVER['givenName'] !== 'N/A') { $identity->name = $_SERVER['givenName']; } if (isset($_SERVER['sn']) && $_SERVER['sn'] !== 'N/A') { $identity->surname = $_SERVER['sn']; } $identity->eppn = $eppn; return $this->onIdentityDataReceived($identity); } else { throw new ServerErrorException("Shib-Session-ID not found!"); } } } rap-ia2-master/classes/login/TestLogin.php 0000664 0000000 0000000 00000002207 14156372554 0021005 0 ustar 00root root 0000000 0000000 fakeIdentities[1] = $this->getFakeIdentity(Identity::EDU_GAIN, 1); $this->fakeIdentities[2] = $this->getFakeIdentity(Identity::GOOGLE, 2); $this->fakeIdentities[3] = $this->getFakeIdentity(Identity::LINKEDIN, 3); } public function login(): string { return $this->locator->getBasePath() . '/auth/test/select'; } public function retrieveToken(int $id): string { return $this->onIdentityDataReceived($this->fakeIdentities[$id]); } private function getFakeIdentity(string $type, int $i): Identity { $identity = new Identity($type); $identity->email = 'fake-user' . $i . "@example.com"; $identity->eppn = $identity->email; $identity->typedId = 'fake-user' . $i; return $identity; } } rap-ia2-master/classes/login/X509Login.php 0000664 0000000 0000000 00000004745 14156372554 0020544 0 ustar 00root root 0000000 0000000 0) { $x509Data = X509Data::parse($_SERVER); $this->x509Data = $x509Data; return $this->onIdentityDataReceived($this->getIdentity($x509Data)); } else { http_response_code(500); die("Unable to verify client certificate"); } return null; } public function afterNameSurnameSelection($x509Data) { $redirect = $this->onIdentityDataReceived($this->getIdentity($x509Data)); $session = $this->locator->getSession(); $session->setX509DataToRegister(null); return $redirect; } private function getIdentity($x509Data): Identity { $identity = new Identity(Identity::X509); $identity->typedId = $x509Data->serialNumber; $identity->email = $x509Data->email; $identity->name = $x509Data->name; $identity->surname = $x509Data->surname; $identity->institution = $x509Data->institution; return $identity; } /** * We want to extract name and surname from the X.509 certificate, however X.509 * puts name and surname together (inside the CN field). * If name and surname are single words it is possible to retrieve them splitting * on the space character, otherwise the user has to choose the correct combination. * In that case partial X.509 data is temporarily stored into the user session and * the page views/x509-name-surname.php is shown to the user before completing the * registration, in order to allow him/her selecting the correct name and surname. */ protected function handleNewIdentity(Identity $identity): string { $session = $this->locator->getSession(); if ($this->x509Data->name === null) { $session->setX509DataToRegister($this->x509Data); return $this->locator->getBasePath() . '/x509-name-surname'; } else { return parent::handleNewIdentity($identity); } } } rap-ia2-master/classes/model/ 0000775 0000000 0000000 00000000000 14156372554 0016353 5 ustar 00root root 0000000 0000000 rap-ia2-master/classes/model/AccessTokenData.php 0000664 0000000 0000000 00000001577 14156372554 0022072 0 ustar 00root root 0000000 0000000 creationTime = time(); $this->expirationTime = $this->creationTime + AccessTokenData::TOKEN_LIFESPAN; } public function isExpired(): bool { return $this->expirationTime < time(); } } rap-ia2-master/classes/model/AuthPageModel.php 0000664 0000000 0000000 00000004375 14156372554 0021554 0 ustar 00root root 0000000 0000000 config; $this->setupAuthenticationMethodFlags($config, $client); if ($this->localIdP) { $this->localIdPConfig = $config->authenticationMethods->LocalIdP; } if (isset($client->icon)) { $this->clientIcon = $client->getIconBasePath() . $client->icon; } $this->clientTitle = $client->title; } private function setupAuthenticationMethodFlags($config, $client) { $this->eduGAIN = isset($config->authenticationMethods->eduGAIN) && in_array(AuthenticationMethods::EDU_GAIN, $client->authMethods); $this->orcid = isset($config->authenticationMethods->OrcID) && in_array(AuthenticationMethods::ORCID, $client->authMethods); $this->x509 = isset($config->authenticationMethods->X509) && in_array(AuthenticationMethods::X509, $client->authMethods); $this->google = isset($config->authenticationMethods->Google) && in_array(AuthenticationMethods::GOOGLE, $client->authMethods); $this->facebook = isset($config->authenticationMethods->Facebook) && in_array(AuthenticationMethods::FACEBOOK, $client->authMethods); $this->linkedIn = isset($config->authenticationMethods->LinkedIn) && in_array(AuthenticationMethods::LINKED_IN, $client->authMethods); $this->localIdP = isset($config->authenticationMethods->LocalIdP) && in_array(AuthenticationMethods::LOCAL_IDP, $client->authMethods); $this->test = isset($config->authenticationMethods->test) && $config->authenticationMethods->test; } } rap-ia2-master/classes/model/AuthenticationMethods.php 0000664 0000000 0000000 00000001445 14156372554 0023373 0 ustar 00root root 0000000 0000000 client = $config->id; $this->secretHash = $config->secret; $this->title = isset($config->label) ? $config->label : null; $this->icon = isset($config->icon) ? $config->icon : null; $this->redirectUrls = isset($config->redirect) ? (is_array($config->redirect) ? $config->redirect : [$config->redirect]) : null; $this->scope = $config->scope; $this->homePage = isset($config->home) ? $config->home : null; $this->showInHome = isset($config->showInHome) ? $config->showInHome : false; $this->authMethods = $config->methods; $this->scopeAudienceMap = isset($config->scopeAudienceMap) ? $config->scopeAudienceMap : null; } public function getIconBasePath() { return 'client-icons/'; } public function validRedirectUrl(string $redirectUrl): bool { if ($this->redirectUrls === null) { return false; } foreach ($this->redirectUrls as $url) { if ($redirectUrl === $url) { return true; } } return false; } } rap-ia2-master/classes/model/CliOAuth2Client.php 0000664 0000000 0000000 00000001120 14156372554 0021747 0 ustar 00root root 0000000 0000000 id = $config->id; $this->secretHash = $config->secret; $this->scope = explode(" ", $config->scope); $this->audience = $config->audience; } } rap-ia2-master/classes/model/Identity.php 0000664 0000000 0000000 00000005316 14156372554 0020662 0 ustar 00root root 0000000 0000000 type = $userType; $this->primary = false; } private static function endsWith($haystack, $needle) { return substr($haystack, -strlen($needle)) === $needle; } /** * Workaround for IA2 users */ public function getUIType() { if ($this->eppn !== null && $this->endsWith($this->eppn, '@ia2.inaf.it')) { return 'IA2'; } else { return $this->type; } } } rap-ia2-master/classes/model/InternalClient.php 0000664 0000000 0000000 00000001202 14156372554 0021772 0 ustar 00root root 0000000 0000000 authMethods = AuthenticationMethods::getAllMethods(); $this->action = $action; } public function getIconBasePath() { return 'service-logos/'; } } rap-ia2-master/classes/model/OAuth2RequestData.php 0000664 0000000 0000000 00000000520 14156372554 0022326 0 ustar 00root root 0000000 0000000 creationTime = time(); $this->expirationTime = $this->creationTime + RefreshTokenData::TOKEN_LIFESPAN; } public $tokenHash; public $userId; public $creationTime; public $expirationTime; public $clientId; public $scope; public function isExpired(): bool { return $this->expirationTime < time(); } } rap-ia2-master/classes/model/SessionData.php 0000664 0000000 0000000 00000006140 14156372554 0021302 0 ustar 00root root 0000000 0000000 user = $user; $this->save(); } public function getUser(): ?User { return $this->user; } public function setUserToJoin(?User $userToJoin): void { $this->userToJoin = $userToJoin; $this->save(); } public function getUserToJoin(): ?User { return $this->userToJoin; } public function setAutojoin(bool $autojoin): void { $this->autojoin = $autojoin; $this->save(); } public function isAutojoin(): bool { return $this->autojoin; } public function addRejectedJoin(string $userId): void { array_push($this->rejectedJoins, $userId); $this->save(); } public function getRejectedJoins(): array { return $this->rejectedJoins; } /** * Used for logging the identity type chosen for the login at the end of the login process */ public function setLoginIdentityType(string $loginIdentityType): void { $this->loginIdentityType = $loginIdentityType; $this->save(); } public function getLoginIdentityType(): ?string { return $this->loginIdentityType; } /** * Update the user data model stored into the session after the primary * identity has changed, in order to avoid reading again the user data from * the database. * @param int $identityId */ public function updatePrimaryIdentity($identityId): void { foreach ($this->user->identities as $identity) { $identity->primary = ($identity->id === $identityId); } $this->save(); } public function setX509DataToRegister(?X509Data $x509DataToRegister): void { $this->x509DataToRegister = $x509DataToRegister; $this->save(); } public function getX509DataToRegister(): ?X509Data { return $this->x509DataToRegister; } public function setOAuth2RequestData(?OAuth2RequestData $oauth2RequestData): void { $this->oauth2RequestData = $oauth2RequestData; $this->save(); } public function getOAuth2RequestData(): ?OAuth2RequestData { return $this->oauth2RequestData; } public function setAction(?string $action): void { $this->action = $action; $this->save(); } public function getAction(): ?string { return $this->action; } /** * Store the data into the $_SESSION PHP variable */ public function save() { $_SESSION[SessionData::KEY] = $this; } } rap-ia2-master/classes/model/User.php 0000664 0000000 0000000 00000006106 14156372554 0020005 0 ustar 00root root 0000000 0000000 identities = []; } public function addIdentity(Identity $identity): void { array_push($this->identities, $identity); } public function getIdentityByTypedId(string $typedId): Identity { foreach ($this->identities as $identity) { if ($identity->typedId === $typedId) { return $identity; } } throw new \Exception("Identity not found for typed id " . $typedId); } public function getPrimaryEmail() { foreach ($this->identities as $identity) { if ($identity->primary) { return $identity->email; } } // A primary identity MUST be defined throw new \Exception("No primary identity defined for user " . $this->id); } /** * Returns name and surname if they are present, preferring the primary identity data. */ public function getCompleteName(): ?string { $completeName = null; foreach ($this->identities as $identity) { if ($identity->name !== null && $identity->surname !== null) { $completeName = $identity->name . ' ' . $identity->surname; } if ($identity->primary && $completeName !== null) { break; } } return $completeName; } /** * Returns the user name if it is present, preferring the primary identity data. */ public function getName(): ?string { $name = null; foreach ($this->identities as $identity) { if ($identity->name !== null) { $name = $identity->name; } if ($identity->primary && $name !== null) { break; } } return $name; } /** * Returns the user surname if it is present, preferring the primary identity data. */ public function getSurname(): ?string { $surname = null; foreach ($this->identities as $identity) { if ($identity->surname !== null) { $surname = $identity->surname; } if ($identity->primary && $surname !== null) { break; } } return $surname; } /** * Returns the user institution if it is present, preferring the primary identity data. */ public function getInstitution(): ?string { $institution = null; foreach ($this->identities as $identity) { if ($identity->institution !== null) { $institution = $identity->institution; } if ($identity->primary && $institution !== null) { break; } } return $institution; } } rap-ia2-master/composer.json 0000664 0000000 0000000 00000000647 14156372554 0016347 0 ustar 00root root 0000000 0000000 { "name": "ia2/rap", "description": "Remote Authentication Portal", "license": "GPL-3.0-or-later", "require": { "mikecao/flight": "1.3.7", "google/apiclient": "2.1.3", "facebook/graph-sdk": "^5.5", "monolog/monolog": "^1.22" }, "require-dev": { "phpunit/phpunit": "^8.2" }, "autoload": { "classmap": [ "classes/" ] } } rap-ia2-master/composer.lock 0000664 0000000 0000000 00000276275 14156372554 0016342 0 ustar 00root root 0000000 0000000 { "_readme": [ "This file locks the dependencies of your project to a known state", "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], "content-hash": "498c24c14b607e6da99fad95e089d7c7", "packages": [ { "name": "facebook/graph-sdk", "version": "5.7.0", "source": { "type": "git", "url": "https://github.com/facebook/php-graph-sdk.git", "reference": "2d8250638b33d73e7a87add65f47fabf91f8ad9b" }, "dist": { "type": "zip", "url": "https://api.github.com/repos/facebook/php-graph-sdk/zipball/2d8250638b33d73e7a87add65f47fabf91f8ad9b", "reference": "2d8250638b33d73e7a87add65f47fabf91f8ad9b", "shasum": "" }, "require": { "php": "^5.4|^7.0" }, "require-dev": { "guzzlehttp/guzzle": "~5.0", "mockery/mockery": "~0.8", "phpunit/phpunit": "~4.0" }, "suggest": { "guzzlehttp/guzzle": "Allows for implementation of the Guzzle HTTP client", "paragonie/random_compat": "Provides a better CSPRNG option in PHP 5" }, "type": "library", "extra": { "branch-alias": { "dev-master": "5.x-dev" } }, "autoload": { "psr-4": { "Facebook\\": "src/Facebook/" }, "files": [ "src/Facebook/polyfills.php" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ "Facebook Platform" ], "authors": [ { "name": "Facebook", "homepage": "https://github.com/facebook/php-graph-sdk/contributors" } ], "description": "Facebook SDK for PHP", "homepage": "https://github.com/facebook/php-graph-sdk", "keywords": [ "facebook", "sdk" ], "time": "2018-12-11T22:56:31+00:00" }, { "name": "firebase/php-jwt", "version": "v4.0.0", "source": { "type": "git", "url": "https://github.com/firebase/php-jwt.git", "reference": "dccf163dc8ed7ed6a00afc06c51ee5186a428d35" }, "dist": { "type": "zip", "url": "https://api.github.com/repos/firebase/php-jwt/zipball/dccf163dc8ed7ed6a00afc06c51ee5186a428d35", "reference": "dccf163dc8ed7ed6a00afc06c51ee5186a428d35", "shasum": "" }, "require": { "php": ">=5.3.0" }, "type": "library", "autoload": { "psr-4": { "Firebase\\JWT\\": "src" } }, "notification-url": "https://packagist.org/downloads/", "license": [ "BSD-3-Clause" ], "authors": [ { "name": "Neuman Vong", "email": "neuman+pear@twilio.com", "role": "Developer" }, { "name": "Anant Narayanan", "email": "anant@php.net", "role": "Developer" } ], "description": "A simple library to encode and decode JSON Web Tokens (JWT) in PHP. Should conform to the current spec.", "homepage": "https://github.com/firebase/php-jwt", "time": "2016-07-18T04:51:16+00:00" }, { "name": "google/apiclient", "version": "v2.1.3", "source": { "type": "git", "url": "https://github.com/googleapis/google-api-php-client.git", "reference": "43996f09df274158fd04fce98e8a82effe5f3717" }, "dist": { "type": "zip", "url": "https://api.github.com/repos/googleapis/google-api-php-client/zipball/43996f09df274158fd04fce98e8a82effe5f3717", "reference": "43996f09df274158fd04fce98e8a82effe5f3717", "shasum": "" }, "require": { "firebase/php-jwt": "~2.0|~3.0|~4.0", "google/apiclient-services": "^0.11", "google/auth": "^0.11", "guzzlehttp/guzzle": "~5.2|~6.0", "guzzlehttp/psr7": "^1.2", "monolog/monolog": "^1.17", "php": ">=5.4", "phpseclib/phpseclib": "~0.3.10|~2.0" }, "require-dev": { "cache/filesystem-adapter": "^0.3.2", "phpunit/phpunit": "~4", "squizlabs/php_codesniffer": "~2.3", "symfony/css-selector": "~2.1", "symfony/dom-crawler": "~2.1" }, "suggest": { "cache/filesystem-adapter": "For caching certs and tokens (using Google_Client::setCache)" }, "type": "library", "extra": { "branch-alias": { "dev-master": "2.x-dev" } }, "autoload": { "psr-0": { "Google_": "src/" }, "classmap": [ "src/Google/Service/" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ "Apache-2.0" ], "description": "Client library for Google APIs", "homepage": "http://developers.google.com/api-client-library/php", "keywords": [ "google" ], "time": "2017-03-22T18:32:04+00:00" }, { "name": "google/apiclient-services", "version": "v0.11", "source": { "type": "git", "url": "https://github.com/googleapis/google-api-php-client-services.git", "reference": "48c554aee06f2fd5700d7bdfa4fa6b82d184eb52" }, "dist": { "type": "zip", "url": "https://api.github.com/repos/googleapis/google-api-php-client-services/zipball/48c554aee06f2fd5700d7bdfa4fa6b82d184eb52", "reference": "48c554aee06f2fd5700d7bdfa4fa6b82d184eb52", "shasum": "" }, "require": { "php": ">=5.4" }, "require-dev": { "phpunit/phpunit": "~4.8" }, "type": "library", "autoload": { "psr-0": { "Google_Service_": "src" } }, "notification-url": "https://packagist.org/downloads/", "license": [ "Apache-2.0" ], "description": "Client library for Google APIs", "homepage": "http://developers.google.com/api-client-library/php", "keywords": [ "google" ], "time": "2017-03-13T17:40:44+00:00" }, { "name": "google/auth", "version": "v0.11.1", "source": { "type": "git", "url": "https://github.com/googleapis/google-auth-library-php.git", "reference": "a240674b08a09949fd5597f7590b3ed83663a12d" }, "dist": { "type": "zip", "url": "https://api.github.com/repos/googleapis/google-auth-library-php/zipball/a240674b08a09949fd5597f7590b3ed83663a12d", "reference": "a240674b08a09949fd5597f7590b3ed83663a12d", "shasum": "" }, "require": { "firebase/php-jwt": "~2.0|~3.0|~4.0", "guzzlehttp/guzzle": "~5.3|~6.0", "guzzlehttp/psr7": "~1.2", "php": ">=5.4", "psr/cache": "^1.0", "psr/http-message": "^1.0" }, "require-dev": { "friendsofphp/php-cs-fixer": "^1.11", "phpunit/phpunit": "3.7.*" }, "type": "library", "autoload": { "classmap": [ "src/" ], "psr-4": { "Google\\Auth\\": "src" } }, "notification-url": "https://packagist.org/downloads/", "license": [ "Apache-2.0" ], "description": "Google Auth Library for PHP", "homepage": "http://github.com/google/google-auth-library-php", "keywords": [ "Authentication", "google", "oauth2" ], "time": "2016-11-02T14:59:14+00:00" }, { "name": "guzzlehttp/guzzle", "version": "6.5.5", "source": { "type": "git", "url": "https://github.com/guzzle/guzzle.git", "reference": "9d4290de1cfd701f38099ef7e183b64b4b7b0c5e" }, "dist": { "type": "zip", "url": "https://api.github.com/repos/guzzle/guzzle/zipball/9d4290de1cfd701f38099ef7e183b64b4b7b0c5e", "reference": "9d4290de1cfd701f38099ef7e183b64b4b7b0c5e", "shasum": "" }, "require": { "ext-json": "*", "guzzlehttp/promises": "^1.0", "guzzlehttp/psr7": "^1.6.1", "php": ">=5.5", "symfony/polyfill-intl-idn": "^1.17.0" }, "require-dev": { "ext-curl": "*", "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.4 || ^7.0", "psr/log": "^1.1" }, "suggest": { "psr/log": "Required for using the Log middleware" }, "type": "library", "extra": { "branch-alias": { "dev-master": "6.5-dev" } }, "autoload": { "psr-4": { "GuzzleHttp\\": "src/" }, "files": [ "src/functions_include.php" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ "MIT" ], "authors": [ { "name": "Michael Dowling", "email": "mtdowling@gmail.com", "homepage": "https://github.com/mtdowling" } ], "description": "Guzzle is a PHP HTTP client library", "homepage": "http://guzzlephp.org/", "keywords": [ "client", "curl", "framework", "http", "http client", "rest", "web service" ], "time": "2020-06-16T21:01:06+00:00" }, { "name": "guzzlehttp/promises", "version": "1.4.1", "source": { "type": "git", "url": "https://github.com/guzzle/promises.git", "reference": "8e7d04f1f6450fef59366c399cfad4b9383aa30d" }, "dist": { "type": "zip", "url": "https://api.github.com/repos/guzzle/promises/zipball/8e7d04f1f6450fef59366c399cfad4b9383aa30d", "reference": "8e7d04f1f6450fef59366c399cfad4b9383aa30d", "shasum": "" }, "require": { "php": ">=5.5" }, "require-dev": { "symfony/phpunit-bridge": "^4.4 || ^5.1" }, "type": "library", "extra": { "branch-alias": { "dev-master": "1.4-dev" } }, "autoload": { "psr-4": { "GuzzleHttp\\Promise\\": "src/" }, "files": [ "src/functions_include.php" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ "MIT" ], "authors": [ { "name": "Michael Dowling", "email": "mtdowling@gmail.com", "homepage": "https://github.com/mtdowling" } ], "description": "Guzzle promises library", "keywords": [ "promise" ], "time": "2021-03-07T09:25:29+00:00" }, { "name": "guzzlehttp/psr7", "version": "1.8.2", "source": { "type": "git", "url": "https://github.com/guzzle/psr7.git", "reference": "dc960a912984efb74d0a90222870c72c87f10c91" }, "dist": { "type": "zip", "url": "https://api.github.com/repos/guzzle/psr7/zipball/dc960a912984efb74d0a90222870c72c87f10c91", "reference": "dc960a912984efb74d0a90222870c72c87f10c91", "shasum": "" }, "require": { "php": ">=5.4.0", "psr/http-message": "~1.0", "ralouphie/getallheaders": "^2.0.5 || ^3.0.0" }, "provide": { "psr/http-message-implementation": "1.0" }, "require-dev": { "ext-zlib": "*", "phpunit/phpunit": "~4.8.36 || ^5.7.27 || ^6.5.14 || ^7.5.20 || ^8.5.8 || ^9.3.10" }, "suggest": { "laminas/laminas-httphandlerrunner": "Emit PSR-7 responses" }, "type": "library", "extra": { "branch-alias": { "dev-master": "1.7-dev" } }, "autoload": { "psr-4": { "GuzzleHttp\\Psr7\\": "src/" }, "files": [ "src/functions_include.php" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ "MIT" ], "authors": [ { "name": "Michael Dowling", "email": "mtdowling@gmail.com", "homepage": "https://github.com/mtdowling" }, { "name": "Tobias Schultze", "homepage": "https://github.com/Tobion" } ], "description": "PSR-7 message implementation that also provides common utility methods", "keywords": [ "http", "message", "psr-7", "request", "response", "stream", "uri", "url" ], "time": "2021-04-26T09:17:50+00:00" }, { "name": "mikecao/flight", "version": "v1.3.7", "source": { "type": "git", "url": "https://github.com/mikecao/flight.git", "reference": "7d5970f7617861c868a5c728764421d8950faaf0" }, "dist": { "type": "zip", "url": "https://api.github.com/repos/mikecao/flight/zipball/7d5970f7617861c868a5c728764421d8950faaf0", "reference": "7d5970f7617861c868a5c728764421d8950faaf0", "shasum": "" }, "require": { "php": ">=5.3.0" }, "require-dev": { "phpunit/phpunit": "~4.6" }, "type": "library", "autoload": { "files": [ "flight/autoload.php", "flight/Flight.php" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ "MIT" ], "authors": [ { "name": "Mike Cao", "email": "mike@mikecao.com", "homepage": "http://www.mikecao.com/", "role": "Original Developer" } ], "description": "Flight is a fast, simple, extensible framework for PHP. Flight enables you to quickly and easily build RESTful web applications.", "homepage": "http://flightphp.com", "time": "2018-11-23T23:05:33+00:00" }, { "name": "monolog/monolog", "version": "1.26.0", "source": { "type": "git", "url": "https://github.com/Seldaek/monolog.git", "reference": "2209ddd84e7ef1256b7af205d0717fb62cfc9c33" }, "dist": { "type": "zip", "url": "https://api.github.com/repos/Seldaek/monolog/zipball/2209ddd84e7ef1256b7af205d0717fb62cfc9c33", "reference": "2209ddd84e7ef1256b7af205d0717fb62cfc9c33", "shasum": "" }, "require": { "php": ">=5.3.0", "psr/log": "~1.0" }, "provide": { "psr/log-implementation": "1.0.0" }, "require-dev": { "aws/aws-sdk-php": "^2.4.9 || ^3.0", "doctrine/couchdb": "~1.0@dev", "graylog2/gelf-php": "~1.0", "php-amqplib/php-amqplib": "~2.4", "php-console/php-console": "^3.1.3", "phpstan/phpstan": "^0.12.59", "phpunit/phpunit": "~4.5", "ruflin/elastica": ">=0.90 <3.0", "sentry/sentry": "^0.13", "swiftmailer/swiftmailer": "^5.3|^6.0" }, "suggest": { "aws/aws-sdk-php": "Allow sending log messages to AWS services like DynamoDB", "doctrine/couchdb": "Allow sending log messages to a CouchDB server", "ext-amqp": "Allow sending log messages to an AMQP server (1.0+ required)", "ext-mongo": "Allow sending log messages to a MongoDB server", "graylog2/gelf-php": "Allow sending log messages to a GrayLog2 server", "mongodb/mongodb": "Allow sending log messages to a MongoDB server via PHP Driver", "php-amqplib/php-amqplib": "Allow sending log messages to an AMQP server using php-amqplib", "php-console/php-console": "Allow sending log messages to Google Chrome", "rollbar/rollbar": "Allow sending log messages to Rollbar", "ruflin/elastica": "Allow sending log messages to an Elastic Search server", "sentry/sentry": "Allow sending log messages to a Sentry server" }, "type": "library", "autoload": { "psr-4": { "Monolog\\": "src/Monolog" } }, "notification-url": "https://packagist.org/downloads/", "license": [ "MIT" ], "authors": [ { "name": "Jordi Boggiano", "email": "j.boggiano@seld.be", "homepage": "http://seld.be" } ], "description": "Sends your logs to files, sockets, inboxes, databases and various web services", "homepage": "http://github.com/Seldaek/monolog", "keywords": [ "log", "logging", "psr-3" ], "funding": [ { "url": "https://github.com/Seldaek", "type": "github" }, { "url": "https://tidelift.com/funding/github/packagist/monolog/monolog", "type": "tidelift" } ], "time": "2020-12-14T12:56:38+00:00" }, { "name": "phpseclib/phpseclib", "version": "2.0.31", "source": { "type": "git", "url": "https://github.com/phpseclib/phpseclib.git", "reference": "233a920cb38636a43b18d428f9a8db1f0a1a08f4" }, "dist": { "type": "zip", "url": "https://api.github.com/repos/phpseclib/phpseclib/zipball/233a920cb38636a43b18d428f9a8db1f0a1a08f4", "reference": "233a920cb38636a43b18d428f9a8db1f0a1a08f4", "shasum": "" }, "require": { "php": ">=5.3.3" }, "require-dev": { "phing/phing": "~2.7", "phpunit/phpunit": "^4.8.35|^5.7|^6.0|^9.4", "squizlabs/php_codesniffer": "~2.0" }, "suggest": { "ext-gmp": "Install the GMP (GNU Multiple Precision) extension in order to speed up arbitrary precision integer arithmetic operations.", "ext-libsodium": "SSH2/SFTP can make use of some algorithms provided by the libsodium-php extension.", "ext-mcrypt": "Install the Mcrypt extension in order to speed up a few other cryptographic operations.", "ext-openssl": "Install the OpenSSL extension in order to speed up a wide variety of cryptographic operations." }, "type": "library", "autoload": { "files": [ "phpseclib/bootstrap.php" ], "psr-4": { "phpseclib\\": "phpseclib/" } }, "notification-url": "https://packagist.org/downloads/", "license": [ "MIT" ], "authors": [ { "name": "Jim Wigginton", "email": "terrafrost@php.net", "role": "Lead Developer" }, { "name": "Patrick Monnerat", "email": "pm@datasphere.ch", "role": "Developer" }, { "name": "Andreas Fischer", "email": "bantu@phpbb.com", "role": "Developer" }, { "name": "Hans-Jürgen Petrich", "email": "petrich@tronic-media.com", "role": "Developer" }, { "name": "Graham Campbell", "email": "graham@alt-three.com", "role": "Developer" } ], "description": "PHP Secure Communications Library - Pure-PHP implementations of RSA, AES, SSH2, SFTP, X.509 etc.", "homepage": "http://phpseclib.sourceforge.net", "keywords": [ "BigInteger", "aes", "asn.1", "asn1", "blowfish", "crypto", "cryptography", "encryption", "rsa", "security", "sftp", "signature", "signing", "ssh", "twofish", "x.509", "x509" ], "funding": [ { "url": "https://github.com/terrafrost", "type": "github" }, { "url": "https://www.patreon.com/phpseclib", "type": "patreon" }, { "url": "https://tidelift.com/funding/github/packagist/phpseclib/phpseclib", "type": "tidelift" } ], "time": "2021-04-06T13:56:45+00:00" }, { "name": "psr/cache", "version": "1.0.1", "source": { "type": "git", "url": "https://github.com/php-fig/cache.git", "reference": "d11b50ad223250cf17b86e38383413f5a6764bf8" }, "dist": { "type": "zip", "url": "https://api.github.com/repos/php-fig/cache/zipball/d11b50ad223250cf17b86e38383413f5a6764bf8", "reference": "d11b50ad223250cf17b86e38383413f5a6764bf8", "shasum": "" }, "require": { "php": ">=5.3.0" }, "type": "library", "extra": { "branch-alias": { "dev-master": "1.0.x-dev" } }, "autoload": { "psr-4": { "Psr\\Cache\\": "src/" } }, "notification-url": "https://packagist.org/downloads/", "license": [ "MIT" ], "authors": [ { "name": "PHP-FIG", "homepage": "http://www.php-fig.org/" } ], "description": "Common interface for caching libraries", "keywords": [ "cache", "psr", "psr-6" ], "time": "2016-08-06T20:24:11+00:00" }, { "name": "psr/http-message", "version": "1.0.1", "source": { "type": "git", "url": "https://github.com/php-fig/http-message.git", "reference": "f6561bf28d520154e4b0ec72be95418abe6d9363" }, "dist": { "type": "zip", "url": "https://api.github.com/repos/php-fig/http-message/zipball/f6561bf28d520154e4b0ec72be95418abe6d9363", "reference": "f6561bf28d520154e4b0ec72be95418abe6d9363", "shasum": "" }, "require": { "php": ">=5.3.0" }, "type": "library", "extra": { "branch-alias": { "dev-master": "1.0.x-dev" } }, "autoload": { "psr-4": { "Psr\\Http\\Message\\": "src/" } }, "notification-url": "https://packagist.org/downloads/", "license": [ "MIT" ], "authors": [ { "name": "PHP-FIG", "homepage": "http://www.php-fig.org/" } ], "description": "Common interface for HTTP messages", "homepage": "https://github.com/php-fig/http-message", "keywords": [ "http", "http-message", "psr", "psr-7", "request", "response" ], "time": "2016-08-06T14:39:51+00:00" }, { "name": "psr/log", "version": "1.1.4", "source": { "type": "git", "url": "https://github.com/php-fig/log.git", "reference": "d49695b909c3b7628b6289db5479a1c204601f11" }, "dist": { "type": "zip", "url": "https://api.github.com/repos/php-fig/log/zipball/d49695b909c3b7628b6289db5479a1c204601f11", "reference": "d49695b909c3b7628b6289db5479a1c204601f11", "shasum": "" }, "require": { "php": ">=5.3.0" }, "type": "library", "extra": { "branch-alias": { "dev-master": "1.1.x-dev" } }, "autoload": { "psr-4": { "Psr\\Log\\": "Psr/Log/" } }, "notification-url": "https://packagist.org/downloads/", "license": [ "MIT" ], "authors": [ { "name": "PHP-FIG", "homepage": "https://www.php-fig.org/" } ], "description": "Common interface for logging libraries", "homepage": "https://github.com/php-fig/log", "keywords": [ "log", "psr", "psr-3" ], "time": "2021-05-03T11:20:27+00:00" }, { "name": "ralouphie/getallheaders", "version": "3.0.3", "source": { "type": "git", "url": "https://github.com/ralouphie/getallheaders.git", "reference": "120b605dfeb996808c31b6477290a714d356e822" }, "dist": { "type": "zip", "url": "https://api.github.com/repos/ralouphie/getallheaders/zipball/120b605dfeb996808c31b6477290a714d356e822", "reference": "120b605dfeb996808c31b6477290a714d356e822", "shasum": "" }, "require": { "php": ">=5.6" }, "require-dev": { "php-coveralls/php-coveralls": "^2.1", "phpunit/phpunit": "^5 || ^6.5" }, "type": "library", "autoload": { "files": [ "src/getallheaders.php" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ "MIT" ], "authors": [ { "name": "Ralph Khattar", "email": "ralph.khattar@gmail.com" } ], "description": "A polyfill for getallheaders.", "time": "2019-03-08T08:55:37+00:00" }, { "name": "symfony/polyfill-intl-idn", "version": "v1.22.1", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-intl-idn.git", "reference": "2d63434d922daf7da8dd863e7907e67ee3031483" }, "dist": { "type": "zip", "url": "https://api.github.com/repos/symfony/polyfill-intl-idn/zipball/2d63434d922daf7da8dd863e7907e67ee3031483", "reference": "2d63434d922daf7da8dd863e7907e67ee3031483", "shasum": "" }, "require": { "php": ">=7.1", "symfony/polyfill-intl-normalizer": "^1.10", "symfony/polyfill-php72": "^1.10" }, "suggest": { "ext-intl": "For best performance" }, "type": "library", "extra": { "branch-alias": { "dev-main": "1.22-dev" }, "thanks": { "name": "symfony/polyfill", "url": "https://github.com/symfony/polyfill" } }, "autoload": { "psr-4": { "Symfony\\Polyfill\\Intl\\Idn\\": "" }, "files": [ "bootstrap.php" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ "MIT" ], "authors": [ { "name": "Laurent Bassin", "email": "laurent@bassin.info" }, { "name": "Trevor Rowbotham", "email": "trevor.rowbotham@pm.me" }, { "name": "Symfony Community", "homepage": "https://symfony.com/contributors" } ], "description": "Symfony polyfill for intl's idn_to_ascii and idn_to_utf8 functions", "homepage": "https://symfony.com", "keywords": [ "compatibility", "idn", "intl", "polyfill", "portable", "shim" ], "funding": [ { "url": "https://symfony.com/sponsor", "type": "custom" }, { "url": "https://github.com/fabpot", "type": "github" }, { "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", "type": "tidelift" } ], "time": "2021-01-22T09:19:47+00:00" }, { "name": "symfony/polyfill-intl-normalizer", "version": "v1.22.1", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-intl-normalizer.git", "reference": "43a0283138253ed1d48d352ab6d0bdb3f809f248" }, "dist": { "type": "zip", "url": "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/43a0283138253ed1d48d352ab6d0bdb3f809f248", "reference": "43a0283138253ed1d48d352ab6d0bdb3f809f248", "shasum": "" }, "require": { "php": ">=7.1" }, "suggest": { "ext-intl": "For best performance" }, "type": "library", "extra": { "branch-alias": { "dev-main": "1.22-dev" }, "thanks": { "name": "symfony/polyfill", "url": "https://github.com/symfony/polyfill" } }, "autoload": { "psr-4": { "Symfony\\Polyfill\\Intl\\Normalizer\\": "" }, "files": [ "bootstrap.php" ], "classmap": [ "Resources/stubs" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ "MIT" ], "authors": [ { "name": "Nicolas Grekas", "email": "p@tchwork.com" }, { "name": "Symfony Community", "homepage": "https://symfony.com/contributors" } ], "description": "Symfony polyfill for intl's Normalizer class and related functions", "homepage": "https://symfony.com", "keywords": [ "compatibility", "intl", "normalizer", "polyfill", "portable", "shim" ], "funding": [ { "url": "https://symfony.com/sponsor", "type": "custom" }, { "url": "https://github.com/fabpot", "type": "github" }, { "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", "type": "tidelift" } ], "time": "2021-01-22T09:19:47+00:00" }, { "name": "symfony/polyfill-php72", "version": "v1.22.1", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-php72.git", "reference": "cc6e6f9b39fe8075b3dabfbaf5b5f645ae1340c9" }, "dist": { "type": "zip", "url": "https://api.github.com/repos/symfony/polyfill-php72/zipball/cc6e6f9b39fe8075b3dabfbaf5b5f645ae1340c9", "reference": "cc6e6f9b39fe8075b3dabfbaf5b5f645ae1340c9", "shasum": "" }, "require": { "php": ">=7.1" }, "type": "library", "extra": { "branch-alias": { "dev-main": "1.22-dev" }, "thanks": { "name": "symfony/polyfill", "url": "https://github.com/symfony/polyfill" } }, "autoload": { "psr-4": { "Symfony\\Polyfill\\Php72\\": "" }, "files": [ "bootstrap.php" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ "MIT" ], "authors": [ { "name": "Nicolas Grekas", "email": "p@tchwork.com" }, { "name": "Symfony Community", "homepage": "https://symfony.com/contributors" } ], "description": "Symfony polyfill backporting some PHP 7.2+ features to lower PHP versions", "homepage": "https://symfony.com", "keywords": [ "compatibility", "polyfill", "portable", "shim" ], "funding": [ { "url": "https://symfony.com/sponsor", "type": "custom" }, { "url": "https://github.com/fabpot", "type": "github" }, { "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", "type": "tidelift" } ], "time": "2021-01-07T16:49:33+00:00" } ], "packages-dev": [ { "name": "doctrine/instantiator", "version": "1.4.0", "source": { "type": "git", "url": "https://github.com/doctrine/instantiator.git", "reference": "d56bf6102915de5702778fe20f2de3b2fe570b5b" }, "dist": { "type": "zip", "url": "https://api.github.com/repos/doctrine/instantiator/zipball/d56bf6102915de5702778fe20f2de3b2fe570b5b", "reference": "d56bf6102915de5702778fe20f2de3b2fe570b5b", "shasum": "" }, "require": { "php": "^7.1 || ^8.0" }, "require-dev": { "doctrine/coding-standard": "^8.0", "ext-pdo": "*", "ext-phar": "*", "phpbench/phpbench": "^0.13 || 1.0.0-alpha2", "phpstan/phpstan": "^0.12", "phpstan/phpstan-phpunit": "^0.12", "phpunit/phpunit": "^7.0 || ^8.0 || ^9.0" }, "type": "library", "autoload": { "psr-4": { "Doctrine\\Instantiator\\": "src/Doctrine/Instantiator/" } }, "notification-url": "https://packagist.org/downloads/", "license": [ "MIT" ], "authors": [ { "name": "Marco Pivetta", "email": "ocramius@gmail.com", "homepage": "https://ocramius.github.io/" } ], "description": "A small, lightweight utility to instantiate objects in PHP without invoking their constructors", "homepage": "https://www.doctrine-project.org/projects/instantiator.html", "keywords": [ "constructor", "instantiate" ], "funding": [ { "url": "https://www.doctrine-project.org/sponsorship.html", "type": "custom" }, { "url": "https://www.patreon.com/phpdoctrine", "type": "patreon" }, { "url": "https://tidelift.com/funding/github/packagist/doctrine%2Finstantiator", "type": "tidelift" } ], "time": "2020-11-10T18:47:58+00:00" }, { "name": "myclabs/deep-copy", "version": "1.10.2", "source": { "type": "git", "url": "https://github.com/myclabs/DeepCopy.git", "reference": "776f831124e9c62e1a2c601ecc52e776d8bb7220" }, "dist": { "type": "zip", "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/776f831124e9c62e1a2c601ecc52e776d8bb7220", "reference": "776f831124e9c62e1a2c601ecc52e776d8bb7220", "shasum": "" }, "require": { "php": "^7.1 || ^8.0" }, "replace": { "myclabs/deep-copy": "self.version" }, "require-dev": { "doctrine/collections": "^1.0", "doctrine/common": "^2.6", "phpunit/phpunit": "^7.1" }, "type": "library", "autoload": { "psr-4": { "DeepCopy\\": "src/DeepCopy/" }, "files": [ "src/DeepCopy/deep_copy.php" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ "MIT" ], "description": "Create deep copies (clones) of your objects", "keywords": [ "clone", "copy", "duplicate", "object", "object graph" ], "funding": [ { "url": "https://tidelift.com/funding/github/packagist/myclabs/deep-copy", "type": "tidelift" } ], "time": "2020-11-13T09:40:50+00:00" }, { "name": "phar-io/manifest", "version": "2.0.1", "source": { "type": "git", "url": "https://github.com/phar-io/manifest.git", "reference": "85265efd3af7ba3ca4b2a2c34dbfc5788dd29133" }, "dist": { "type": "zip", "url": "https://api.github.com/repos/phar-io/manifest/zipball/85265efd3af7ba3ca4b2a2c34dbfc5788dd29133", "reference": "85265efd3af7ba3ca4b2a2c34dbfc5788dd29133", "shasum": "" }, "require": { "ext-dom": "*", "ext-phar": "*", "ext-xmlwriter": "*", "phar-io/version": "^3.0.1", "php": "^7.2 || ^8.0" }, "type": "library", "extra": { "branch-alias": { "dev-master": "2.0.x-dev" } }, "autoload": { "classmap": [ "src/" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ "BSD-3-Clause" ], "authors": [ { "name": "Arne Blankerts", "email": "arne@blankerts.de", "role": "Developer" }, { "name": "Sebastian Heuer", "email": "sebastian@phpeople.de", "role": "Developer" }, { "name": "Sebastian Bergmann", "email": "sebastian@phpunit.de", "role": "Developer" } ], "description": "Component for reading phar.io manifest information from a PHP Archive (PHAR)", "time": "2020-06-27T14:33:11+00:00" }, { "name": "phar-io/version", "version": "3.1.0", "source": { "type": "git", "url": "https://github.com/phar-io/version.git", "reference": "bae7c545bef187884426f042434e561ab1ddb182" }, "dist": { "type": "zip", "url": "https://api.github.com/repos/phar-io/version/zipball/bae7c545bef187884426f042434e561ab1ddb182", "reference": "bae7c545bef187884426f042434e561ab1ddb182", "shasum": "" }, "require": { "php": "^7.2 || ^8.0" }, "type": "library", "autoload": { "classmap": [ "src/" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ "BSD-3-Clause" ], "authors": [ { "name": "Arne Blankerts", "email": "arne@blankerts.de", "role": "Developer" }, { "name": "Sebastian Heuer", "email": "sebastian@phpeople.de", "role": "Developer" }, { "name": "Sebastian Bergmann", "email": "sebastian@phpunit.de", "role": "Developer" } ], "description": "Library for handling version information and constraints", "time": "2021-02-23T14:00:09+00:00" }, { "name": "phpdocumentor/reflection-common", "version": "2.2.0", "source": { "type": "git", "url": "https://github.com/phpDocumentor/ReflectionCommon.git", "reference": "1d01c49d4ed62f25aa84a747ad35d5a16924662b" }, "dist": { "type": "zip", "url": "https://api.github.com/repos/phpDocumentor/ReflectionCommon/zipball/1d01c49d4ed62f25aa84a747ad35d5a16924662b", "reference": "1d01c49d4ed62f25aa84a747ad35d5a16924662b", "shasum": "" }, "require": { "php": "^7.2 || ^8.0" }, "type": "library", "extra": { "branch-alias": { "dev-2.x": "2.x-dev" } }, "autoload": { "psr-4": { "phpDocumentor\\Reflection\\": "src/" } }, "notification-url": "https://packagist.org/downloads/", "license": [ "MIT" ], "authors": [ { "name": "Jaap van Otterdijk", "email": "opensource@ijaap.nl" } ], "description": "Common reflection classes used by phpdocumentor to reflect the code structure", "homepage": "http://www.phpdoc.org", "keywords": [ "FQSEN", "phpDocumentor", "phpdoc", "reflection", "static analysis" ], "time": "2020-06-27T09:03:43+00:00" }, { "name": "phpdocumentor/reflection-docblock", "version": "5.2.2", "source": { "type": "git", "url": "https://github.com/phpDocumentor/ReflectionDocBlock.git", "reference": "069a785b2141f5bcf49f3e353548dc1cce6df556" }, "dist": { "type": "zip", "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/069a785b2141f5bcf49f3e353548dc1cce6df556", "reference": "069a785b2141f5bcf49f3e353548dc1cce6df556", "shasum": "" }, "require": { "ext-filter": "*", "php": "^7.2 || ^8.0", "phpdocumentor/reflection-common": "^2.2", "phpdocumentor/type-resolver": "^1.3", "webmozart/assert": "^1.9.1" }, "require-dev": { "mockery/mockery": "~1.3.2" }, "type": "library", "extra": { "branch-alias": { "dev-master": "5.x-dev" } }, "autoload": { "psr-4": { "phpDocumentor\\Reflection\\": "src" } }, "notification-url": "https://packagist.org/downloads/", "license": [ "MIT" ], "authors": [ { "name": "Mike van Riel", "email": "me@mikevanriel.com" }, { "name": "Jaap van Otterdijk", "email": "account@ijaap.nl" } ], "description": "With this component, a library can provide support for annotations via DocBlocks or otherwise retrieve information that is embedded in a DocBlock.", "time": "2020-09-03T19:13:55+00:00" }, { "name": "phpdocumentor/type-resolver", "version": "1.4.0", "source": { "type": "git", "url": "https://github.com/phpDocumentor/TypeResolver.git", "reference": "6a467b8989322d92aa1c8bf2bebcc6e5c2ba55c0" }, "dist": { "type": "zip", "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/6a467b8989322d92aa1c8bf2bebcc6e5c2ba55c0", "reference": "6a467b8989322d92aa1c8bf2bebcc6e5c2ba55c0", "shasum": "" }, "require": { "php": "^7.2 || ^8.0", "phpdocumentor/reflection-common": "^2.0" }, "require-dev": { "ext-tokenizer": "*" }, "type": "library", "extra": { "branch-alias": { "dev-1.x": "1.x-dev" } }, "autoload": { "psr-4": { "phpDocumentor\\Reflection\\": "src" } }, "notification-url": "https://packagist.org/downloads/", "license": [ "MIT" ], "authors": [ { "name": "Mike van Riel", "email": "me@mikevanriel.com" } ], "description": "A PSR-5 based resolver of Class names, Types and Structural Element Names", "time": "2020-09-17T18:55:26+00:00" }, { "name": "phpspec/prophecy", "version": "1.13.0", "source": { "type": "git", "url": "https://github.com/phpspec/prophecy.git", "reference": "be1996ed8adc35c3fd795488a653f4b518be70ea" }, "dist": { "type": "zip", "url": "https://api.github.com/repos/phpspec/prophecy/zipball/be1996ed8adc35c3fd795488a653f4b518be70ea", "reference": "be1996ed8adc35c3fd795488a653f4b518be70ea", "shasum": "" }, "require": { "doctrine/instantiator": "^1.2", "php": "^7.2 || ~8.0, <8.1", "phpdocumentor/reflection-docblock": "^5.2", "sebastian/comparator": "^3.0 || ^4.0", "sebastian/recursion-context": "^3.0 || ^4.0" }, "require-dev": { "phpspec/phpspec": "^6.0", "phpunit/phpunit": "^8.0 || ^9.0" }, "type": "library", "extra": { "branch-alias": { "dev-master": "1.11.x-dev" } }, "autoload": { "psr-4": { "Prophecy\\": "src/Prophecy" } }, "notification-url": "https://packagist.org/downloads/", "license": [ "MIT" ], "authors": [ { "name": "Konstantin Kudryashov", "email": "ever.zet@gmail.com", "homepage": "http://everzet.com" }, { "name": "Marcello Duarte", "email": "marcello.duarte@gmail.com" } ], "description": "Highly opinionated mocking framework for PHP 5.3+", "homepage": "https://github.com/phpspec/prophecy", "keywords": [ "Double", "Dummy", "fake", "mock", "spy", "stub" ], "time": "2021-03-17T13:42:18+00:00" }, { "name": "phpunit/php-code-coverage", "version": "7.0.14", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-code-coverage.git", "reference": "bb7c9a210c72e4709cdde67f8b7362f672f2225c" }, "dist": { "type": "zip", "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/bb7c9a210c72e4709cdde67f8b7362f672f2225c", "reference": "bb7c9a210c72e4709cdde67f8b7362f672f2225c", "shasum": "" }, "require": { "ext-dom": "*", "ext-xmlwriter": "*", "php": ">=7.2", "phpunit/php-file-iterator": "^2.0.2", "phpunit/php-text-template": "^1.2.1", "phpunit/php-token-stream": "^3.1.1 || ^4.0", "sebastian/code-unit-reverse-lookup": "^1.0.1", "sebastian/environment": "^4.2.2", "sebastian/version": "^2.0.1", "theseer/tokenizer": "^1.1.3" }, "require-dev": { "phpunit/phpunit": "^8.2.2" }, "suggest": { "ext-xdebug": "^2.7.2" }, "type": "library", "extra": { "branch-alias": { "dev-master": "7.0-dev" } }, "autoload": { "classmap": [ "src/" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ "BSD-3-Clause" ], "authors": [ { "name": "Sebastian Bergmann", "email": "sebastian@phpunit.de", "role": "lead" } ], "description": "Library that provides collection, processing, and rendering functionality for PHP code coverage information.", "homepage": "https://github.com/sebastianbergmann/php-code-coverage", "keywords": [ "coverage", "testing", "xunit" ], "funding": [ { "url": "https://github.com/sebastianbergmann", "type": "github" } ], "time": "2020-12-02T13:39:03+00:00" }, { "name": "phpunit/php-file-iterator", "version": "2.0.3", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-file-iterator.git", "reference": "4b49fb70f067272b659ef0174ff9ca40fdaa6357" }, "dist": { "type": "zip", "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/4b49fb70f067272b659ef0174ff9ca40fdaa6357", "reference": "4b49fb70f067272b659ef0174ff9ca40fdaa6357", "shasum": "" }, "require": { "php": ">=7.1" }, "require-dev": { "phpunit/phpunit": "^8.5" }, "type": "library", "extra": { "branch-alias": { "dev-master": "2.0.x-dev" } }, "autoload": { "classmap": [ "src/" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ "BSD-3-Clause" ], "authors": [ { "name": "Sebastian Bergmann", "email": "sebastian@phpunit.de", "role": "lead" } ], "description": "FilterIterator implementation that filters files based on a list of suffixes.", "homepage": "https://github.com/sebastianbergmann/php-file-iterator/", "keywords": [ "filesystem", "iterator" ], "funding": [ { "url": "https://github.com/sebastianbergmann", "type": "github" } ], "time": "2020-11-30T08:25:21+00:00" }, { "name": "phpunit/php-text-template", "version": "1.2.1", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-text-template.git", "reference": "31f8b717e51d9a2afca6c9f046f5d69fc27c8686" }, "dist": { "type": "zip", "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/31f8b717e51d9a2afca6c9f046f5d69fc27c8686", "reference": "31f8b717e51d9a2afca6c9f046f5d69fc27c8686", "shasum": "" }, "require": { "php": ">=5.3.3" }, "type": "library", "autoload": { "classmap": [ "src/" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ "BSD-3-Clause" ], "authors": [ { "name": "Sebastian Bergmann", "email": "sebastian@phpunit.de", "role": "lead" } ], "description": "Simple template engine.", "homepage": "https://github.com/sebastianbergmann/php-text-template/", "keywords": [ "template" ], "time": "2015-06-21T13:50:34+00:00" }, { "name": "phpunit/php-timer", "version": "2.1.3", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-timer.git", "reference": "2454ae1765516d20c4ffe103d85a58a9a3bd5662" }, "dist": { "type": "zip", "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/2454ae1765516d20c4ffe103d85a58a9a3bd5662", "reference": "2454ae1765516d20c4ffe103d85a58a9a3bd5662", "shasum": "" }, "require": { "php": ">=7.1" }, "require-dev": { "phpunit/phpunit": "^8.5" }, "type": "library", "extra": { "branch-alias": { "dev-master": "2.1-dev" } }, "autoload": { "classmap": [ "src/" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ "BSD-3-Clause" ], "authors": [ { "name": "Sebastian Bergmann", "email": "sebastian@phpunit.de", "role": "lead" } ], "description": "Utility class for timing", "homepage": "https://github.com/sebastianbergmann/php-timer/", "keywords": [ "timer" ], "funding": [ { "url": "https://github.com/sebastianbergmann", "type": "github" } ], "time": "2020-11-30T08:20:02+00:00" }, { "name": "phpunit/php-token-stream", "version": "4.0.4", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-token-stream.git", "reference": "a853a0e183b9db7eed023d7933a858fa1c8d25a3" }, "dist": { "type": "zip", "url": "https://api.github.com/repos/sebastianbergmann/php-token-stream/zipball/a853a0e183b9db7eed023d7933a858fa1c8d25a3", "reference": "a853a0e183b9db7eed023d7933a858fa1c8d25a3", "shasum": "" }, "require": { "ext-tokenizer": "*", "php": "^7.3 || ^8.0" }, "require-dev": { "phpunit/phpunit": "^9.0" }, "type": "library", "extra": { "branch-alias": { "dev-master": "4.0-dev" } }, "autoload": { "classmap": [ "src/" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ "BSD-3-Clause" ], "authors": [ { "name": "Sebastian Bergmann", "email": "sebastian@phpunit.de" } ], "description": "Wrapper around PHP's tokenizer extension.", "homepage": "https://github.com/sebastianbergmann/php-token-stream/", "keywords": [ "tokenizer" ], "funding": [ { "url": "https://github.com/sebastianbergmann", "type": "github" } ], "abandoned": true, "time": "2020-08-04T08:28:15+00:00" }, { "name": "phpunit/phpunit", "version": "8.5.15", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/phpunit.git", "reference": "038d4196d8e8cb405cd5e82cedfe413ad6eef9ef" }, "dist": { "type": "zip", "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/038d4196d8e8cb405cd5e82cedfe413ad6eef9ef", "reference": "038d4196d8e8cb405cd5e82cedfe413ad6eef9ef", "shasum": "" }, "require": { "doctrine/instantiator": "^1.3.1", "ext-dom": "*", "ext-json": "*", "ext-libxml": "*", "ext-mbstring": "*", "ext-xml": "*", "ext-xmlwriter": "*", "myclabs/deep-copy": "^1.10.0", "phar-io/manifest": "^2.0.1", "phar-io/version": "^3.0.2", "php": ">=7.2", "phpspec/prophecy": "^1.10.3", "phpunit/php-code-coverage": "^7.0.12", "phpunit/php-file-iterator": "^2.0.2", "phpunit/php-text-template": "^1.2.1", "phpunit/php-timer": "^2.1.2", "sebastian/comparator": "^3.0.2", "sebastian/diff": "^3.0.2", "sebastian/environment": "^4.2.3", "sebastian/exporter": "^3.1.2", "sebastian/global-state": "^3.0.0", "sebastian/object-enumerator": "^3.0.3", "sebastian/resource-operations": "^2.0.1", "sebastian/type": "^1.1.3", "sebastian/version": "^2.0.1" }, "require-dev": { "ext-pdo": "*" }, "suggest": { "ext-soap": "*", "ext-xdebug": "*", "phpunit/php-invoker": "^2.0.0" }, "bin": [ "phpunit" ], "type": "library", "extra": { "branch-alias": { "dev-master": "8.5-dev" } }, "autoload": { "classmap": [ "src/" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ "BSD-3-Clause" ], "authors": [ { "name": "Sebastian Bergmann", "email": "sebastian@phpunit.de", "role": "lead" } ], "description": "The PHP Unit Testing framework.", "homepage": "https://phpunit.de/", "keywords": [ "phpunit", "testing", "xunit" ], "funding": [ { "url": "https://phpunit.de/donate.html", "type": "custom" }, { "url": "https://github.com/sebastianbergmann", "type": "github" } ], "time": "2021-03-17T07:27:54+00:00" }, { "name": "sebastian/code-unit-reverse-lookup", "version": "1.0.2", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/code-unit-reverse-lookup.git", "reference": "1de8cd5c010cb153fcd68b8d0f64606f523f7619" }, "dist": { "type": "zip", "url": "https://api.github.com/repos/sebastianbergmann/code-unit-reverse-lookup/zipball/1de8cd5c010cb153fcd68b8d0f64606f523f7619", "reference": "1de8cd5c010cb153fcd68b8d0f64606f523f7619", "shasum": "" }, "require": { "php": ">=5.6" }, "require-dev": { "phpunit/phpunit": "^8.5" }, "type": "library", "extra": { "branch-alias": { "dev-master": "1.0.x-dev" } }, "autoload": { "classmap": [ "src/" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ "BSD-3-Clause" ], "authors": [ { "name": "Sebastian Bergmann", "email": "sebastian@phpunit.de" } ], "description": "Looks up which function or method a line of code belongs to", "homepage": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/", "funding": [ { "url": "https://github.com/sebastianbergmann", "type": "github" } ], "time": "2020-11-30T08:15:22+00:00" }, { "name": "sebastian/comparator", "version": "3.0.3", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/comparator.git", "reference": "1071dfcef776a57013124ff35e1fc41ccd294758" }, "dist": { "type": "zip", "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/1071dfcef776a57013124ff35e1fc41ccd294758", "reference": "1071dfcef776a57013124ff35e1fc41ccd294758", "shasum": "" }, "require": { "php": ">=7.1", "sebastian/diff": "^3.0", "sebastian/exporter": "^3.1" }, "require-dev": { "phpunit/phpunit": "^8.5" }, "type": "library", "extra": { "branch-alias": { "dev-master": "3.0-dev" } }, "autoload": { "classmap": [ "src/" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ "BSD-3-Clause" ], "authors": [ { "name": "Sebastian Bergmann", "email": "sebastian@phpunit.de" }, { "name": "Jeff Welch", "email": "whatthejeff@gmail.com" }, { "name": "Volker Dusch", "email": "github@wallbash.com" }, { "name": "Bernhard Schussek", "email": "bschussek@2bepublished.at" } ], "description": "Provides the functionality to compare PHP values for equality", "homepage": "https://github.com/sebastianbergmann/comparator", "keywords": [ "comparator", "compare", "equality" ], "funding": [ { "url": "https://github.com/sebastianbergmann", "type": "github" } ], "time": "2020-11-30T08:04:30+00:00" }, { "name": "sebastian/diff", "version": "3.0.3", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/diff.git", "reference": "14f72dd46eaf2f2293cbe79c93cc0bc43161a211" }, "dist": { "type": "zip", "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/14f72dd46eaf2f2293cbe79c93cc0bc43161a211", "reference": "14f72dd46eaf2f2293cbe79c93cc0bc43161a211", "shasum": "" }, "require": { "php": ">=7.1" }, "require-dev": { "phpunit/phpunit": "^7.5 || ^8.0", "symfony/process": "^2 || ^3.3 || ^4" }, "type": "library", "extra": { "branch-alias": { "dev-master": "3.0-dev" } }, "autoload": { "classmap": [ "src/" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ "BSD-3-Clause" ], "authors": [ { "name": "Sebastian Bergmann", "email": "sebastian@phpunit.de" }, { "name": "Kore Nordmann", "email": "mail@kore-nordmann.de" } ], "description": "Diff implementation", "homepage": "https://github.com/sebastianbergmann/diff", "keywords": [ "diff", "udiff", "unidiff", "unified diff" ], "funding": [ { "url": "https://github.com/sebastianbergmann", "type": "github" } ], "time": "2020-11-30T07:59:04+00:00" }, { "name": "sebastian/environment", "version": "4.2.4", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/environment.git", "reference": "d47bbbad83711771f167c72d4e3f25f7fcc1f8b0" }, "dist": { "type": "zip", "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/d47bbbad83711771f167c72d4e3f25f7fcc1f8b0", "reference": "d47bbbad83711771f167c72d4e3f25f7fcc1f8b0", "shasum": "" }, "require": { "php": ">=7.1" }, "require-dev": { "phpunit/phpunit": "^7.5" }, "suggest": { "ext-posix": "*" }, "type": "library", "extra": { "branch-alias": { "dev-master": "4.2-dev" } }, "autoload": { "classmap": [ "src/" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ "BSD-3-Clause" ], "authors": [ { "name": "Sebastian Bergmann", "email": "sebastian@phpunit.de" } ], "description": "Provides functionality to handle HHVM/PHP environments", "homepage": "http://www.github.com/sebastianbergmann/environment", "keywords": [ "Xdebug", "environment", "hhvm" ], "funding": [ { "url": "https://github.com/sebastianbergmann", "type": "github" } ], "time": "2020-11-30T07:53:42+00:00" }, { "name": "sebastian/exporter", "version": "3.1.3", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/exporter.git", "reference": "6b853149eab67d4da22291d36f5b0631c0fd856e" }, "dist": { "type": "zip", "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/6b853149eab67d4da22291d36f5b0631c0fd856e", "reference": "6b853149eab67d4da22291d36f5b0631c0fd856e", "shasum": "" }, "require": { "php": ">=7.0", "sebastian/recursion-context": "^3.0" }, "require-dev": { "ext-mbstring": "*", "phpunit/phpunit": "^6.0" }, "type": "library", "extra": { "branch-alias": { "dev-master": "3.1.x-dev" } }, "autoload": { "classmap": [ "src/" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ "BSD-3-Clause" ], "authors": [ { "name": "Sebastian Bergmann", "email": "sebastian@phpunit.de" }, { "name": "Jeff Welch", "email": "whatthejeff@gmail.com" }, { "name": "Volker Dusch", "email": "github@wallbash.com" }, { "name": "Adam Harvey", "email": "aharvey@php.net" }, { "name": "Bernhard Schussek", "email": "bschussek@gmail.com" } ], "description": "Provides the functionality to export PHP variables for visualization", "homepage": "http://www.github.com/sebastianbergmann/exporter", "keywords": [ "export", "exporter" ], "funding": [ { "url": "https://github.com/sebastianbergmann", "type": "github" } ], "time": "2020-11-30T07:47:53+00:00" }, { "name": "sebastian/global-state", "version": "3.0.1", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/global-state.git", "reference": "474fb9edb7ab891665d3bfc6317f42a0a150454b" }, "dist": { "type": "zip", "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/474fb9edb7ab891665d3bfc6317f42a0a150454b", "reference": "474fb9edb7ab891665d3bfc6317f42a0a150454b", "shasum": "" }, "require": { "php": ">=7.2", "sebastian/object-reflector": "^1.1.1", "sebastian/recursion-context": "^3.0" }, "require-dev": { "ext-dom": "*", "phpunit/phpunit": "^8.0" }, "suggest": { "ext-uopz": "*" }, "type": "library", "extra": { "branch-alias": { "dev-master": "3.0-dev" } }, "autoload": { "classmap": [ "src/" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ "BSD-3-Clause" ], "authors": [ { "name": "Sebastian Bergmann", "email": "sebastian@phpunit.de" } ], "description": "Snapshotting of global state", "homepage": "http://www.github.com/sebastianbergmann/global-state", "keywords": [ "global state" ], "funding": [ { "url": "https://github.com/sebastianbergmann", "type": "github" } ], "time": "2020-11-30T07:43:24+00:00" }, { "name": "sebastian/object-enumerator", "version": "3.0.4", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/object-enumerator.git", "reference": "e67f6d32ebd0c749cf9d1dbd9f226c727043cdf2" }, "dist": { "type": "zip", "url": "https://api.github.com/repos/sebastianbergmann/object-enumerator/zipball/e67f6d32ebd0c749cf9d1dbd9f226c727043cdf2", "reference": "e67f6d32ebd0c749cf9d1dbd9f226c727043cdf2", "shasum": "" }, "require": { "php": ">=7.0", "sebastian/object-reflector": "^1.1.1", "sebastian/recursion-context": "^3.0" }, "require-dev": { "phpunit/phpunit": "^6.0" }, "type": "library", "extra": { "branch-alias": { "dev-master": "3.0.x-dev" } }, "autoload": { "classmap": [ "src/" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ "BSD-3-Clause" ], "authors": [ { "name": "Sebastian Bergmann", "email": "sebastian@phpunit.de" } ], "description": "Traverses array structures and object graphs to enumerate all referenced objects", "homepage": "https://github.com/sebastianbergmann/object-enumerator/", "funding": [ { "url": "https://github.com/sebastianbergmann", "type": "github" } ], "time": "2020-11-30T07:40:27+00:00" }, { "name": "sebastian/object-reflector", "version": "1.1.2", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/object-reflector.git", "reference": "9b8772b9cbd456ab45d4a598d2dd1a1bced6363d" }, "dist": { "type": "zip", "url": "https://api.github.com/repos/sebastianbergmann/object-reflector/zipball/9b8772b9cbd456ab45d4a598d2dd1a1bced6363d", "reference": "9b8772b9cbd456ab45d4a598d2dd1a1bced6363d", "shasum": "" }, "require": { "php": ">=7.0" }, "require-dev": { "phpunit/phpunit": "^6.0" }, "type": "library", "extra": { "branch-alias": { "dev-master": "1.1-dev" } }, "autoload": { "classmap": [ "src/" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ "BSD-3-Clause" ], "authors": [ { "name": "Sebastian Bergmann", "email": "sebastian@phpunit.de" } ], "description": "Allows reflection of object attributes, including inherited and non-public ones", "homepage": "https://github.com/sebastianbergmann/object-reflector/", "funding": [ { "url": "https://github.com/sebastianbergmann", "type": "github" } ], "time": "2020-11-30T07:37:18+00:00" }, { "name": "sebastian/recursion-context", "version": "3.0.1", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/recursion-context.git", "reference": "367dcba38d6e1977be014dc4b22f47a484dac7fb" }, "dist": { "type": "zip", "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/367dcba38d6e1977be014dc4b22f47a484dac7fb", "reference": "367dcba38d6e1977be014dc4b22f47a484dac7fb", "shasum": "" }, "require": { "php": ">=7.0" }, "require-dev": { "phpunit/phpunit": "^6.0" }, "type": "library", "extra": { "branch-alias": { "dev-master": "3.0.x-dev" } }, "autoload": { "classmap": [ "src/" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ "BSD-3-Clause" ], "authors": [ { "name": "Sebastian Bergmann", "email": "sebastian@phpunit.de" }, { "name": "Jeff Welch", "email": "whatthejeff@gmail.com" }, { "name": "Adam Harvey", "email": "aharvey@php.net" } ], "description": "Provides functionality to recursively process PHP variables", "homepage": "http://www.github.com/sebastianbergmann/recursion-context", "funding": [ { "url": "https://github.com/sebastianbergmann", "type": "github" } ], "time": "2020-11-30T07:34:24+00:00" }, { "name": "sebastian/resource-operations", "version": "2.0.2", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/resource-operations.git", "reference": "31d35ca87926450c44eae7e2611d45a7a65ea8b3" }, "dist": { "type": "zip", "url": "https://api.github.com/repos/sebastianbergmann/resource-operations/zipball/31d35ca87926450c44eae7e2611d45a7a65ea8b3", "reference": "31d35ca87926450c44eae7e2611d45a7a65ea8b3", "shasum": "" }, "require": { "php": ">=7.1" }, "type": "library", "extra": { "branch-alias": { "dev-master": "2.0-dev" } }, "autoload": { "classmap": [ "src/" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ "BSD-3-Clause" ], "authors": [ { "name": "Sebastian Bergmann", "email": "sebastian@phpunit.de" } ], "description": "Provides a list of PHP built-in functions that operate on resources", "homepage": "https://www.github.com/sebastianbergmann/resource-operations", "funding": [ { "url": "https://github.com/sebastianbergmann", "type": "github" } ], "time": "2020-11-30T07:30:19+00:00" }, { "name": "sebastian/type", "version": "1.1.4", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/type.git", "reference": "0150cfbc4495ed2df3872fb31b26781e4e077eb4" }, "dist": { "type": "zip", "url": "https://api.github.com/repos/sebastianbergmann/type/zipball/0150cfbc4495ed2df3872fb31b26781e4e077eb4", "reference": "0150cfbc4495ed2df3872fb31b26781e4e077eb4", "shasum": "" }, "require": { "php": ">=7.2" }, "require-dev": { "phpunit/phpunit": "^8.2" }, "type": "library", "extra": { "branch-alias": { "dev-master": "1.1-dev" } }, "autoload": { "classmap": [ "src/" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ "BSD-3-Clause" ], "authors": [ { "name": "Sebastian Bergmann", "email": "sebastian@phpunit.de", "role": "lead" } ], "description": "Collection of value objects that represent the types of the PHP type system", "homepage": "https://github.com/sebastianbergmann/type", "funding": [ { "url": "https://github.com/sebastianbergmann", "type": "github" } ], "time": "2020-11-30T07:25:11+00:00" }, { "name": "sebastian/version", "version": "2.0.1", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/version.git", "reference": "99732be0ddb3361e16ad77b68ba41efc8e979019" }, "dist": { "type": "zip", "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/99732be0ddb3361e16ad77b68ba41efc8e979019", "reference": "99732be0ddb3361e16ad77b68ba41efc8e979019", "shasum": "" }, "require": { "php": ">=5.6" }, "type": "library", "extra": { "branch-alias": { "dev-master": "2.0.x-dev" } }, "autoload": { "classmap": [ "src/" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ "BSD-3-Clause" ], "authors": [ { "name": "Sebastian Bergmann", "email": "sebastian@phpunit.de", "role": "lead" } ], "description": "Library that helps with managing the version number of Git-hosted PHP projects", "homepage": "https://github.com/sebastianbergmann/version", "time": "2016-10-03T07:35:21+00:00" }, { "name": "symfony/polyfill-ctype", "version": "v1.22.1", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-ctype.git", "reference": "c6c942b1ac76c82448322025e084cadc56048b4e" }, "dist": { "type": "zip", "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/c6c942b1ac76c82448322025e084cadc56048b4e", "reference": "c6c942b1ac76c82448322025e084cadc56048b4e", "shasum": "" }, "require": { "php": ">=7.1" }, "suggest": { "ext-ctype": "For best performance" }, "type": "library", "extra": { "branch-alias": { "dev-main": "1.22-dev" }, "thanks": { "name": "symfony/polyfill", "url": "https://github.com/symfony/polyfill" } }, "autoload": { "psr-4": { "Symfony\\Polyfill\\Ctype\\": "" }, "files": [ "bootstrap.php" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ "MIT" ], "authors": [ { "name": "Gert de Pagter", "email": "BackEndTea@gmail.com" }, { "name": "Symfony Community", "homepage": "https://symfony.com/contributors" } ], "description": "Symfony polyfill for ctype functions", "homepage": "https://symfony.com", "keywords": [ "compatibility", "ctype", "polyfill", "portable" ], "funding": [ { "url": "https://symfony.com/sponsor", "type": "custom" }, { "url": "https://github.com/fabpot", "type": "github" }, { "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", "type": "tidelift" } ], "time": "2021-01-07T16:49:33+00:00" }, { "name": "theseer/tokenizer", "version": "1.2.0", "source": { "type": "git", "url": "https://github.com/theseer/tokenizer.git", "reference": "75a63c33a8577608444246075ea0af0d052e452a" }, "dist": { "type": "zip", "url": "https://api.github.com/repos/theseer/tokenizer/zipball/75a63c33a8577608444246075ea0af0d052e452a", "reference": "75a63c33a8577608444246075ea0af0d052e452a", "shasum": "" }, "require": { "ext-dom": "*", "ext-tokenizer": "*", "ext-xmlwriter": "*", "php": "^7.2 || ^8.0" }, "type": "library", "autoload": { "classmap": [ "src/" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ "BSD-3-Clause" ], "authors": [ { "name": "Arne Blankerts", "email": "arne@blankerts.de", "role": "Developer" } ], "description": "A small library for converting tokenized PHP source code into XML and potentially other formats", "funding": [ { "url": "https://github.com/theseer", "type": "github" } ], "time": "2020-07-12T23:59:07+00:00" }, { "name": "webmozart/assert", "version": "1.10.0", "source": { "type": "git", "url": "https://github.com/webmozarts/assert.git", "reference": "6964c76c7804814a842473e0c8fd15bab0f18e25" }, "dist": { "type": "zip", "url": "https://api.github.com/repos/webmozarts/assert/zipball/6964c76c7804814a842473e0c8fd15bab0f18e25", "reference": "6964c76c7804814a842473e0c8fd15bab0f18e25", "shasum": "" }, "require": { "php": "^7.2 || ^8.0", "symfony/polyfill-ctype": "^1.8" }, "conflict": { "phpstan/phpstan": "<0.12.20", "vimeo/psalm": "<4.6.1 || 4.6.2" }, "require-dev": { "phpunit/phpunit": "^8.5.13" }, "type": "library", "extra": { "branch-alias": { "dev-master": "1.10-dev" } }, "autoload": { "psr-4": { "Webmozart\\Assert\\": "src/" } }, "notification-url": "https://packagist.org/downloads/", "license": [ "MIT" ], "authors": [ { "name": "Bernhard Schussek", "email": "bschussek@gmail.com" } ], "description": "Assertions to validate method input/output with nice error messages.", "keywords": [ "assert", "check", "validate" ], "time": "2021-03-09T10:59:23+00:00" } ], "aliases": [], "minimum-stability": "stable", "stability-flags": [], "prefer-stable": false, "prefer-lowest": false, "platform": [], "platform-dev": [], "plugin-api-version": "1.1.0" } rap-ia2-master/config-example.yaml 0000664 0000000 0000000 00000004476 14156372554 0017413 0 ustar 00root root 0000000 0000000 --- contextRoot: "/rap-ia2" serviceLogFile: "/var/www/html/rap-ia2/logs/rap-service.log" auditLogFile: "/var/www/html/rap-ia2/logs/rap-audit.log" timeZone: "Europe/Rome" logLevel: "DEBUG" jwtIssuer: "sso.ia2.inaf.it" contactEmail: "ia2@inaf.it" contactLabel: "IA2 Team" databaseConfig: dbtype: "MySQL" hostname: "localhost" port: 3306 username: "rap" password: "XXXXXX" dbname: "rap" authenticationMethods: eduGAIN: Google: id: "XXXXXX" secret: "XXXXXX" callback: "/auth/social/google" Facebook: id: "XXXXXX" secret: "XXXXXX" version: "v8.0" callback: "/auth/social/facebook/token" LinkedIn: id: "XXXXXX" secret: "XXXXXX" callback: "/auth/social/linkedin/token" X509: LocalIdP: url: "https://sso.ia2.inaf.it/Shibboleth.sso/Login?entityID=https://sso.ia2.inaf.it/idp/shibboleth&target=https://sso.ia2.inaf.it/rap-ia2/auth/eduGAIN" logo: "img/ia2-logo-60x60.png" logoAlt: "IA2 logo" description: "Use the IA2 Logo to Login if you have an account provided by IA2 or self registered" OrcID: id: "XXXXXX" callback: "/auth/orcid" secret: "XXXXXX" # enable simulated login page for testing test: false gms: id: "gms" joinEndpoint: "https://sso.ia2.inaf.it/gms" tokenIssuer: services: - id: fileserver label: File Server aud: [fileserver, rap] scope: "read:fileserver read:rap" lifespans: [1, 6, 12, 24] clients: - label: "GMS Test (localhost)" id: gms secret: 2a97516c354b68848cdbd8f54a226a0a55b21ed138e207ad6c5cbb9c00aa5aea redirect: http://localhost:8082/gms/login scope: "openid email" home: http://localhost:8082/gms icon: showInHome: true methods: [eduGAIN, Google, Facebook, LinkedIn, X.509, LocalIdP] - label: "Asiago Astrophysical Observatory (localhost)" id: aao-dev secret: 2a97516c354b68848cdbd8f54a226a0a55b21ed138e207ad6c5cbb9c00aa5aea redirect: http://localhost:8081/aao/login scope: "openid read:userspace write:userspace read:fileserver write:fileserver read:gms read:rap" home: http://localhost:8081/aao icon: asiago.gif showInHome: true methods: [eduGAIN, Google, Facebook, LinkedIn, X.509, LocalIdP] cliClients: - id: gms_cli secret: 2a97516c354b68848cdbd8f54a226a0a55b21ed138e207ad6c5cbb9c00aa5aea scope: "read:gms write:gms read:rap" audience: [gms] rap-ia2-master/css/ 0000775 0000000 0000000 00000000000 14156372554 0014406 5 ustar 00root root 0000000 0000000 rap-ia2-master/css/style.css 0000664 0000000 0000000 00000007531 14156372554 0016266 0 ustar 00root root 0000000 0000000 body { background-color: #eee; padding-bottom: 150px; } /* Waiting div overlay */ .waiting { position: fixed; top: 0; bottom: 0; right: 0; left: 0; background-color: rgba(255, 255, 255, 0.5); z-index: 100000; font-size: 40px; text-align: center; } .waiting .icon-wrapper { position: absolute; width: 100%; height: 100%; display: table; } .waiting .glyphicon { display: table-cell; vertical-align: middle; } /* CSS animation for authentication method buttons in the RAP main page. */ @keyframes home_pulse { from { transform: scale(1, 1); } to { transform: scale(1.07, 1.07); } } /* Box containing one or more authentication methods in the RAP main page. */ .home-box { display: inline-block; vertical-align: top; width: 240px; height: 165px; margin: 10px; border-radius: 15px; border: 1px solid #ccc; background-color: #fff; padding: 4px 8px 8px 8px; box-shadow: 0 1px 2px rgba(0,0,0,.1); } .home-box .img-wrapper { width: 100%; height: 80px; text-align: center; display: table; } .home-box .img-wrapper a { display: table-cell; vertical-align: middle; } .home-box .img-wrapper a:hover { animation-duration: 0.2s; animation-fill-mode: both; animation-name: home_pulse; animation-timing-function: ease-in; } #main-header { background-image: url('../img/rap-background.jpg'); background-position: center; background-repeat: repeat-x; height: 90px; position: relative; border-bottom: 1px #9c9c9c solid; margin-bottom: 20px; box-shadow: 0 1px 2px rgba(0,0,0,.1); text-shadow: 0 2px 3px rgba(0,0,0,.6); } .credits { position: absolute; top: 66px; bottom: 0; right: 11px; left: 0; text-align: right; font-size: 12px; color: #fff; } .page-title-wrapper { position: absolute; top: 0; bottom: 0; right: 0; left: 0; } .page-title-wrapper h1 { color: #fff; font-weight: bold; font-size: 42px; } .page-title-wrapper a, .page-title-wrapper a:visited { color: #fff; } #main-footer-wrapper { position: fixed; bottom: 0; right: 0; left: 0; background-color: #eee; } #main-footer { color: #666; border-top: 1px #d4d4d4 solid; background-color: #f8f8f8; padding: 5px 0; } #footer-credits { font-size: 13px; color: #666; margin-bottom: 8px } .page-title { margin-top: 0; font-weight: bold; color: #24388e; text-shadow: 0 2px 3px rgba(0,0,0,.35); } .panel { box-shadow: 0 1px 2px rgba(0,0,0,.1); } .panel-default { border-color: #ccc } .panel-default > .panel-heading { background-image: linear-gradient(to bottom,#f5f5f5 0,#ccc 100%); } .table-like { display: table; width: 100%; } .table-like .table-row { display: table-row; } .table-row .table-cell { display: table-cell; vertical-align: middle; } .join-icon-cell { min-width: 100px; text-align: center; font-size: 30px; } .primary-identity-icon { font-size: 17px; color: #4ea64e; } .primary-identity-icon a { color: #ddd; } .primary-identity-icon a:hover { color: #888; } .services-list-wrapper { font-size: 18px; } .services-list-wrapper .btn-link { font-size: 17px; } .service-logo { padding-right: 10px; max-height: 50px; } #token-issuer-btn { margin-top: 20px; margin-bottom: 20px; } .circle-wrapper { text-align: center; position: relative; } .circle { width: 90px; height: 90px; border-radius: 50%; font-size: 25px; color: #fff; line-height: 30px; text-align: center; background: red; transform: rotate(-20deg); padding-top: 6px; border: 3px yellow solid; font-weight: bold; position: absolute; left: 27px; top: 0px; } .inline { display: inline; } rap-ia2-master/docker/ 0000775 0000000 0000000 00000000000 14156372554 0015065 5 ustar 00root root 0000000 0000000 rap-ia2-master/docker/Dockerfile 0000664 0000000 0000000 00000001135 14156372554 0017057 0 ustar 00root root 0000000 0000000 FROM git.ia2.inaf.it:5050/ia2/rap-ia2/composer FROM git.ia2.inaf.it:5050/ia2/rap-ia2/base # add RAP Apache configuration COPY docker/rap.conf /etc/apache2/conf-available/ RUN a2enconf rap.conf # enable mod_rewrite and mod_headers (for Flight framework) RUN a2enmod rewrite RUN a2enmod headers ARG RAP_DIR=/var/www/html/rap-ia2/ # create RAP directory RUN mkdir $RAP_DIR COPY --from=0 /rap-ia2 $RAP_DIR WORKDIR $RAP_DIR # create logs directory RUN mkdir -p logs RUN chown -R www-data $RAP_DIR # allow apache2 to stop gracefully STOPSIGNAL SIGWINCH EXPOSE 80 CMD ["apachectl", "-D", "FOREGROUND"] rap-ia2-master/docker/base-Dockerfile 0000664 0000000 0000000 00000000461 14156372554 0017770 0 ustar 00root root 0000000 0000000 # Base Docker image for running RAP inside Apache server FROM debian:buster RUN apt-get update && \ apt-get install -yq --no-install-recommends \ apache2 \ libapache2-mod-php \ php-xml \ php-mbstring \ php-mysql \ php-curl \ php-yaml \ ca-certificates \ ssl-cert rap-ia2-master/docker/composer-Dockerfile 0000664 0000000 0000000 00000001463 14156372554 0020710 0 ustar 00root root 0000000 0000000 # Docker image containing composer and RAP source code FROM debian:buster RUN apt-get update && \ apt-get install -yq --no-install-recommends \ php-zip php-yaml php-curl php-xml php-mysql \ composer git unzip COPY composer* /rap-ia2/ WORKDIR /rap-ia2 RUN composer install --no-dev --no-autoloader # copy RAP php files COPY auth /rap-ia2/auth COPY classes /rap-ia2/classes COPY css /rap-ia2/css COPY exec /rap-ia2/exec COPY img /rap-ia2/img COPY include /rap-ia2/include COPY js /rap-ia2/js COPY service-logos /rap-ia2/service-logos COPY views /rap-ia2/views COPY config-example.yaml index.php version.txt .htaccess /rap-ia2/ RUN composer install --no-dev COPY tests /rap-ia2/tests ARG INCLUDE_TESTS=false RUN if [ "$INCLUDE_TESTS" = 'true' ]; then composer install; else rm -Rf /rap-ia2/tests; fi rap-ia2-master/docker/db-Dockerfile 0000664 0000000 0000000 00000000442 14156372554 0017442 0 ustar 00root root 0000000 0000000 FROM mariadb:10.5 ENV MYSQL_ALLOW_EMPTY_PASSWORD yes ENV MYSQL_DATABASE rap ENV MYSQL_USER rap ENV MYSQL_PASSWORD rap COPY sql/setup-database.sql /docker-entrypoint-initdb.d/01-setup-database.sql COPY sql/delete-user-procedure.sql /docker-entrypoint-initdb.d/02-delete-user-procedure.sql rap-ia2-master/docker/demo-config.yaml 0000664 0000000 0000000 00000002123 14156372554 0020136 0 ustar 00root root 0000000 0000000 --- contextRoot: "/rap-ia2" serviceLogFile: "/var/www/html/rap-ia2/logs/rap-service.log" auditLogFile: "/var/www/html/rap-ia2/logs/rap-audit.log" timeZone: "Europe/Rome" logLevel: "DEBUG" jwtIssuer: "http://rap-ia2/rap-ia2" contactEmail: "ia2@inaf.it" contactLabel: "IA2 Team" databaseConfig: dbtype: "MySQL" hostname: "rap-db" port: 3306 username: "rap" password: "rap" dbname: "rap" authenticationMethods: test: true gms: id: "gms" joinEndpoint: "http://gms:8080/gms/join" tokenIssuer: services: - id: gms label: GMS aud: [gms, rap] scope: read:gms write:gms read:rap lifespans: [1, 6, 12, 24] clients: - label: "GMS" id: gms secret: 9f86d081884c7d659a2feaa0c55ad015a3bf4f1b2b0b822cd15d6c15b0f00a08 redirect: http://localhost:8081/gms/login scope: "openid email read:rap" home: http://localhost:8081/gms icon: showInHome: true methods: [eduGAIN, Google, Facebook, LinkedIn, X.509, LocalIdP] cliClients: - id: rap_cli secret: 9f86d081884c7d659a2feaa0c55ad015a3bf4f1b2b0b822cd15d6c15b0f00a08 scope: "read:rap write:rap" rap-ia2-master/docker/docker-compose.yml 0000664 0000000 0000000 00000001240 14156372554 0020517 0 ustar 00root root 0000000 0000000 --- version: '3.0' services: rap: image: git.ia2.inaf.it:5050/ia2/rap-ia2 volumes: - ./demo-config.yaml:/var/www/html/rap-ia2/config.yaml ports: - "8080:80" rap-db: image: git.ia2.inaf.it:5050/ia2/rap-ia2/database gms: build: ./gms environment: - server.port=8081 - spring.datasource.url=jdbc:postgresql://gms-db:5432/postgres - spring.datasource.username=gms - spring.datasource.password= - AUTH_CONFIG_PATH=/etc/gms/auth.properties volumes: - ./gms/gms-auth.properties:/etc/gms/auth.properties ports: - "8081:8081" gms-db: image: git.ia2.inaf.it:5050/ia2/ia2-gms/database rap-ia2-master/docker/gms/ 0000775 0000000 0000000 00000000000 14156372554 0015653 5 ustar 00root root 0000000 0000000 rap-ia2-master/docker/gms/Dockerfile 0000664 0000000 0000000 00000000164 14156372554 0017646 0 ustar 00root root 0000000 0000000 FROM git.ia2.inaf.it:5050/ia2/ia2-gms RUN apk add socat ADD gms-entrypoint.sh / ENTRYPOINT ["/gms-entrypoint.sh"] rap-ia2-master/docker/gms/gms-auth.properties 0000664 0000000 0000000 00000000306 14156372554 0021515 0 ustar 00root root 0000000 0000000 client_id=gms client_secret=test rap_uri=http://localhost:8080/rap-ia2 store_state_on_login_endpoint=true scope=openid email profile read:rap rap_client_class=it.inaf.ia2.gms.authn.ServletRapClient rap-ia2-master/docker/gms/gms-entrypoint.sh 0000775 0000000 0000000 00000000236 14156372554 0021212 0 ustar 00root root 0000000 0000000 #!/bin/sh # workaround for making http://localhost:8080/rap-ia2 works also inside container socat TCP-LISTEN:8080,fork TCP:rap:80 & exec java -jar /gms.jar rap-ia2-master/docker/rap.conf 0000664 0000000 0000000 00000001751 14156372554 0016522 0 ustar 00root root 0000000 0000000 # RAP directory configuration