-
Notifications
You must be signed in to change notification settings - Fork 0
/
.Program~~~~001.cs
71 lines (60 loc) · 2.27 KB
/
.Program~~~~001.cs
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
// include comments ...
using System;
using System.Diagnostics;
namespace OccCmdAdapter
{
class Program
{
static void Main(string[] args)
{
if (args.Length != 1)
{
Console.WriteLine("Usage: occ-cmd-adapter <full file system path>");
return;
}
string fileSystemPath = args[0].TrimEnd('/');
string baseFileSystemPath = "/mnt/myJBOD/";
// Transform filesystem path into Nextcloud path
string nextcloudPath = fileSystemPath.StartsWith(baseFileSystemPath) ?
fileSystemPath.Substring(baseFileSystemPath.Length).TrimEnd('/') :
throw new InvalidOperationException("Filesystem path does not match expected base path.");
// Escape and quote the Nextcloud path for the command
string escapedNextcloudPath = EscapeForBash(nextcloudPath);
// Construct the command
string occCommand = $"sudo -u www-data php /var/www/nextcloud/occ files:scan --path='{escapedNextcloudPath}'";
// Execute the command
string result = ExecuteBashCommand(occCommand);
Console.WriteLine(result);
Console.WriteLine($"Nextcloud Path: {nextcloudPath}");
}
static string ExecuteBashCommand(string command)
{
try
{
var process = new Process()
{
StartInfo = new ProcessStartInfo
{
FileName = "/bin/bash",
Arguments = $"-c {command}",
RedirectStandardOutput = true,
UseShellExecute = false,
CreateNoWindow = true,
}
};
process.Start();
string result = process.StandardOutput.ReadToEnd();
process.WaitForExit();
return result;
}
catch (Exception ex)
{
return $"Error executing command: {ex.Message}";
}
}
static string EscapeForBash(string input)
{
return input.Replace("'", "'\\''");
}
}
}