GitHub Access Token became invalid

It seems like the GitHub access token used for retrieving details about this repository from GitHub became invalid. This might prevent certain types of inspections from being run (in particular, everything related to pull requests).
Please ask an admin of your repository to re-new the access token on this website.

EOpenIDService   A
last analyzed

Complexity

Total Complexity 17

Size/Duplication

Total Lines 132
Duplicated Lines 6.06 %

Coupling/Cohesion

Components 1
Dependencies 3

Importance

Changes 0
Metric Value
dl 8
loc 132
rs 10
c 0
b 0
f 0
wmc 17
lcom 1
cbo 3

2 Methods

Rating   Name   Duplication   Size   Complexity  
A init() 0 4 1
D authenticate() 8 83 16

How to fix   Duplicated Code   

Duplicated Code

Duplicate code is one of the most pungent code smells. A rule that is often used is to re-structure code once it is duplicated in three or more places.

Common duplication problems, and corresponding solutions are:

1
<?php
2
/**
3
 * EOpenIDService class file.
4
 *
5
 * @author Maxim Zemskov <[email protected]>
6
 * @link http://github.com/Nodge/yii-eauth/
7
 * @license http://www.opensource.org/licenses/bsd-license.php
8
 */
9
10
require_once 'EAuthServiceBase.php';
11
12
/**
13
 * EOpenIDService is a base class for all OpenID providers.
14
 *
15
 * @package application.extensions.eauth
16
 */
