ubuntu resolute
This commit is contained in:
74
nodejs/commande/setpermrepo.js
Normal file
74
nodejs/commande/setpermrepo.js
Normal file
@@ -0,0 +1,74 @@
|
||||
const fs = require('fs');
|
||||
|
||||
module.exports = function(app, checkApiKey) {
|
||||
app.post('/action/setpermrepo', checkApiKey, async (req, res) => {
|
||||
try {
|
||||
const { repoName, userOrGroup, permission } = req.body;
|
||||
|
||||
if (!repoName || !userOrGroup || !permission) {
|
||||
return res.status(400).json({ error: "Missing required parameters" });
|
||||
}
|
||||
|
||||
// Validate permission value
|
||||
if (!['r', 'rw'].includes(permission)) {
|
||||
return res.status(400).json({ error: "Permission must be 'r' or 'rw'" });
|
||||
}
|
||||
|
||||
await updateAuthzFile(repoName, userOrGroup, permission);
|
||||
res.json({ message: `Permissions updated successfully for ${userOrGroup} on ${repoName}` });
|
||||
|
||||
} catch (error) {
|
||||
console.error('Error in setpermrepo:', error);
|
||||
res.status(500).json({ error: error.message });
|
||||
}
|
||||
});
|
||||
};
|
||||
|
||||
async function updateAuthzFile(repoName, userOrGroup, permission) {
|
||||
const authzFilePath = '/etc/apache2/dav_svn.authz';
|
||||
|
||||
try {
|
||||
if (!fs.existsSync(authzFilePath) || !fs.lstatSync(authzFilePath).isFile()) {
|
||||
throw new Error(`${authzFilePath} is not a valid file.`);
|
||||
}
|
||||
|
||||
let data = fs.readFileSync(authzFilePath, 'utf8');
|
||||
const repoSection = `[/${repoName}]`;
|
||||
|
||||
if (!data.includes(repoSection)) {
|
||||
// If repo section doesn't exist, create it
|
||||
data += `\n${repoSection}\n`;
|
||||
}
|
||||
|
||||
// Split the file content into lines
|
||||
const lines = data.split('\n');
|
||||
let repoSectionIndex = lines.findIndex(line => line.trim() === repoSection);
|
||||
let sectionEnd = lines.slice(repoSectionIndex + 1).findIndex(line => line.startsWith('[')) + repoSectionIndex + 1;
|
||||
if (sectionEnd <= repoSectionIndex) sectionEnd = lines.length;
|
||||
|
||||
// Format the user/group entry
|
||||
const entryPrefix = userOrGroup.startsWith('@') ? '' : '';
|
||||
const newEntry = `${entryPrefix}${userOrGroup} = ${permission}`;
|
||||
|
||||
// Remove existing entry if it exists
|
||||
const existingEntryIndex = lines.findIndex((line, index) => {
|
||||
return index > repoSectionIndex &&
|
||||
index < sectionEnd &&
|
||||
line.trim().startsWith(`${entryPrefix}${userOrGroup} =`);
|
||||
});
|
||||
|
||||
if (existingEntryIndex !== -1) {
|
||||
lines[existingEntryIndex] = newEntry;
|
||||
} else {
|
||||
lines.splice(repoSectionIndex + 1, 0, newEntry);
|
||||
}
|
||||
|
||||
// Write back to file
|
||||
fs.writeFileSync(authzFilePath, lines.join('\n'));
|
||||
console.log(`Permissions updated for ${userOrGroup} on repository ${repoName}`);
|
||||
|
||||
} catch (error) {
|
||||
console.error('Error updating authz file:', error);
|
||||
throw error;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user