blob: 5c4c78adf23732ee33db43d882a95b8098d7f157 [file] [log] [blame]
<?php
/*******************************************************************************
* Copyright (c) 2012-2014 Eclipse Foundation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* Christopher Guindon (Eclipse Foundation) - initial API and implementation
*******************************************************************************/
/**
* Usage example:
*
* $AccountCreator = New AccountCreator();
* $AccountCreator->setDebugMode();
* $AccountCreator->setUrl('https://bugs.eclipse.org/bugstest/index.cgi');
* $AccountCreator->setUsername('user@mail.com');
* $AccountCreator->setPassword('the_password');
* $AccountCreator->setAccountType('gerrit');
* $AccountCreator->execute();
*/
/**
* Eclipse Account Creator Class
*
* Create new users to 3rd party applications.
*
* @package Site_login
* @author Christopher Guindon
*/
class AccountCreator {
/**
* Type of Account to create
*
* @var string
*/
private $account_type = "";
/**
* Enable or disable debug mode.
*
* @var bool
*/
private $debug = FALSE;
/**
* Username/e-mail address of the user.
*
* @var string
*/
private $username = "";
/**
* Password of the user.
*
* @var string
*/
private $password = "";
/**
* Url of Website.
*
* @var string
*/
private $url = "";
// --------------------------------------------------------------------
/**
* Constructor - Sets default settings
*
* @return void
*/
function __construct() {
$this->url = "https://bugs.eclipse.org/bugs/index.cgi";
}
/**
* Execute Login Process
*
* @return int/bool
*/
public function execute() {
if (filter_var($this->username, FILTER_VALIDATE_EMAIL) && !empty($this->password)) {
return $this->_process();
}
else{
trigger_error("Invalid username or password", E_USER_NOTICE);
}
return FALSE;
}
/**
* Set Account Type
*
* @return bool
*/
public function setAccountType($type = "") {
$allowed_type = array('gerrit', 'bugzilla');
$type = strtolower($type);
if (in_array($type, $allowed_type)) {
$this->account_type = $type;
return TRUE;
}
return FALSE;
}
/**
* Enable Debug Mode
*
* @return bool
*/
public function setDebugMode($set = TRUE){
if ($set == TRUE) {
$this->debug = TRUE;
return TRUE;
}
return FALSE;
}
/**
* Set Password
*
* @return bool
*/
public function setPassword($password = "") {
if (!empty($password)) {
$this->password = $password;
return TRUE;
}
return FALSE;
}
/**
* Set Website URL
*
* @return bool
*/
public function setUrl($url = "") {
if (filter_var($url, FILTER_VALIDATE_URL)) {
$this->url = $url;
return TRUE;
}
return FALSE;
}
/**
* Set Username
*
* @return bool
*/
public function setUsername($username = "") {
if (filter_var($username, FILTER_VALIDATE_EMAIL)) {
$this->username = $username;
return TRUE;
}
return FALSE;
}
/**
* Print Response Output
*
* @return int
*/
private function _output($ch){
$result = curl_exec($ch);
if (curl_errno($ch)) {
// @todo: Log errors
if ($this->debug) {
echo 'Error: ' . curl_error($ch);
}
}
else {
if ($this->debug) {
print $result;
}
}
$http_code = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);
return $http_code;
}
/**
* Initialize a CURL Session
*
* @return int
*/
private function _process() {
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $this->url);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 5);
curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/4.0 (site_login)");
// Bug 442432 - New posts are being associated with incorrect accounts/authors
curl_setopt($ch, CURLOPT_REFERER, $this->url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
curl_setopt($ch, CURLOPT_FRESH_CONNECT, TRUE);
curl_setopt($ch, CURLOPT_POST, TRUE);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, TRUE);
curl_setopt($ch, CURLOPT_HEADER, TRUE);
curl_setopt($ch, CURLINFO_HEADER_OUT, TRUE);
switch ($this->account_type) {
case "gerrit":
$post = "username=" . urlencode($this->username) . "&password=" . urlencode($this->password);
break;
default:
$post = "Bugzilla_login=" . urlencode($this->username) . "&Bugzilla_password=" . urlencode($this->password);
break;
}
curl_setopt($ch, CURLOPT_POSTFIELDS, $post);
return $this->_output($ch);
}
}