case 'IDF_Project::created':␊ |
$plug->processProjectCreate($params['project']);␊ |
break;␊ |
case 'IDF_Project::membershipsUpdated':␊ |
$plug->processMembershipsUpdated($params['project']);␊ |
break;␊ |
case 'IDF_Project::preDelete':␊ |
$plug->processProjectDelete($params['project']);␊ |
break;␊ |
|
* 4) write monotonerc␊ |
* 5) add the database as new local server in the usher configuration␊ |
* 6) reload the running usher instance so it acknowledges the new server␊ |
* 7) create read-/write-permissions for the project and add all public␊ |
* keys to the project␊ |
*␊ |
* The initial right setup happens in processMembershipsUpdated()␊ |
*␊ |
* @param IDF_Project␊ |
*/␊ |
|
// step 6) reload usher to pick up the new configuration␊ |
//␊ |
IDF_Scm_Monotone_Usher::reload();␊ |
}␊ |
␊ |
/**␊ |
* Updates the read / write permissions for the monotone database␊ |
*␊ |
* @param IDF_Project␊ |
*/␊ |
public function processMembershipsUpdated($project)␊ |
{␊ |
$projecttempl = Pluf::f('mtn_repositories', false);␊ |
if ($projecttempl === false) {␊ |
throw new IDF_Scm_Exception(␊ |
'"mtn_repositories" must be defined in your configuration file.'␊ |
);␊ |
}␊ |
␊ |
$shortname = $project->shortname;␊ |
$projectpath = sprintf($projecttempl, $shortname);␊ |
␊ |
//␊ |
// step 7) add public monotone keys for the project to␊ |
// read-permissions, write-permissions and the database␊ |
//␊ |
$mtn = IDF_Scm_Monotone::factory($project);␊ |
$stdio = $mtn->getStdio();␊ |
␊ |
|
}␊ |
␊ |
$wildcard_section = null;␊ |
foreach ($parsed_read_perms as $stanzas) {␊ |
foreach ($stanzas as $stanza_line) {␊ |
for ($i=0; $i<count($parsed_read_perms); ++$i) {␊ |
foreach ($parsed_read_perms[$i] as $stanza_line) {␊ |
if ($stanza_line['key'] == 'pattern' &&␊ |
$stanza_line['values'][0] == '*') {␊ |
$wildcard_section =& $stanzas;␊ |
$wildcard_section =& $parsed_read_perms[$i];␊ |
break;␊ |
}␊ |
}␊ |
|
}␊ |
␊ |
$write_perms = file_get_contents($projectpath.'/write-permissions');␊ |
$lines = preg_split("/(\n|\r\n)/", $write_perms);␊ |
$lines = preg_split("/(\n|\r\n)/", $write_perms, -1, PREG_SPLIT_NO_EMPTY);␊ |
if (!in_array('*', $lines) && !in_array($mtn_key_id, $lines)) {␊ |
$lines[] = $mtn_key_id;␊ |
}␊ |
if (file_put_contents($projectpath.'/write-permissions',␊ |
implode("\n", $lines), LOCK_EX) === false) {␊ |
implode("\n", $lines) . "\n", LOCK_EX) === false) {␊ |
throw new IDF_Scm_Exception(sprintf(␊ |
__('Could not write write-permissions file for project "%s"'),␊ |
$shortname␊ |
|
// pattern "*"␊ |
// allow "*"␊ |
// which is the default for non-private projects␊ |
if ($project->private === true) {␊ |
if ($project->private) {␊ |
$read_perms = file_get_contents($projectpath.'/read-permissions');␊ |
$parsed_read_perms = array();␊ |
try {␊ |
|
// while we add new keys only to an existing wild-card entry␊ |
// we remove dropped keys from all sections since the key␊ |
// should be simply unavailable for all of them␊ |
foreach ($parsed_read_perms as $stanzas) {␊ |
for ($i=0; $i<count($stanzas); ) {␊ |
if ($stanzas[$i]['key'] == 'allow' &&␊ |
$stanzas[$i]['values'][0] == $mtn_key_id) {␊ |
unset($stanzas[$i]);␊ |
for ($h=0; $h<count($parsed_read_perms); ++$h) {␊ |
for ($i=0; $i<count($parsed_read_perms[$h]); ++$i) {␊ |
if ($parsed_read_perms[$h][$i]['key'] == 'allow' &&␊ |
$parsed_read_perms[$h][$i]['values'][0] == $mtn_key_id) {␊ |
unset($parsed_read_perms[$h][$i]);␊ |
continue;␊ |
}␊ |
++$i;␊ |
}␊ |
}␊ |
␊ |
|
}␊ |
␊ |
$write_perms = file_get_contents($projectpath.'/write-permissions');␊ |
$lines = preg_split("/(\n|\r\n)/", $write_perms);␊ |
for ($i=0; $i<count($lines); ) {␊ |
$lines = preg_split("/(\n|\r\n)/", $write_perms, -1, PREG_SPLIT_NO_EMPTY);␊ |
for ($i=0; $i<count($lines); ++$i) {␊ |
if ($lines[$i] == $mtn_key_id) {␊ |
unset($lines[$i]);␊ |
// the key should actually only exist once in the␊ |
// file, but we're paranoid␊ |
continue;␊ |
}␊ |
++$i;␊ |
}␊ |
if (file_put_contents($projectpath.'/write-permissions',␊ |
implode("\n", $lines), LOCK_EX) === false) {␊ |
implode("\n", $lines) . "\n", LOCK_EX) === false) {␊ |
throw new IDF_Scm_Exception(sprintf(␊ |
__('Could not write write-permissions file for project "%s"'),␊ |
$shortname␊ |