Skip to content
Snippets Groups Projects
Select Git revision
  • 86586fd874c7dde15cf7a0a662c6bad3bbd6ef39
  • master default protected
  • v0.2.1-devel
  • v0.2.1
4 results

LdapConfig.dev.properties

Blame
  • GmsClient.php 2.28 KiB
    <?php
    
    namespace RAP;
    
    class GmsClient {
    
        private $locator;
    
        public function __construct(Locator $locator) {
            $this->locator = $locator;
        }
    
        public function joinGroups(string $userId1, string $userId2): string {
            if (!isset($this->locator->config->gms)) {
                return $userId1;
            }
    
            //create cURL connection
            $conn = curl_init($this->locator->config->gms->joinEndpoint);
    
            //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);
            // Setting an empty body, otherwise Content-Length will be negative and Spring will answer with 400
            curl_setopt($conn, CURLOPT_POSTFIELDS, " ");
            curl_setopt($conn, CURLOPT_HTTPHEADER, ['Authorization: Bearer '
                . $this->getJoinAccessToken($userId1, $userId2)]);
    
            //set data to be posted
            curl_setopt($conn, CURLOPT_POST, 1);
    
            //perform the request
            $response = curl_exec($conn);
            $info = curl_getinfo($conn);
    
            if ($info['http_code'] === 200) {
                curl_close($conn);
            } else {
                //show information regarding the error
                curl_close($conn);
                error_log($response);
                $httpCode = $info['http_code'];
                if ($httpCode === 0) {
                    throw new ServerErrorException('GMS service is unreachable');
                }
                throw new ServerErrorException('Error: GMS response code: ' . $httpCode);
            }
            
            // TODO: return id extracted from GMS response
            return $userId1;
        }
    
        private function getJoinAccessToken(int $userId1, int $userId2): string {
    
            $gmsId = $this->locator->config->gms->id;
    
            $accessToken = new AccessTokenData();
            $accessToken->clientId = $gmsId;
            $accessToken->userId = $userId1;
            // shorter expiration
            $accessToken->expirationTime = $accessToken->creationTime + 100;
            $accessToken->scope = ['openid'];
    
            return $this->locator->getTokenBuilder()->getAccessToken($accessToken, function(& $jwt) use($userId2) {
                        $jwt['alt_sub'] = strval($userId2);
                    });
        }
    
    }