getOAuthService(); $data = array(); $url = $this->getConf('userurl'); $raw = $oauth->request($url); if (!$raw) throw new OAuthException('Failed to fetch data from userurl'); $result = json_decode($raw, true); if (!$result) throw new OAuthException('Failed to parse data from userurl'); $grpdots = sexplode('[]', $this->getConf('json-grps'), 2); $user = DotAccess::get($result, $this->getConf('json-user'), ''); $name = DotAccess::get($result, $this->getConf('json-name'), ''); $mail = DotAccess::get($result, $this->getConf('json-mail'), ''); $grps = DotAccess::get($result, $grpdots[0], []); // use dot notation on each group if(is_array($grps) && $grpdots[1]) { $grps = array_map(function($grp) use ($grpdots) { return DotAccess::get($grp, $grpdots[1], ''); }, $grps); } // type fixes if (is_array($user)) $user = array_shift($user); if (is_array($name)) $name = array_shift($name); if (is_array($mail)) $mail = array_shift($mail); if (!is_array($grps)) { $grps = explode(',', $grps); $grps = array_map('trim', $grps); } // fallbacks for user name if (empty($user)) { if (!empty($name)) { $user = $name; } elseif (!empty($mail)) { list($user) = explode('@', $mail); } } // fallback for full name if (empty($name)) { $name = $user; } return compact('user', 'name', 'mail', 'grps'); } /** @inheritdoc */ public function getScopes() { return $this->getConf('scopes'); } /** @inheritDoc */ public function getLabel() { return $this->getConf('label'); } /** @inheritDoc */ public function getColor() { return $this->getConf('color'); } }