-
Notifications
You must be signed in to change notification settings - Fork 5
Expand file tree
/
Copy pathProgram.cs
More file actions
130 lines (119 loc) · 4.13 KB
/
Program.cs
File metadata and controls
130 lines (119 loc) · 4.13 KB
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
using System;
using System.Windows.Forms;
using System.IO;
using System.IO.Compression;
using CommandLine;
using Newtonsoft.Json;
using Newtonsoft.Json.Serialization;
using RaidExtractor.Core;
using Raid.Client;
using System.Threading.Tasks;
using CommandLine.Text;
namespace RaidExtractor
{
static class TaskExtensions
{
public static T WaitForResult<T>(this Task<T> task)
{
task.Wait();
return task.Result;
}
}
class Program
{
public static JsonSerializerSettings SerializerSettings = new JsonSerializerSettings
{
Formatting = Formatting.Indented,
ContractResolver = new DefaultContractResolver
{
NamingStrategy = new CamelCaseNamingStrategy
{
ProcessDictionaryKeys = true,
OverrideSpecifiedNames = false
},
},
};
public class Options
{
[Option('g', "nogui", Required = false, Default = false,
HelpText = "Run this program without a GUI.")]
public bool NoGui { get; set; }
[Option('o', "output", Required = false, Default = "artifacts.json",
HelpText = "Destination output file name.")]
public string OutputFile { get; set; }
[Option('t', "type", Required = false, Default = "json", HelpText = "Output Type: 'json' for JSON file output, 'zip' for ZIP file output.")]
public string DumpType { get; set; }
}
static void RunGUI()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new MainForm());
}
[STAThread]
static void Main(string[] args)
{
if (args.Length == 0)
{
RunGUI();
}
else
{
var parserResult = CommandLine.Parser.Default.ParseArguments<Options>(args);
parserResult.WithParsed(Run)
.WithNotParsed(errs =>
{
MessageBox.Show(HelpText.AutoBuild(parserResult), "Usage");
});
}
}
private static void Run(Options o)
{
if (!o.NoGui)
{
RunGUI();
return;
}
RaidToolkitClient client = new();
AccountDump dump;
try
{
client.Connect();
var accounts = client.AccountApi.GetAccounts().WaitForResult();
dump = client.AccountApi.GetAccountDump(accounts[0].Id).WaitForResult();
}
catch (Exception ex)
{
Console.WriteLine($"There was an error during Extraction: {ex.Message}");
return;
}
var outFile = o.OutputFile;
var json = JsonConvert.SerializeObject(dump, Formatting.Indented, SerializerSettings);
if (o.DumpType.ToLower() == "zip")
{
if (!outFile.ToLower().Contains("zip")) outFile += ".zip";
File.Delete(outFile);
using (var memoryStream = new MemoryStream())
{
using (ZipArchive archive = ZipFile.Open(outFile, ZipArchiveMode.Create))
{
var artifactFile = archive.CreateEntry("artifacts.json");
using (var entryStream = artifactFile.Open())
{
using (var streamWriter = new StreamWriter(entryStream))
{
streamWriter.Write(json);
}
}
}
}
}
else
{
if (o.DumpType.ToLower() != "json") Console.WriteLine("Unknown Output type. Outputting file in JSON format.");
File.WriteAllText(outFile, json);
}
Console.WriteLine($"Output file {outFile} has been created.");
}
}
}