Proyectos de Subversion Moodle

Rev

Rev 1 | Mostrar el archivo completo | | | Autoría | Ultima modificación | Ver Log |

Rev 1 Rev 1441
Línea 15... Línea 15...
15
// along with Moodle.  If not, see <http://www.gnu.org/licenses/>.
15
// along with Moodle.  If not, see <http://www.gnu.org/licenses/>.
Línea 16... Línea 16...
16
 
16
 
Línea 17... Línea 17...
17
namespace core\oauth2\service;
17
namespace core\oauth2\service;
18
 
-
 
19
use core\oauth2\issuer;
18
 
20
use core\oauth2\endpoint;
19
use core\oauth2\issuer;
Línea 21... Línea 20...
21
use core\oauth2\user_field_mapping;
20
use core\oauth2\user_field_mapping;
22
use core\oauth2\discovery\openidconnect;
21
use core\oauth2\discovery\openidconnect;
Línea 37... Línea 36...
37
     */
36
     */
38
    public static function init(): issuer {
37
    public static function init(): issuer {
39
        $record = (object) [
38
        $record = (object) [
40
            'name' => 'Microsoft',
39
            'name' => 'Microsoft',
41
            'image' => 'https://www.microsoft.com/favicon.ico',
40
            'image' => 'https://www.microsoft.com/favicon.ico',
42
            'baseurl' => '',
41
            'baseurl' => 'https://login.microsoftonline.com/common/v2.0',
43
            'loginscopes' => 'openid profile email user.read',
42
            'loginscopes' => 'openid profile email user.read',
44
            'loginscopesoffline' => 'openid profile email user.read offline_access',
43
            'loginscopesoffline' => 'openid profile email user.read offline_access',
45
            'showonloginpage' => issuer::EVERYWHERE,
44
            'showonloginpage' => issuer::EVERYWHERE,
46
            'servicetype' => 'microsoft',
45
            'servicetype' => 'microsoft',
47
        ];
46
        ];
Línea 48... Línea 47...
48
 
47
 
49
        $issuer = new issuer(0, $record);
48
        $issuer = new issuer(0, $record);
50
        return $issuer;
49
        return $issuer;
Línea 51... Línea -...
51
    }
-
 
52
 
-
 
53
    /**
-
 
54
     * Create endpoints for this issuer.
-
 
55
     *
50
    }
56
     * @param issuer $issuer Issuer the endpoints should be created for.
-
 
57
     * @return issuer
51
 
58
     */
-
 
59
    public static function create_endpoints(issuer $issuer): issuer {
-
 
60
        $endpoints = [
-
 
61
            'authorization_endpoint' => 'https://login.microsoftonline.com/common/oauth2/v2.0/authorize',
-
 
62
            'token_endpoint' => 'https://login.microsoftonline.com/common/oauth2/v2.0/token',
-
 
63
            'userinfo_endpoint' => 'https://graph.microsoft.com/v1.0/me/',
-
 
64
            'userpicture_endpoint' => 'https://graph.microsoft.com/v1.0/me/photo/$value',
52
    #[\Override]
65
        ];
-
 
66
        foreach ($endpoints as $name => $url) {
53
    protected static function create_field_mappings(issuer $issuer): void {
67
            $record = (object) [
-
 
68
                'issuerid' => $issuer->get('id'),
-
 
69
                'name' => $name,
-
 
70
                'url' => $url
-
 
71
            ];
54
        // Remove existing user field mapping.
72
            $endpoint = new endpoint(0, $record);
55
        foreach (user_field_mapping::get_records(['issuerid' => $issuer->get('id')]) as $userfieldmapping) {
Línea 73... Línea 56...
73
            $endpoint->create();
56
            $userfieldmapping->delete();
74
        }
57
        }
-
 
58
 
75
 
59
        // Create the field mappings.
76
        // Create the field mappings.
60
        $mapping = [
77
        $mapping = [
61
            'sub' => 'idnumber',
78
            'givenName' => 'firstname',
62
            'givenname' => 'firstname',
79
            'surname' => 'lastname',
63
            'familyname' => 'lastname',
80
            'userPrincipalName' => 'email',
64
            'email' => 'email',
81
            'displayName' => 'alternatename',
65
            'displayName' => 'alternatename',
82
            'officeLocation' => 'address',
66
            'officeLocation' => 'address',
-
 
67
            'mobilePhone' => 'phone1',
83
            'mobilePhone' => 'phone1',
68
            'locale' => 'lang',
84
            'preferredLanguage' => 'lang'
69
        ];
85
        ];
70
 
86
        foreach ($mapping as $external => $internal) {
71
        foreach ($mapping as $external => $internal) {
87
            $record = (object) [
72
            $record = (object) [
88
                'issuerid' => $issuer->get('id'),
73
                'issuerid' => $issuer->get('id'),
89
                'externalfield' => $external,
74
                'externalfield' => $external,
90
                'internalfield' => $internal
75
                'internalfield' => $internal,
91
            ];
76
            ];
92
            $userfieldmapping = new user_field_mapping(0, $record);
-
 
93
            $userfieldmapping->create();
-
 
94
        }
77
            $userfieldmapping = new user_field_mapping(0, $record);
95
 
78
            $userfieldmapping->create();