Linux anchor 4.4.0-210-generic #242-Ubuntu SMP Fri Apr 16 09:57:56 UTC 2021 x86_64
Apache/2.4.18 (Ubuntu)
Server IP : 10.10.100.4 & Your IP : 216.73.217.150
Domains :
Cant Read [ /etc/named.conf ]
User : www-data
Terminal
Auto Root
Create File
Create Folder
Localroot Suggester
Backdoor Destroyer
Readme
/
var /
www /
wiki.bernardino.org /
includes /
api /
Delete
Unzip
Name
Size
Permission
Date
Action
i18n
[ DIR ]
drwxr-xr-x
2016-11-28 20:20
ApiAMCreateAccount.php
4.17
KB
-rw-r--r--
2016-11-28 20:20
ApiAuthManagerHelper.php
12.14
KB
-rw-r--r--
2016-11-28 20:20
ApiBase.php
84.45
KB
-rw-r--r--
2016-11-28 20:20
ApiBlock.php
5.16
KB
-rw-r--r--
2016-11-28 20:20
ApiCSPReport.php
6.34
KB
-rw-r--r--
2016-11-28 20:20
ApiChangeAuthenticationData.php
2.95
KB
-rw-r--r--
2016-11-28 20:20
ApiCheckToken.php
2.24
KB
-rw-r--r--
2016-11-28 20:20
ApiClearHasMsg.php
1.62
KB
-rw-r--r--
2016-11-28 20:20
ApiClientLogin.php
4.39
KB
-rw-r--r--
2016-11-28 20:20
ApiComparePages.php
3.51
KB
-rw-r--r--
2016-11-28 20:20
ApiContinuationManager.php
8.03
KB
-rw-r--r--
2016-11-28 20:20
ApiDelete.php
6.38
KB
-rw-r--r--
2016-11-28 20:20
ApiDisabled.php
1.42
KB
-rw-r--r--
2016-11-28 20:20
ApiEditPage.php
18.94
KB
-rw-r--r--
2016-11-28 20:20
ApiEmailUser.php
2.79
KB
-rw-r--r--
2016-11-28 20:20
ApiErrorFormatter.php
9.31
KB
-rw-r--r--
2016-11-28 20:20
ApiExpandTemplates.php
7.05
KB
-rw-r--r--
2016-11-28 20:20
ApiFeedContributions.php
6.51
KB
-rw-r--r--
2016-11-28 20:20
ApiFeedRecentChanges.php
5.32
KB
-rw-r--r--
2016-11-28 20:20
ApiFeedWatchlist.php
8.96
KB
-rw-r--r--
2016-11-28 20:20
ApiFileRevert.php
3.86
KB
-rw-r--r--
2016-11-28 20:20
ApiFormatBase.php
8.3
KB
-rw-r--r--
2016-11-28 20:20
ApiFormatDbg.php
1.77
KB
-rw-r--r--
2010-12-22 21:52
ApiFormatDump.php
1.79
KB
-rw-r--r--
2011-01-10 23:36
ApiFormatFeedWrapper.php
3.51
KB
-rw-r--r--
2016-11-28 20:20
ApiFormatJson.php
3.86
KB
-rw-r--r--
2016-11-28 20:20
ApiFormatNone.php
1.07
KB
-rw-r--r--
2016-11-28 20:20
ApiFormatPhp.php
2.47
KB
-rw-r--r--
2016-11-28 20:20
ApiFormatRaw.php
3.02
KB
-rw-r--r--
2016-11-28 20:20
ApiFormatTxt.php
1.75
KB
-rw-r--r--
2010-12-22 21:52
ApiFormatWddx.php
4.07
KB
-rw-r--r--
2010-12-22 21:52
ApiFormatXml.php
8.96
KB
-rw-r--r--
2016-11-28 20:20
ApiFormatYaml.php
1.37
KB
-rw-r--r--
2011-04-18 13:42
ApiHelp.php
26.17
KB
-rw-r--r--
2016-11-28 20:20
ApiHelpParamValueMessage.php
1.95
KB
-rw-r--r--
2016-11-28 20:20
ApiImageRotate.php
5.19
KB
-rw-r--r--
2016-11-28 20:20
ApiImport.php
4.95
KB
-rw-r--r--
2016-11-28 20:20
ApiLinkAccount.php
3.83
KB
-rw-r--r--
2016-11-28 20:20
ApiLogin.php
9.22
KB
-rw-r--r--
2016-11-28 20:20
ApiLogout.php
2.04
KB
-rw-r--r--
2016-11-28 20:20
ApiMain.php
55.81
KB
-rw-r--r--
2016-11-28 20:20
ApiManageTags.php
3.24
KB
-rw-r--r--
2016-11-28 20:20
ApiMergeHistory.php
3.75
KB
-rw-r--r--
2016-11-28 20:20
ApiMessage.php
5.64
KB
-rw-r--r--
2016-11-28 20:20
ApiModuleManager.php
8.31
KB
-rw-r--r--
2016-11-28 20:20
ApiMove.php
7.22
KB
-rw-r--r--
2016-11-28 20:20
ApiOpenSearch.php
11.74
KB
-rw-r--r--
2016-11-28 20:20
ApiOptions.php
5.25
KB
-rw-r--r--
2016-11-28 20:20
ApiPageSet.php
44.37
KB
-rw-r--r--
2016-11-28 20:20
ApiParamInfo.php
14.88
KB
-rw-r--r--
2016-11-28 20:20
ApiParse.php
26.07
KB
-rw-r--r--
2016-11-28 20:20
ApiPatrol.php
2.99
KB
-rw-r--r--
2016-11-28 20:20
ApiProtect.php
5.54
KB
-rw-r--r--
2016-11-28 20:20
ApiPurge.php
5.83
KB
-rw-r--r--
2016-11-28 20:20
ApiQuery.php
17.13
KB
-rw-r--r--
2016-11-28 20:20
ApiQueryAllCategories.php
5.79
KB
-rw-r--r--
2016-11-28 20:20
ApiQueryAllDeletedRevisions.php
14.65
KB
-rw-r--r--
2016-11-28 20:20
ApiQueryAllImages.php
11.64
KB
-rw-r--r--
2016-11-28 20:20
ApiQueryAllLinks.php
8.69
KB
-rw-r--r--
2016-11-28 20:20
ApiQueryAllMessages.php
7.26
KB
-rw-r--r--
2016-11-28 20:20
ApiQueryAllPages.php
9.65
KB
-rw-r--r--
2016-11-28 20:20
ApiQueryAllRevisions.php
8.78
KB
-rw-r--r--
2016-11-28 20:20
ApiQueryAllUsers.php
11.5
KB
-rw-r--r--
2016-11-28 20:20
ApiQueryAllimages.php
8.42
KB
-rw-r--r--
2011-11-28 16:52
ApiQueryAllmessages.php
7.59
KB
-rw-r--r--
2011-11-28 16:52
ApiQueryAllpages.php
10.24
KB
-rw-r--r--
2011-11-28 16:52
ApiQueryAuthManagerInfo.php
4.11
KB
-rw-r--r--
2016-11-28 20:20
ApiQueryBacklinks.php
17.24
KB
-rw-r--r--
2016-11-28 20:20
ApiQueryBacklinksprop.php
12.31
KB
-rw-r--r--
2016-11-28 20:20
ApiQueryBase.php
17.33
KB
-rw-r--r--
2016-11-28 20:20
ApiQueryBlocks.php
10.29
KB
-rw-r--r--
2016-11-28 20:20
ApiQueryCategories.php
6.53
KB
-rw-r--r--
2016-11-28 20:20
ApiQueryCategoryInfo.php
3.29
KB
-rw-r--r--
2016-11-28 20:20
ApiQueryCategoryMembers.php
11.99
KB
-rw-r--r--
2016-11-28 20:20
ApiQueryContributors.php
7.5
KB
-rw-r--r--
2016-11-28 20:20
ApiQueryDeletedRevisions.php
9.64
KB
-rw-r--r--
2016-11-28 20:20
ApiQueryDeletedrevs.php
16.42
KB
-rw-r--r--
2016-11-28 20:20
ApiQueryDisabled.php
1.4
KB
-rw-r--r--
2016-11-28 20:20
ApiQueryDuplicateFiles.php
5.38
KB
-rw-r--r--
2016-11-28 20:20
ApiQueryExtLinksUsage.php
5.94
KB
-rw-r--r--
2016-11-28 20:20
ApiQueryExternalLinks.php
3.79
KB
-rw-r--r--
2016-11-28 20:20
ApiQueryFileRepoInfo.php
3.2
KB
-rw-r--r--
2016-11-28 20:20
ApiQueryFilearchive.php
9.18
KB
-rw-r--r--
2016-11-28 20:20
ApiQueryGeneratorBase.php
3.27
KB
-rw-r--r--
2016-11-28 20:20
ApiQueryIWBacklinks.php
5.62
KB
-rw-r--r--
2016-11-28 20:20
ApiQueryIWLinks.php
5.12
KB
-rw-r--r--
2016-11-28 20:20
ApiQueryImageInfo.php
25.98
KB
-rw-r--r--
2016-11-28 20:20
ApiQueryImages.php
4.88
KB
-rw-r--r--
2016-11-28 20:20
ApiQueryInfo.php
27.38
KB
-rw-r--r--
2016-11-28 20:20
ApiQueryLangBacklinks.php
5.55
KB
-rw-r--r--
2016-11-28 20:20
ApiQueryLangLinks.php
5.44
KB
-rw-r--r--
2016-11-28 20:20
ApiQueryLinks.php
6.63
KB
-rw-r--r--
2016-11-28 20:20
ApiQueryLogEvents.php
14.02
KB
-rw-r--r--
2016-11-28 20:20
ApiQueryMyStashedFiles.php
4.04
KB
-rw-r--r--
2016-11-28 20:20
ApiQueryPagePropNames.php
2.96
KB
-rw-r--r--
2016-11-28 20:20
ApiQueryPageProps.php
3.13
KB
-rw-r--r--
2016-11-28 20:20
ApiQueryPagesWithProp.php
4.84
KB
-rw-r--r--
2016-11-28 20:20
ApiQueryPrefixSearch.php
3.63
KB
-rw-r--r--
2016-11-28 20:20
ApiQueryProtectedTitles.php
6.83
KB
-rw-r--r--
2016-11-28 20:20
ApiQueryQueryPage.php
4.6
KB
-rw-r--r--
2016-11-28 20:20
ApiQueryRandom.php
6.56
KB
-rw-r--r--
2016-11-28 20:20
ApiQueryRecentChanges.php
21.5
KB
-rw-r--r--
2016-11-28 20:20
ApiQueryRevisions.php
14.46
KB
-rw-r--r--
2016-11-28 20:20
ApiQueryRevisionsBase.php
15.64
KB
-rw-r--r--
2016-11-28 20:20
ApiQuerySearch.php
10.87
KB
-rw-r--r--
2016-11-28 20:20
ApiQuerySiteinfo.php
26.94
KB
-rw-r--r--
2016-11-28 20:20
ApiQueryStashImageInfo.php
4.25
KB
-rw-r--r--
2016-11-28 20:20
ApiQueryTags.php
4.93
KB
-rw-r--r--
2016-11-28 20:20
ApiQueryTokens.php
4
KB
-rw-r--r--
2016-11-28 20:20
ApiQueryUserContributions.php
17.06
KB
-rw-r--r--
2016-11-28 20:20
ApiQueryUserInfo.php
9.93
KB
-rw-r--r--
2016-11-28 20:20
ApiQueryUsers.php
10.21
KB
-rw-r--r--
2016-11-28 20:20
ApiQueryWatchlist.php
15.41
KB
-rw-r--r--
2016-11-28 20:20
ApiQueryWatchlistRaw.php
5.74
KB
-rw-r--r--
2016-11-28 20:20
ApiRemoveAuthenticationData.php
3.29
KB
-rw-r--r--
2016-11-28 20:20
ApiResetPassword.php
3.89
KB
-rw-r--r--
2016-11-28 20:20
ApiResult.php
36.21
KB
-rw-r--r--
2016-11-28 20:20
ApiRevisionDelete.php
6.42
KB
-rw-r--r--
2016-11-28 20:20
ApiRollback.php
6.02
KB
-rw-r--r--
2016-11-28 20:20
ApiRsd.php
4.71
KB
-rw-r--r--
2016-11-28 20:20
ApiSerializable.php
1.55
KB
-rw-r--r--
2016-11-28 20:20
ApiSetNotificationTimestamp.php
7.01
KB
-rw-r--r--
2016-11-28 20:20
ApiStashEdit.php
15.04
KB
-rw-r--r--
2016-11-28 20:20
ApiTag.php
4.6
KB
-rw-r--r--
2016-11-28 20:20
ApiTokens.php
3.11
KB
-rw-r--r--
2016-11-28 20:20
ApiUnblock.php
3.52
KB
-rw-r--r--
2016-11-28 20:20
ApiUndelete.php
3.9
KB
-rw-r--r--
2016-11-28 20:20
ApiUpload.php
30.6
KB
-rw-r--r--
2016-11-28 20:20
ApiUserrights.php
3.92
KB
-rw-r--r--
2016-11-28 20:20
ApiWatch.php
5.3
KB
-rw-r--r--
2016-11-28 20:20
SearchApi.php
6.16
KB
-rw-r--r--
2016-11-28 20:20
Save
Rename
<?php /** * Copyright © 2016 Brad Jorsch <bjorsch@wikimedia.org> * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * http://www.gnu.org/copyleft/gpl.html * * @file * @since 1.27 */ use MediaWiki\Auth\AuthManager; use MediaWiki\Auth\AuthenticationRequest; use MediaWiki\Auth\AuthenticationResponse; use MediaWiki\Auth\CreateFromLoginAuthenticationRequest; use MediaWiki\Logger\LoggerFactory; /** * Helper class for AuthManager-using API modules. Intended for use via * composition. * * @ingroup API */ class ApiAuthManagerHelper { /** @var ApiBase API module, for context and parameters */ private $module; /** @var string Message output format */ private $messageFormat; /** * @param ApiBase $module API module, for context and parameters */ public function __construct( ApiBase $module ) { $this->module = $module; $params = $module->extractRequestParams(); $this->messageFormat = isset( $params['messageformat'] ) ? $params['messageformat'] : 'wikitext'; } /** * Static version of the constructor, for chaining * @param ApiBase $module API module, for context and parameters * @return ApiAuthManagerHelper */ public static function newForModule( ApiBase $module ) { return new self( $module ); } /** * Format a message for output * @param array &$res Result array * @param string $key Result key * @param Message $message */ private function formatMessage( array &$res, $key, Message $message ) { switch ( $this->messageFormat ) { case 'none': break; case 'wikitext': $res[$key] = $message->setContext( $this->module )->text(); break; case 'html': $res[$key] = $message->setContext( $this->module )->parseAsBlock(); $res[$key] = Parser::stripOuterParagraph( $res[$key] ); break; case 'raw': $res[$key] = [ 'key' => $message->getKey(), 'params' => $message->getParams(), ]; ApiResult::setIndexedTagName( $res[$key]['params'], 'param' ); break; } } /** * Call $manager->securitySensitiveOperationStatus() * @param string $operation Operation being checked. * @throws UsageException */ public function securitySensitiveOperation( $operation ) { $status = AuthManager::singleton()->securitySensitiveOperationStatus( $operation ); switch ( $status ) { case AuthManager::SEC_OK: return; case AuthManager::SEC_REAUTH: $this->module->dieUsage( 'You have not authenticated recently in this session, please reauthenticate.', 'reauthenticate' ); case AuthManager::SEC_FAIL: $this->module->dieUsage( 'This action is not available as your identify cannot be verified.', 'cannotreauthenticate' ); default: throw new UnexpectedValueException( "Unknown status \"$status\"" ); } } /** * Filter out authentication requests by class name * @param AuthenticationRequest[] $reqs Requests to filter * @param string[] $blacklist Class names to remove * @return AuthenticationRequest[] */ public static function blacklistAuthenticationRequests( array $reqs, array $blacklist ) { if ( $blacklist ) { $blacklist = array_flip( $blacklist ); $reqs = array_filter( $reqs, function ( $req ) use ( $blacklist ) { return !isset( $blacklist[get_class( $req )] ); } ); } return $reqs; } /** * Fetch and load the AuthenticationRequests for an action * @param string $action One of the AuthManager::ACTION_* constants * @return AuthenticationRequest[] */ public function loadAuthenticationRequests( $action ) { $params = $this->module->extractRequestParams(); $manager = AuthManager::singleton(); $reqs = $manager->getAuthenticationRequests( $action, $this->module->getUser() ); // Filter requests, if requested to do so $wantedRequests = null; if ( isset( $params['requests'] ) ) { $wantedRequests = array_flip( $params['requests'] ); } elseif ( isset( $params['request'] ) ) { $wantedRequests = [ $params['request'] => true ]; } if ( $wantedRequests !== null ) { $reqs = array_filter( $reqs, function ( $req ) use ( $wantedRequests ) { return isset( $wantedRequests[$req->getUniqueId()] ); } ); } // Collect the fields for all the requests $fields = []; $sensitive = []; foreach ( $reqs as $req ) { $info = (array)$req->getFieldInfo(); $fields += $info; $sensitive += array_filter( $info, function ( $opts ) { return !empty( $opts['sensitive'] ); } ); } // Extract the request data for the fields and mark those request // parameters as used $data = array_intersect_key( $this->module->getRequest()->getValues(), $fields ); $this->module->getMain()->markParamsUsed( array_keys( $data ) ); if ( $sensitive ) { try { $this->module->requirePostedParameters( array_keys( $sensitive ), 'noprefix' ); } catch ( UsageException $ex ) { // Make this a warning for now, upgrade to an error in 1.29. $this->module->setWarning( $ex->getMessage() ); $this->module->logFeatureUsage( $this->module->getModuleName() . '-params-in-query-string' ); } } return AuthenticationRequest::loadRequestsFromSubmission( $reqs, $data ); } /** * Format an AuthenticationResponse for return * @param AuthenticationResponse $res * @return array */ public function formatAuthenticationResponse( AuthenticationResponse $res ) { $ret = [ 'status' => $res->status, ]; if ( $res->status === AuthenticationResponse::PASS && $res->username !== null ) { $ret['username'] = $res->username; } if ( $res->status === AuthenticationResponse::REDIRECT ) { $ret['redirecttarget'] = $res->redirectTarget; if ( $res->redirectApiData !== null ) { $ret['redirectdata'] = $res->redirectApiData; } } if ( $res->status === AuthenticationResponse::REDIRECT || $res->status === AuthenticationResponse::UI || $res->status === AuthenticationResponse::RESTART ) { $ret += $this->formatRequests( $res->neededRequests ); } if ( $res->status === AuthenticationResponse::FAIL || $res->status === AuthenticationResponse::UI || $res->status === AuthenticationResponse::RESTART ) { $this->formatMessage( $ret, 'message', $res->message ); } if ( $res->status === AuthenticationResponse::FAIL || $res->status === AuthenticationResponse::RESTART ) { $this->module->getRequest()->getSession()->set( 'ApiAuthManagerHelper::createRequest', $res->createRequest ); $ret['canpreservestate'] = $res->createRequest !== null; } else { $this->module->getRequest()->getSession()->remove( 'ApiAuthManagerHelper::createRequest' ); } return $ret; } /** * Logs successful or failed authentication. * @param string|AuthenticationResponse $result Response or error message * @param string $event Event type (e.g. 'accountcreation') */ public function logAuthenticationResult( $event, $result ) { if ( is_string( $result ) ) { $status = Status::newFatal( $result ); } elseif ( $result->status === AuthenticationResponse::PASS ) { $status = Status::newGood(); } elseif ( $result->status === AuthenticationResponse::FAIL ) { $status = Status::newFatal( $result->message ); } else { return; } $module = $this->module->getModuleName(); LoggerFactory::getInstance( 'authevents' )->info( "$module API attempt", [ 'event' => $event, 'status' => $status, 'module' => $module, ] ); } /** * Fetch the preserved CreateFromLoginAuthenticationRequest, if any * @return CreateFromLoginAuthenticationRequest|null */ public function getPreservedRequest() { $ret = $this->module->getRequest()->getSession()->get( 'ApiAuthManagerHelper::createRequest' ); return $ret instanceof CreateFromLoginAuthenticationRequest ? $ret : null; } /** * Format an array of AuthenticationRequests for return * @param AuthenticationRequest[] $reqs * @return array Will have a 'requests' key, and also 'fields' if $module's * params include 'mergerequestfields'. */ public function formatRequests( array $reqs ) { $params = $this->module->extractRequestParams(); $mergeFields = !empty( $params['mergerequestfields'] ); $ret = [ 'requests' => [] ]; foreach ( $reqs as $req ) { $describe = $req->describeCredentials(); $reqInfo = [ 'id' => $req->getUniqueId(), 'metadata' => $req->getMetadata() + [ ApiResult::META_TYPE => 'assoc' ], ]; switch ( $req->required ) { case AuthenticationRequest::OPTIONAL: $reqInfo['required'] = 'optional'; break; case AuthenticationRequest::REQUIRED: $reqInfo['required'] = 'required'; break; case AuthenticationRequest::PRIMARY_REQUIRED: $reqInfo['required'] = 'primary-required'; break; } $this->formatMessage( $reqInfo, 'provider', $describe['provider'] ); $this->formatMessage( $reqInfo, 'account', $describe['account'] ); if ( !$mergeFields ) { $reqInfo['fields'] = $this->formatFields( (array)$req->getFieldInfo() ); } $ret['requests'][] = $reqInfo; } if ( $mergeFields ) { $fields = AuthenticationRequest::mergeFieldInfo( $reqs ); $ret['fields'] = $this->formatFields( $fields ); } return $ret; } /** * Clean up a field array for output * @param ApiBase $module For context and parameters 'mergerequestfields' * and 'messageformat' * @param array $fields * @return array */ private function formatFields( array $fields ) { static $copy = [ 'type' => true, 'value' => true, ]; $module = $this->module; $retFields = []; foreach ( $fields as $name => $field ) { $ret = array_intersect_key( $field, $copy ); if ( isset( $field['options'] ) ) { $ret['options'] = array_map( function ( $msg ) use ( $module ) { return $msg->setContext( $module )->plain(); }, $field['options'] ); ApiResult::setArrayType( $ret['options'], 'assoc' ); } $this->formatMessage( $ret, 'label', $field['label'] ); $this->formatMessage( $ret, 'help', $field['help'] ); $ret['optional'] = !empty( $field['optional'] ); $ret['sensitive'] = !empty( $field['sensitive'] ); $retFields[$name] = $ret; } ApiResult::setArrayType( $retFields, 'assoc' ); return $retFields; } /** * Fetch the standard parameters this helper recognizes * @param string $action AuthManager action * @param string $param... Parameters to use * @return array */ public static function getStandardParams( $action, $param /* ... */ ) { $params = [ 'requests' => [ ApiBase::PARAM_TYPE => 'string', ApiBase::PARAM_ISMULTI => true, ApiBase::PARAM_HELP_MSG => [ 'api-help-authmanagerhelper-requests', $action ], ], 'request' => [ ApiBase::PARAM_TYPE => 'string', ApiBase::PARAM_REQUIRED => true, ApiBase::PARAM_HELP_MSG => [ 'api-help-authmanagerhelper-request', $action ], ], 'messageformat' => [ ApiBase::PARAM_DFLT => 'wikitext', ApiBase::PARAM_TYPE => [ 'html', 'wikitext', 'raw', 'none' ], ApiBase::PARAM_HELP_MSG => 'api-help-authmanagerhelper-messageformat', ], 'mergerequestfields' => [ ApiBase::PARAM_DFLT => false, ApiBase::PARAM_HELP_MSG => 'api-help-authmanagerhelper-mergerequestfields', ], 'preservestate' => [ ApiBase::PARAM_DFLT => false, ApiBase::PARAM_HELP_MSG => 'api-help-authmanagerhelper-preservestate', ], 'returnurl' => [ ApiBase::PARAM_TYPE => 'string', ApiBase::PARAM_HELP_MSG => 'api-help-authmanagerhelper-returnurl', ], 'continue' => [ ApiBase::PARAM_DFLT => false, ApiBase::PARAM_HELP_MSG => 'api-help-authmanagerhelper-continue', ], ]; $ret = []; $wantedParams = func_get_args(); array_shift( $wantedParams ); foreach ( $wantedParams as $name ) { if ( isset( $params[$name] ) ) { $ret[$name] = $params[$name]; } } return $ret; } }