Open Journal Systems  3.3.0
SubscriptionSSOPlugin.inc.php
1 <?php
2 
13 import('lib.pkp.classes.plugins.GenericPlugin');
14 
19  function register($category, $path, $mainContextId = null) {
20  $success = parent::register($category, $path, $mainContextId);
21  if (!Config::getVar('general', 'installed') || defined('RUNNING_UPGRADE')) return true;
22  if ($success && $this->getEnabled()) {
23  $this->addLocaleData();
24  HookRegistry::register('LoadHandler',array(&$this, 'loadHandlerCallback'));
25  HookRegistry::register('IssueAction::subscribedUser', array(&$this, 'subscribedUserCallback'));
26  return true;
27  }
28  return $success;
29  }
30 
38  function loadHandlerCallback($hookName, $args) {
39  $request = Application::get()->getRequest();
40  $journal = $request->getJournal();
41  if (!$journal) return false;
42 
43  $incomingParameterName = $this->getSetting($journal->getId(), 'incomingParameterName');
44  // Using $_GET rather than Request because this may be case
45  // sensitive (e.g. differentiating myid from myId)
46  if ($incomingParameterName != '' && isset($_GET[$incomingParameterName])) {
47  $incomingKey = $_GET[$incomingParameterName];
48 
49  // This is an incoming authorization. Contact the remote service.
50  $verificationUrl = $this->getSetting($journal->getId(), 'verificationUrl');
51  $ch = curl_init();
52  curl_setopt($ch, CURLOPT_URL, $verificationUrl . urlencode($incomingKey));
53  curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1) ;
54  curl_setopt($ch, CURLOPT_HEADER, 0);
55  $result = curl_exec($ch);
56  curl_close($ch);
57 
58  // Verify the result.
59  $resultRegexp = $this->getSetting($journal->getId(), 'resultRegexp');
60  if (preg_match($resultRegexp, $result)) {
61  // Successfully validated.
62  $_SESSION['subscriptionSSOTimestamp'] = time();
63  } else {
64  // Failed to validate.
65  unset($_SESSION['subscriptionSSOTimestamp']);
66  $request->redirectUrl($this->getSetting($journal->getId(), 'redirectUrl'));
67  }
68  }
69  return false;
70  }
71 
79  function subscribedUserCallback($hookName, $args) {
80  // Exclude the index and issue pages.
81  $request = Application::get()->getRequest();
82  if (in_array($request->getRequestedPage(), array('', 'index', 'search'))) return false;
83  // Capture issue galley requests, but not e.g. issue archive
84  if ($request->getRequestedPage() == 'issue' && count($request->getRequestedArgs()) != 2) return false;
85 
86  // Permit an abstract view.
87  if ($request->getRequestedPage() == 'article' && $request->getRequestedOp() == 'view' && count($request->getRequestedArgs())==1) return false;
88 
89  $journal = $args[1];
90  $result =& $args[4]; // Reference required
91  $result = isset($_SESSION['subscriptionSSOTimestamp']) && $_SESSION['subscriptionSSOTimestamp'] + ($this->getSetting($journal->getId(), 'hoursValid') * 3600) > time();
92  if (!$result) {
93  // If we're not subscribed, redirect.
94  $request->redirectUrl($this->getSetting($journal->getId(), 'redirectUrl') . '?redirectUrl=' . urlencode($request->getRequestUrl()));
95  }
96  }
97 
101  function getActions($request, $actionArgs) {
102  $router = $request->getRouter();
103  import('lib.pkp.classes.linkAction.request.AjaxModal');
104  return array_merge(
105  $this->getEnabled()?array(
106  new LinkAction(
107  'settings',
108  new AjaxModal(
109  $router->url($request, null, null, 'manage', null, array_merge($actionArgs, array('verb' => 'settings'))),
110  $this->getDisplayName()
111  ),
112  __('manager.plugins.settings'),
113  null
114  ),
115  ):array(),
116  parent::getActions($request, $actionArgs)
117  );
118  }
119 
123  function manage($args, $request) {
124  $context = $request->getContext();
125  $templateMgr = TemplateManager::getManager($request);
126 
127  switch ($request->getUserVar('verb')) {
128  case 'settings':
129  $this->import('SubscriptionSSOSettingsForm');
130  $form = new SubscriptionSSOSettingsForm($this, $context->getId());
131  if ($request->getUserVar('save')) {
132  $form->readInputData();
133  if ($form->validate()) {
134  $form->execute();
135  return new JSONMessage();
136  }
137  } else {
138  $form->initData();
139  }
140  return new JSONMessage(true, $form->fetch($request));
141  }
142  return parent::manage($args, $request);
143  }
144 
148  function getDisplayName() {
149  return __('plugins.generic.subscriptionSSO.name');
150  }
151 
155  function getDescription() {
156  return __('plugins.generic.subscriptionSSO.description');
157  }
158 }
159 
SubscriptionSSOPlugin\manage
manage($args, $request)
Definition: SubscriptionSSOPlugin.inc.php:123
SubscriptionSSOPlugin\getActions
getActions($request, $actionArgs)
Definition: SubscriptionSSOPlugin.inc.php:101
SubscriptionSSOPlugin\getDisplayName
getDisplayName()
Definition: SubscriptionSSOPlugin.inc.php:148
SubscriptionSSOSettingsForm
Form for journal managers to modify subscription SSO plugin settings.
Definition: SubscriptionSSOSettingsForm.inc.php:16
Plugin\getEnabled
getEnabled()
Definition: Plugin.inc.php:868
JSONMessage
Class to represent a JSON (Javascript Object Notation) message.
Definition: JSONMessage.inc.php:18
Plugin\getSetting
getSetting($contextId, $name)
Definition: Plugin.inc.php:473
Config\getVar
static getVar($section, $key, $default=null)
Definition: Config.inc.php:35
AjaxModal
A modal that retrieves its content from via AJAX.
Definition: AjaxModal.inc.php:18
LinkAction
Base class defining an action that can be performed by the user in the user interface.
Definition: LinkAction.inc.php:22
SubscriptionSSOPlugin\loadHandlerCallback
loadHandlerCallback($hookName, $args)
Definition: SubscriptionSSOPlugin.inc.php:38
PKPTemplateManager\getManager
static & getManager($request=null)
Definition: PKPTemplateManager.inc.php:1239
SubscriptionSSOPlugin\subscribedUserCallback
subscribedUserCallback($hookName, $args)
Definition: SubscriptionSSOPlugin.inc.php:79
SubscriptionSSOPlugin
Definition: SubscriptionSSOPlugin.inc.php:15
Plugin\$request
$request
Definition: Plugin.inc.php:68
Plugin\addLocaleData
addLocaleData($locale=null)
Definition: Plugin.inc.php:454
HookRegistry\register
static register($hookName, $callback, $hookSequence=HOOK_SEQUENCE_NORMAL)
Definition: HookRegistry.inc.php:70
PKPApplication\get
static get()
Definition: PKPApplication.inc.php:235
SubscriptionSSOPlugin\getDescription
getDescription()
Definition: SubscriptionSSOPlugin.inc.php:155
GenericPlugin
Abstract class for generic plugins.
Definition: GenericPlugin.inc.php:18