core/ProfileFactory.php

Summary

Maintainability
A
0 mins
Test Coverage
<?php

/*
 * *****************************************************************************
 * Contributions to this work were made on behalf of the GÉANT project, a 
 * project that has received funding from the European Union’s Framework 
 * Programme 7 under Grant Agreements No. 238875 (GN3) and No. 605243 (GN3plus),
 * Horizon 2020 research and innovation programme under Grant Agreements No. 
 * 691567 (GN4-1) and No. 731122 (GN4-2).
 * On behalf of the aforementioned projects, GEANT Association is the sole owner
 * of the copyright in all material which was developed by a member of the GÉANT
 * project. GÉANT Vereniging (Association) is registered with the Chamber of 
 * Commerce in Amsterdam with registration number 40535155 and operates in the 
 * UK as a branch of GÉANT Vereniging.
 * 
 * Registered office: Hoekenrode 3, 1102BR Amsterdam, The Netherlands. 
 * UK branch address: City House, 126-130 Hills Road, Cambridge CB2 1PQ, UK
 *
 * License: see the web/copyright.inc.php file in the file structure or
 *          <base_url>/copyright.php after deploying the software
 */

namespace core;

/**
 * This factory class generates either a ProfileRADIUS or a ProfileSilverbullet
 * as needed. Indication which to choose is by supported EAP types in the
 * profile in question
 */
class ProfileFactory
{

    /** is this profile a RADIUS profile or SILVERBULLET?
     * find out, and return an instance of the instantiated sub-class as appropriate
     * 
     * @param int $profileId ID of the profile in DB
     * @param IdP $idpObject optional. If the IdP is already instantiated then the instance can be passed here to avoid another instantiation
     * 
     * @return AbstractProfile a sub-class of AbstractProfile matching the type
     */
    public static function instantiate($profileId, $idpObject = NULL)
    {
        // we either need a ProfileRADIUS or ProfileSilverbullet. Try one, and
        // switch to the other if our guess was wrong
        $attempt = new ProfileRADIUS($profileId, $idpObject);
        $methods = $attempt->getEapMethodsinOrderOfPreference();
        if ((count($methods) == 1) && $methods[0]->getArrayRep() == \core\common\EAP::EAPTYPE_SILVERBULLET) {
            return new ProfileSilverbullet($profileId, $idpObject);
        }
        return $attempt;
    }
}