17
abstract class EOpenIDService extends EAuthServiceBase implements IAuthService {
18
19
	/**
20
	 * @var string a pattern that represents the part of URL-space for which an OpenID Authentication request is valid.
21
	 * See the spec for more info: http://openid.net/specs/openid-authentication-2_0.html#realms
22
	 * Note: a pattern can be without http(s):// part
23
	 */
24
	public $realm;
25
26
	/**
27
	 * @var LightOpenID the openid library instance.
28
	 */
29
	private $auth;
30
31
	/**
32
	 * @var string the OpenID authorization url.
33
	 */
34
	protected $url;
35
36
	/**
37
	 * @var array the OpenID required attributes.
38
	 */
39
	protected $requiredAttributes = array();
40
41
	/**
42
	 * @var array the OpenID optional attributes.
43
	 */
44
	protected $optionalAttributes = array();
45
46
47
	/**
48
	 * Initialize the component.
49
	 *
50
	 * @param EAuth $component the component instance.
51
	 * @param array $options properties initialization.
52
	 */
53
	public function init($component, $options = array()) {
54
		parent::init($component, $options);
55
		$this->auth = Yii::app()->loid->load();
56
	}
57
58
	/**
59
	 * Authenticate the user.
60
	 *
61
	 * @return boolean whether user was successfuly authenticated.
62
	 * @throws EAuthException
63
	 * @throws CHttpException
64
	 */
65
	public function authenticate() {
66
67
		if (!empty($_REQUEST['openid_mode'])) {
68
			switch ($_REQUEST['openid_mode']) {
69
				case 'id_res':
70
					try {
71
						$this->auth->returnUrl = $this->getState('returnUrl');
72
						if ($this->auth->validate()) {
73
							$this->attributes['id'] = $this->auth->identity;
74
75
							$attributes = $this->auth->getAttributes();
76
							foreach ($this->requiredAttributes as $key => $attr) {
77
								if (isset($attributes[$attr[1]])) {
78
									$this->attributes[$key] = $attributes[$attr[1]];
79
								}
80 View Code Duplication
								else {
0 ignored issues
show
Duplication introduced by
This code seems to be duplicated across your project.

Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation.

You can also find more detailed suggestions in the “Code” section of your repository.

Loading history...
81
									throw new EAuthException(Yii::t('eauth', 'Unable to complete the authentication because the required data was not received.', array('{provider}' => $this->getServiceTitle())));
82
									return false;
0 ignored issues
show
Unused Code introduced by
return false; does not seem to be reachable.

This check looks for unreachable code. It uses sophisticated control flow analysis techniques to find statements which will never be executed.

Unreachable code is most often the result of return, die or exit statements that have been added for debug purposes.

function fx() {
    try {
        doSomething();
        return true;
    }
    catch (\Exception $e) {
        return false;
    }

    return false;
}

In the above example, the last return false will never be executed, because a return statement has already been met in every possible execution path.

Loading history...
83
								}
84
							}
85
86
							foreach ($this->optionalAttributes as $key => $attr) {
87
								if (isset($attributes[$attr[1]])) {
88
									$this->attributes[$key] = $attributes[$attr[1]];
89
								}
90
							}
91
92
							$this->authenticated = true;
93
							return true;
94
						}
95 View Code Duplication
						else {
0 ignored issues
show
Duplication introduced by
This code seems to be duplicated across your project.

Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation.

You can also find more detailed suggestions in the “Code” section of your repository.

Loading history...
96
							throw new EAuthException(Yii::t('eauth', 'Unable to complete the authentication because the required data was not received.', array('{provider}' => $this->getServiceTitle())));
97
							return false;
0 ignored issues
show
Unused Code introduced by
return false; does not seem to be reachable.

This check looks for unreachable code. It uses sophisticated control flow analysis techniques to find statements which will never be executed.

Unreachable code is most often the result of return, die or exit statements that have been added for debug purposes.

function fx() {
    try {
        doSomething();
        return true;
    }
    catch (\Exception $e) {
        return false;
    }

    return false;
}

In the above example, the last return false will never be executed, because a return statement has already been met in every possible execution path.

Loading history...
98
						}
99
					} catch (Exception $e) {
100
						throw new EAuthException($e->getMessage(), $e->getCode());
101
					}
102
					break;
0 ignored issues
show
Unused Code introduced by
break; does not seem to be reachable.

This check looks for unreachable code. It uses sophisticated control flow analysis techniques to find statements which will never be executed.

Unreachable code is most often the result of return, die or exit statements that have been added for debug purposes.

function fx() {
    try {
        doSomething();
        return true;
    }
    catch (\Exception $e) {
        return false;
    }

    return false;
}

In the above example, the last return false will never be executed, because a return statement has already been met in every possible execution path.

Loading history...
103
104
				case 'cancel':
105
					$this->cancel();
106
					break;
107
108
				default:
109
					throw new CHttpException(400, Yii::t('yii', 'Your request is invalid.'));
110
					break;
0 ignored issues
show
Unused Code introduced by
break; does not seem to be reachable.

This check looks for unreachable code. It uses sophisticated control flow analysis techniques to find statements which will never be executed.

Unreachable code is most often the result of return, die or exit statements that have been added for debug purposes.

function fx() {
    try {
        doSomething();
        return true;
    }
    catch (\Exception $e) {
        return false;
    }

    return false;
}

In the above example, the last return false will never be executed, because a return statement has already been met in every possible execution path.

Loading history...
111
			}
112
		}
113
		else {
114
			$this->auth->identity = $this->url; //Setting identifier
115
			$this->auth->required = array(); //Try to get info from openid provider
116
			foreach ($this->requiredAttributes as $attribute) {
117
				$this->auth->required[$attribute[0]] = $attribute[1];
118
			}
119
			foreach ($this->optionalAttributes as $attribute) {
120
				$this->auth->required[$attribute[0]] = $attribute[1];
121
			}
122
123
			if (isset($this->realm)) {
124
				if (!preg_match('#^[a-z]+\://#', $this->realm)) {
125
					$this->auth->realm = 'http' . (Yii::app()->request->getIsSecureConnection() ? 's' : '') . '://' . $this->realm;
126
				}
127
				else {
128
					$this->auth->realm = $this->realm;
129
				}
130
			}
131
			else {
132
				$this->auth->realm = Yii::app()->request->hostInfo;
133
			}
134
135
			$this->auth->returnUrl = Yii::app()->request->hostInfo . Yii::app()->request->url; //getting return URL
136
			$this->setState('returnUrl', $this->auth->returnUrl);
137
138
			try {
139
				$url = $this->auth->authUrl();
140
				Yii::app()->request->redirect($url);
141
			} catch (Exception $e) {
142
				throw new EAuthException($e->getMessage(), $e->getCode());
143
			}
144
		}
145
146
		return false;
147
	}
148
}