Completed
Push — master ( 8ade87...495f03 )
by Jean-Christophe
01:54
created

AuthController::onBadCreditentials()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 3
Code Lines 2

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
dl 0
loc 3
rs 10
c 0
b 0
f 0
cc 1
eloc 2
nc 1
nop 0
1
<?php
2
namespace Ubiquity\controllers\auth;
3
4
use Ubiquity\utils\http\USession;
5
use Ubiquity\utils\http\URequest;
6
use Ubiquity\utils\flash\FlashMessage;
7
use Ubiquity\controllers\ControllerBase;
8
use Ubiquity\controllers\Auth\AuthFiles;
9
use Ubiquity\cache\ClassUtils;
10
11
 /**
12
 * Controller Auth
13
 * @property \Ajax\php\ubiquity\JsUtils $jquery
14
 **/
15
abstract class AuthController extends ControllerBase{
16
	/**
17
	 * @var AuthFiles
18
	 */
19
	protected $authFiles;
20
	
21
	public function index(){
22
		$this->authLoadView($this->_getFiles()->getViewIndex(),["action"=>$this->_getBaseRoute()."/connect"]);
23
	}
24
	
25
	/**
26
	 * To override
27
	 * Return the base route for this Auth controller
28
	 * @return string
29
	 */
30
	public function _getBaseRoute(){
31
		return ClassUtils::getClassSimpleName(get_class($this));
32
	}
33
	/**
34
	 * {@inheritDoc}
35
	 * @see \controllers\ControllerBase::isValid()
36
	 */
37
	public final function isValid() {
0 ignored issues
show
Coding Style introduced by
As per PSR2, final should precede the visibility keyword.
Loading history...
38
		return true;
39
	}
40
	
41
	/**
42
	 * Action called when the user does not have access rights to a requested resource
43
	 * @param array $urlParts
44
	 */
45
	public function noAccess($urlParts){
46
		USession::set("urlParts", $urlParts);
47
		$fMessage=new FlashMessage("You are not authorized to access the page <b>".implode("/",$urlParts)."</b> !","Forbidden access","error","warning circle");
48
		$this->noAccessMessage($fMessage);
49
		$message=$this->fMessage($fMessage);		
50
		$this->authLoadView($this->_getFiles()->getViewNoAccess(),["_message"=>$message,"authURL"=>$this->_getBaseRoute()]);
51
	}
52
	
53
	/**
54
	 * Override for modifying the noAccess message
55
	 * @param FlashMessage $fMessage
56
	 */
57
	protected function noAccessMessage(FlashMessage $fMessage){
58
		
59
	}
60
	
61
	/**
62
	 * Override to implement the complete connection procedure 
63
	 */
64
	public function connect(){
65
		if(URequest::isPost()){
66
			if($connected=$this->_connect()){
67
				$this->onConnect($connected);
68
			}else{
69
				$this->onBadCreditentials();
70
			}
71
		}
72
	}
73
	
74
	/**
75
	 * Processes the data posted by the login form
76
	 * Have to return the connected user instance
77
	 */
78
	abstract protected function _connect();
79
	
80
	/**
81
	 * @param object $connected
82
	 */
83
	abstract protected function onConnect($connected);
84
	
85
	/**
86
	 * To override for defining a new action when creditentials are invalid
87
	 */
88
	protected function onBadCreditentials(){
89
		$this->badLogin();
90
	}
91
	
92
	/**
93
	 * Default Action for invalid creditentials
94
	 */
95 View Code Duplication
	public function badLogin(){
0 ignored issues
show
Duplication introduced by
This method seems to be duplicated in 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
		$fMessage=new FlashMessage("Invalid creditentials!","Connection problem","warning","warning circle");
97
		$this->badLoginMessage($fMessage);
98
		$message=$this->fMessage($fMessage);
99
		$this->authLoadView($this->_getFiles()->getViewNoAccess(),["_message"=>$message,"authURL"=>$this->_getBaseRoute()]);
100
	}
101
	
102
	/**
103
	 * To override for modifying the bad login message
104
	 * @param FlashMessage $fMessage
105
	 */
106
	protected function badLoginMessage(FlashMessage $fMessage){
107
		
108
	}
109
	
110
	private function authLoadView($viewName,$vars=[]){
111
		$files=$this->_getFiles();
112
		$mainTemplate=$files->getBaseTemplate();
1 ignored issue
show
Bug introduced by
Are you sure the assignment to $mainTemplate is correct as $files->getBaseTemplate() (which targets Ubiquity\controllers\Aut...iles::getBaseTemplate()) seems to always return null.

This check looks for function or method calls that always return null and whose return value is assigned to a variable.

class A
{
    function getObject()
    {
        return null;
    }

}

$a = new A();
$object = $a->getObject();

The method getObject() can return nothing but null, so it makes no sense to assign that value to a variable.

The reason is most likely that a function or method is imcomplete or has been reduced for debug purposes.

Loading history...
113
		if(isset($mainTemplate)){
114
			$vars["_viewname"]=$viewName;
115
			$vars["_base"]=$mainTemplate;
116
			$this->loadView($files->getViewBaseTemplate(),$vars);
117
		}else{
118
			$this->loadView($viewName,$vars);
119
		}
120
	}
121
	
122
	/**
123
	 * Logout action
124
	 * Terminate the session and display a logout message
125
	 */
126 View Code Duplication
	public function terminate(){
0 ignored issues
show
Duplication introduced by
This method seems to be duplicated in 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...
127
		USession::terminate();
128
		$fMessage=new FlashMessage("You have been properly disconnected!","Logout","success","checkmark");
129
		$this->terminateMessage($fMessage);
130
		$message=$this->fMessage($fMessage);
131
		$this->authLoadView($this->_getFiles()->getViewNoAccess(),["_message"=>$message,"authURL"=>$this->_getBaseRoute()]);
132
	}
133
	
134
	/**
135
	 * To override for modifying the logout message
136
	 * @param FlashMessage $fMessage
137
	 */
138
	protected function terminateMessage(FlashMessage $fMessage){
139
		
140
	}
141
	
142
	/**
143
	 * Action displaying the logged user information 
144
	 * if _displayInfoAsString returns true, use _infoUser var in views to display user info
145
	 * @return string|null
146
	 */
147
	public function info(){
148
		return $this->loadView($this->_getFiles()->getViewInfo(),["connected"=>USession::get($this->_getUserSessionKey()),"authURL"=>$this->_getBaseRoute()],$this->_displayInfoAsString());
149
	}
150
	
151
	protected function fMessage(FlashMessage $fMessage){
152
		return $this->message($fMessage->getType(), $fMessage->getTitle(), $fMessage->getContent(),$fMessage->getIcon());
153
	}
154
	
155
	public function message($type,$header,$body,$icon="info"){
156
		return $this->loadView($this->_getFiles()->getViewMessage(),get_defined_vars(),true);
157
	}
158
	
159
	protected function getOriginalURL(){
160
		return USession::get("urlParts");
161
	}
162
	
163
	/**
164
	 * To override for defining user session key, default : "activeUser"
165
	 * @return string
166
	 */
167
	public function _getUserSessionKey(){
168
		return "activeUser";
169
	}
170
	
171
	
172
	
173
	/**
174
	 * 
175
	 */
176
	abstract public function _isValidUser();
177
	
178
	/**
179
	 * To override for changing view files
180
	 * @return AuthFiles
181
	 */
182
	protected function getFiles ():AuthFiles{
183
		return new AuthFiles();
184
	}
185
	
186
	/**
187
	 * Override to define if info is displayed as string
188
	 * if set to true, use _infoUser var in views to display user info
189
	 */
190
	public function _displayInfoAsString(){
191
		return true;
192
	}
193
	
194
	private function _getFiles():AuthFiles{
195
		if(!isset($this->authFiles)){
196
			$this->authFiles=$this->getFiles();
197
		}
198
		return $this->authFiles;
199
	}
200
201
}
202