| <?php |
| /** |
| * ***************************************************************************** |
| * Copyright (c) 2016 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 implementation |
| * ***************************************************************************** |
| */ |
| require_once ('lib/eclipseussblob.class.php'); |
| |
| /** |
| * CommitterPaperwork class |
| * |
| * Usage example: |
| * |
| * include_once('committerpaperwork.class.php'); |
| * $CommitterPaperwork = new CommitterPaperwork(); |
| * $CommitterPaperwork->loginSSO(); |
| * |
| * @author chrisguindon |
| */ |
| class CommitterPaperwork extends EclipseUSSBlob { |
| |
| private $data = array(); |
| |
| /** |
| * Class constructor |
| */ |
| function __construct(App $App = NULL) { |
| parent::__construct($App); |
| } |
| |
| /** |
| * Create committer_paperwork record (POST) |
| * |
| * @param string $username |
| * @param array $data |
| */ |
| public function createCommitterPaperwork($username = NULL, $data = array()) { |
| return $this->post('foundation/paperwork/' . $username, json_encode($data)); |
| } |
| |
| /** |
| * Delete CommitterPaperwork (DELETE) |
| * |
| * @param string $username |
| * @param unknown $id |
| */ |
| public function deleteCommitterPaperwork($username = "", $id = "", $etag = "") { |
| $response = $this->delete('foundation/paperwork/' . $username . '/' . $id); |
| $this->unsetHeader('If-Match'); |
| return $response; |
| } |
| |
| /** |
| * Retrieve committer_paperwork (GET) |
| * |
| * @param string $username |
| * @param string $id |
| */ |
| public function retrieveCommitterPaperwork($username = "", $id = "", $etag = "") { |
| |
| if (!empty($etag)) { |
| $this->setHeader(array( |
| 'If-Match' => $etag |
| )); |
| } |
| |
| $response = $this->get('foundation/paperwork/' . $username . '/' . $id); |
| if (isset($response->code) && $response->code == 200) { |
| $data = json_decode($response->body); |
| $this->data[$data->id] = $data; |
| } |
| |
| $this->unsetHeader('If-Match'); |
| return $response; |
| } |
| |
| /** |
| * Update committer paperwork record |
| * @param unknown $username |
| * @param unknown $id |
| * @param array $data |
| * @param string $etag |
| */ |
| public function updateCommitterPaperwork($username = NULL, $id = NULL, $data = array(), $etag = "") { |
| |
| $this->setHeader(array( |
| 'If-Match' => '"' . $etag . '"', |
| )); |
| |
| $response = $this->put('foundation/paperwork/' . $username . '/' . $id, json_encode($data)); |
| $this->unsetHeader('If-Match'); |
| return $response; |
| } |
| |
| /** |
| * Fetch commiter Paperwork index |
| * |
| * @param unknown $username |
| * @param array $params |
| * |
| * @return array |
| */ |
| public function indexCommitterPaperwork($username = NULL, $params = array()) { |
| |
| $url = 'foundation/paperwork'; |
| if (!is_null($username) && is_string($username)) { |
| $url .= '/' . $username; |
| } |
| |
| $query = http_build_query($params); |
| $response = $this->get($url . '?' . $query); |
| return $response; |
| } |
| |
| /** |
| * Fetch all Committer Paperwork index |
| * |
| * @param unknown $username |
| * @param array $params |
| * |
| * @return array |
| */ |
| public function indexAllCommitterPaperwork($username = NULL, $params = array()) { |
| |
| $data = $this->indexCommitterPaperwork($username, $params); |
| |
| $return = array(); |
| $return[] = $data; |
| if (!isset($data->error) && !empty($data->body) && $data) { |
| while ($data = $this->_getNextPage($data)) { |
| $return[] = $data; |
| } |
| } |
| return $return; |
| } |
| |
| /** |
| * Start the committer provisioning process. (GET) |
| * |
| * @param string $username |
| * @param int $id |
| */ |
| public function targetedActionStartProvisioning($username = NULL, $id = "", $body = array()) { |
| return $this->post('foundation/paperwork/' . $username . '/provisioning/' . $id, json_encode($body)); |
| } |
| |
| /** |
| * Retire a committer from a specific project. (GET) |
| * |
| * @param string $username |
| * @param int $id |
| */ |
| public function targetedActionRetireCommitter($username = NULL, $body = array()) { |
| return $this->post('foundation/paperwork/' . $username . '/retire', json_encode($body)); |
| } |
| |
| /** |
| * Validate a username |
| * |
| * @param string $username |
| * |
| * @return bool |
| */ |
| function validateCommitterPaperworkUsername($username) { |
| if (empty($username) || !is_string($username)) { |
| return FALSE; |
| } |
| |
| // Validate that the username is in LDAP |
| require_once("/home/data/httpd/eclipse-php-classes/system/ldapconnection.class.php"); |
| $LDAPConnection = new LDAPConnection(); |
| $dn = $LDAPConnection->getDNFromUID($username); |
| |
| if (empty($dn)) { |
| return FALSE; |
| } |
| |
| return TRUE; |
| } |
| |
| /** |
| * Validate an id |
| * |
| * @param string $id |
| * |
| * @return bool |
| */ |
| function validateCommitterPaperworkId($id) { |
| $id = filter_var($id, FILTER_VALIDATE_INT); |
| if (empty($id) && !is_int($id) && $id !== 0) { |
| return FALSE; |
| } |
| return TRUE; |
| } |
| |
| /** |
| * Validate an etag |
| * |
| * @param string $etag |
| * |
| * @return bool |
| */ |
| function validateCommitterPaperworkEtag($etag) { |
| if (empty($etag) || !is_string($etag)) { |
| return FALSE; |
| } |
| return TRUE; |
| } |
| |
| /** |
| * Validate a page number |
| * |
| * @param int $page |
| * |
| * @return bool |
| */ |
| function validateCommitterPaperworkPage($page) { |
| if (!is_int($page)) { |
| return FALSE; |
| } |
| return TRUE; |
| } |
| |
| /** |
| * Validate a pagesize |
| * |
| * @param string $pagesize |
| * |
| * @return bool |
| */ |
| function validateCommitterPaperworkPagesize($pagesize) { |
| if (!is_int($pagesize) || $pagesize > 100) { |
| return FALSE; |
| } |
| |
| return $pagesize; |
| } |
| |
| /** |
| * Validate fields |
| * |
| * @param array $data |
| * |
| * @return bool |
| */ |
| function validateCommitterPaperworkFields($data = array()) { |
| |
| // If there are no parameters passed this is still valid |
| // but we can quit here |
| if (empty($data) || !isset($data['parameters'])) { |
| return TRUE; |
| } |
| |
| $float_fields = array( |
| 'id', |
| 'election_nid', |
| 'election_status', |
| 'committer_paperwork_nid', |
| 'committer_paperwork_status', |
| 'spec_project_working_group' |
| ); |
| |
| $string_fields = array( |
| 'project_id', |
| 'forge', |
| ); |
| |
| foreach ($data['parameters'] as $data_field_name => $field_value) { |
| // Verify the the field name exist in the float and string fields |
| if (!in_array($data_field_name, $float_fields) && !in_array($data_field_name, $string_fields)) { |
| return FALSE; |
| } |
| |
| foreach ($float_fields as $float_field_name) { |
| // If the default field name exist in the data array, |
| // Make sure it validates with the appropriate filter |
| if (isset($data[$float_field_name]) && filter_var($data[$float_field_name], FILTER_VALIDATE_FLOAT) === FALSE) { |
| return FALSE; |
| } |
| } |
| |
| // Making sure we are dealing with strings |
| foreach ($string_fields as $string_field_name) { |
| if (isset($data[$string_field_name]) && !is_string($data[$string_field_name])) { |
| return FALSE; |
| } |
| } |
| } |
| return TRUE; |
| } |
| } |