1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177
|
<?php
/**
* Editor for metadata
*
* @author Andreas Åkre Solberg <andreas@uninett.no>, UNINETT AS.
* @package simpleSAMLphp
*/
class sspmod_metaedit_MetaEditor {
protected function getStandardField($request, &$metadata, $key) {
if (array_key_exists('field_' . $key, $request)) {
$metadata[$key] = $request['field_' . $key];
} else {
if (isset($metadata[$key])) unset($metadata[$key]);
}
}
protected function getEndpointField($request, &$metadata, $key, $binding, $indexed) {
if (array_key_exists('field_' . $key, $request)) {
$e = array(
'Binding' => $binding,
'Location' => $request['field_' . $key]
);
if ($indexed) {
$e['index'] = 0;
}
$metadata[$key] = array($e);
} else {
if (isset($metadata[$key])) unset($metadata[$key]);
}
}
public function formToMeta($request, $metadata = array(), $override = NULL) {
$this->getStandardField($request, $metadata, 'entityid');
$this->getStandardField($request, $metadata, 'name');
$this->getStandardField($request, $metadata, 'description');
$this->getEndpointField($request, $metadata, 'AssertionConsumerService', SAML2_Const::BINDING_HTTP_POST, TRUE);
$this->getEndpointField($request, $metadata, 'SingleLogoutService', SAML2_Const::BINDING_HTTP_REDIRECT, FALSE);
$metadata['updated'] = time();
if ($override) {
foreach($override AS $key => $value) {
$metadata[$key] = $value;
}
}
return $metadata;
}
protected function requireStandardField($request, $key) {
if (!array_key_exists('field_' . $key, $request))
throw new Exception('Required field [' . $key . '] was missing.');
if (empty($request['field_' . $key]))
throw new Exception('Required field [' . $key . '] was empty.');
}
public function checkForm($request) {
$this->requireStandardField($request, 'entityid');
$this->requireStandardField($request, 'name');
}
protected function header($name) {
return '<tr ><td> </td><td class="header">' . $name . '</td></tr>';
}
protected function readonlyDateField($metadata, $key, $name) {
$value = '<span style="color: #aaa">Not set</a>';
if (array_key_exists($key, $metadata))
$value = date('j. F Y, G:i', $metadata[$key]);
return '<tr>
<td class="name">' . $name . '</td>
<td class="data">' . $value . '</td></tr>';
}
protected function readonlyField($metadata, $key, $name) {
$value = '';
if (array_key_exists($key, $metadata))
$value = $metadata[$key];
return '<tr>
<td class="name">' . $name . '</td>
<td class="data">' . htmlspecialchars($value) . '</td></tr>';
}
protected function hiddenField($key, $value) {
return '<input type="hidden" name="' . $key . '" value="' . htmlspecialchars($value) . '" />';
}
protected function flattenLanguageField(&$metadata, $key) {
if (array_key_exists($key, $metadata)) {
if (is_array($metadata[$key])) {
if (isset($metadata[$key]['en'])) {
$metadata[$key] = $metadata[$key]['en'];
} else {
unset($metadata[$key]);
}
}
}
}
protected function standardField($metadata, $key, $name, $textarea = FALSE) {
$value = '';
if (array_key_exists($key, $metadata)) {
$value = htmlspecialchars($metadata[$key]);
}
if ($textarea) {
return '<tr><td class="name">' . $name . '</td><td class="data">
<textarea name="field_' . $key . '" rows="5" cols="50">' . $value . '</textarea></td></tr>';
} else {
return '<tr><td class="name">' . $name . '</td><td class="data">
<input type="text" size="60" name="field_' . $key . '" value="' . $value . '" /></td></tr>';
}
}
protected function endpointField($metadata, $key, $name, $textarea = FALSE) {
$value = '';
if (array_key_exists($key, $metadata)) {
if (is_array($metadata[$key])) {
$value = htmlspecialchars($metadata[$key][0]['Location']);
} else {
$value = htmlspecialchars($metadata[$key]);
}
}
if ($textarea) {
return '<tr><td class="name">' . $name . '</td><td class="data">
<textarea name="field_' . $key . '" rows="5" cols="50">' . $value . '</textarea></td></tr>';
} else {
return '<tr><td class="name">' . $name . '</td><td class="data">
<input type="text" size="60" name="field_' . $key . '" value="' . $value . '" /></td></tr>';
}
}
public function metaToForm($metadata) {
$this->flattenLanguageField($metadata, 'name');
$this->flattenLanguageField($metadata, 'description');
return '<form action="edit.php" method="post">' .
(array_key_exists('entityid', $metadata) ?
$this->hiddenField('was-entityid', $metadata['entityid']) :
'') .
'<div id="tabdiv">' .
'<ul>' .
'<li><a href="#basic">Name and descrition</a></li>' .
'<li><a href="#saml">SAML 2.0</a></li>' .
'</ul>' .
'<div id="basic"><table class="formtable">' .
$this->standardField($metadata, 'entityid', 'EntityID') .
$this->standardField($metadata, 'name', 'Name of service') .
$this->standardField($metadata, 'description', 'Description of service', TRUE) .
$this->readonlyField($metadata, 'owner', 'Owner') .
$this->readonlyDateField($metadata, 'updated', 'Last updated') .
$this->readonlyDateField($metadata, 'expire', 'Expire') .
'</table></div><div id="saml"><table class="formtable">' .
$this->endpointField($metadata, 'AssertionConsumerService', 'AssertionConsumerService endpoint') .
$this->endpointField($metadata, 'SingleLogoutService', 'SingleLogoutService endpoint') .
'</table></div>' .
'</div>' .
'<input type="submit" name="submit" value="Save" style="margin-top: 5px" />' .
'</form>';
}
}
|