Skip to content

Commit 586a49f

Browse files
committed
- Fix GoFileIo file uploading
1 parent 8121d45 commit 586a49f

File tree

1 file changed

+212
-19
lines changed

1 file changed

+212
-19
lines changed

src/OpenDirectoryDownloader/FileUpload/GoFileIo.cs

+212-19
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,9 @@
1-
using Newtonsoft.Json;
2-
using Newtonsoft.Json.Linq;
31
using OpenDirectoryDownloader.Models;
2+
using System.Net.Http.Headers;
3+
using System.Net.Http.Json;
4+
using System.Text;
5+
using System.Text.Json;
6+
using System.Text.Json.Serialization;
47

58
namespace OpenDirectoryDownloader.FileUpload;
69

@@ -17,35 +20,70 @@ public async Task<IFileUploadSiteFile> UploadFile(HttpClient httpClient, string
1720
{
1821
try
1922
{
20-
string jsonServer = await httpClient.GetStringAsync("https://api.gofile.io/servers");
23+
GoFileIoServersResponse serversResponse = await httpClient.GetFromJsonAsync<GoFileIoServersResponse>("https://api.gofile.io/servers");
2124

22-
JObject result = JObject.Parse(jsonServer);
25+
if (serversResponse.Status != "ok")
26+
{
27+
throw new Exception("GoFile.io servers error, in maintenance?");
28+
}
29+
30+
string server = serversResponse.Data.Servers.First().Name;
31+
32+
using HttpResponseMessage httpResponseMessageAccount = await httpClient.PostAsync("https://api.gofile.io/accounts", new StringContent("{}", Encoding.UTF8, "text/plain"));
33+
34+
GoFileIoAccountsResponse accountsResponse = await httpResponseMessageAccount.Content.ReadFromJsonAsync<GoFileIoAccountsResponse>();
35+
36+
if (accountsResponse.Status != "ok")
37+
{
38+
throw new Exception("GoFile.io accounts error, in maintenance?");
39+
}
40+
41+
httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", accountsResponse.Data.Token);
42+
43+
GoFileIoAccountResponse accountResponse = await httpClient.GetFromJsonAsync<GoFileIoAccountResponse>($"https://api.gofile.io/accounts/{accountsResponse.Data.Id}");
44+
45+
if (accountResponse.Status != "ok")
46+
{
47+
throw new Exception("GoFile.io account error, in maintenance?");
48+
}
49+
50+
using HttpResponseMessage httpResponseMessageCreateFolder = await httpClient.PostAsync("https://api.gofile.io/contents/createfolder", new StringContent($"{{\"parentFolderId\": \"{accountsResponse.Data.RootFolder}\"}}", Encoding.UTF8, "application/json"));
2351

24-
if (result["status"].Value<string>() == "error")
52+
GoFileIoFolderResponse createFolderResponse = await httpResponseMessageCreateFolder.Content.ReadFromJsonAsync<GoFileIoFolderResponse>();
53+
54+
if (createFolderResponse.Status != "ok")
2555
{
26-
throw new Exception("GoFile.io error, probably in maintenance");
56+
throw new Exception("GoFile.io create folder error, in maintenance?");
2757
}
2858

29-
string server = result.SelectToken("data.servers").First()["name"].Value<string>();
59+
using HttpResponseMessage httpResponseMessageUpdateFolder = await httpClient.PutAsync($"https://api.gofile.io/contents/{createFolderResponse.Data.Id}/update", new StringContent("{\"attribute\": \"public\", \"attributeValue\": \"true\"}", Encoding.UTF8, "application/json"));
60+
61+
GoFileIoFolderResponse updateFolderResponse = await httpResponseMessageUpdateFolder.Content.ReadFromJsonAsync<GoFileIoFolderResponse>();
62+
63+
if (updateFolderResponse.Status != "ok")
64+
{
65+
throw new Exception("GoFile.io update folder error, in maintenance?");
66+
}
3067

3168
using FileStream fileStream = new(path, FileMode.Open);
3269
using StreamContent streamContent = new(fileStream);
3370

3471
using MultipartFormDataContent multipartFormDataContent = new($"Upload----{Guid.NewGuid()}")
3572
{
73+
{ new StringContent(createFolderResponse.Data.Id), "folderId" },
3674
{ streamContent, "file", Path.GetFileName(path) }
3775
};
3876

39-
using HttpResponseMessage httpResponseMessage = await httpClient.PostAsync($"https://{server}.gofile.io/uploadFile", multipartFormDataContent);
77+
using HttpResponseMessage httpResponseMessageUploadFile = await httpClient.PostAsync($"https://{server}.gofile.io/contents/uploadFile", multipartFormDataContent);
4078

41-
if (httpResponseMessage.IsSuccessStatusCode)
79+
if (httpResponseMessageUploadFile.IsSuccessStatusCode)
4280
{
43-
string response = await httpResponseMessage.Content.ReadAsStringAsync();
44-
OpenDirectoryIndexer.Session.UploadedUrlsResponse = response;
81+
GoFileIoUploadFileResponse uploadFileResponse = await httpResponseMessageUploadFile.Content.ReadFromJsonAsync<GoFileIoUploadFileResponse>();
82+
OpenDirectoryIndexer.Session.UploadedUrlsResponse = JsonSerializer.Serialize(uploadFileResponse);
4583

46-
Program.Logger.Debug("Response from {siteName}: {response}", Name, response);
84+
Program.Logger.Debug("Response from {siteName}: {response}", Name, uploadFileResponse);
4785

48-
return JsonConvert.DeserializeObject<GoFileIoFile>(response);
86+
return JsonSerializer.Deserialize<GoFileIoFile>(JsonSerializer.Serialize(uploadFileResponse));
4987
}
5088
else
5189
{
@@ -69,20 +107,175 @@ public async Task<IFileUploadSiteFile> UploadFile(HttpClient httpClient, string
69107

70108
public class GoFileIoFile : IFileUploadSiteFile
71109
{
72-
public string Url => $"https://gofile.io/?c={Data.Code}";
110+
public string Url => Data.DownloadPage;
73111

74-
[JsonProperty("status")]
112+
[JsonPropertyName("status")]
75113
public string Status { get; set; }
76114

77-
[JsonProperty("data")]
78-
public GoFileIoFileData Data { get; set; }
115+
[JsonPropertyName("data")]
116+
public GoFileIoUploadedFile Data { get; set; }
79117
}
80118

81119
public class GoFileIoFileData
82120
{
83-
[JsonProperty("code")]
121+
[JsonPropertyName("code")]
84122
public string Code { get; set; }
85123

86-
[JsonProperty("removalCode")]
124+
[JsonPropertyName("removalCode")]
87125
public string RemovalCode { get; set; }
88126
}
127+
128+
public class GoFileIoResponse
129+
{
130+
[JsonPropertyName("status")]
131+
public string Status { get; set; }
132+
}
133+
134+
public class GoFileIoServersResponse : GoFileIoResponse
135+
{
136+
[JsonPropertyName("data")]
137+
public GoFileIoServersData Data { get; set; }
138+
}
139+
140+
public class GoFileIoServersData
141+
{
142+
[JsonPropertyName("servers")]
143+
public List<GoFileIoServer> Servers { get; set; }
144+
}
145+
146+
public class GoFileIoServer
147+
{
148+
[JsonPropertyName("name")]
149+
public string Name { get; set; }
150+
151+
[JsonPropertyName("zone")]
152+
public string Zone { get; set; }
153+
}
154+
155+
public class GoFileIoFolderResponse : GoFileIoResponse
156+
{
157+
[JsonPropertyName("data")]
158+
public GoFileIoFolder Data { get; set; }
159+
}
160+
161+
public class GoFileIoFolder
162+
{
163+
[JsonPropertyName("code")]
164+
public string Code { get; set; }
165+
166+
[JsonPropertyName("createTime")]
167+
public int CreateTime { get; set; }
168+
169+
[JsonPropertyName("id")]
170+
public string Id { get; set; }
171+
172+
[JsonPropertyName("modTime")]
173+
public int ModTime { get; set; }
174+
175+
[JsonPropertyName("name")]
176+
public string Name { get; set; }
177+
178+
[JsonPropertyName("owner")]
179+
public string Owner { get; set; }
180+
181+
[JsonPropertyName("parentFolder")]
182+
public string ParentFolder { get; set; }
183+
184+
[JsonPropertyName("type")]
185+
public string Type { get; set; }
186+
}
187+
188+
public class GoFileIoAccountsResponse : GoFileIoResponse
189+
{
190+
[JsonPropertyName("data")]
191+
public GoFileIoAccount Data { get; set; }
192+
}
193+
194+
public class GoFileIoAccount
195+
{
196+
[JsonPropertyName("id")]
197+
public string Id { get; set; }
198+
199+
[JsonPropertyName("email")]
200+
public string Email { get; set; }
201+
202+
[JsonPropertyName("rootFolder")]
203+
public string RootFolder { get; set; }
204+
205+
[JsonPropertyName("tier")]
206+
public string Tier { get; set; }
207+
208+
[JsonPropertyName("token")]
209+
public string Token { get; set; }
210+
211+
[JsonPropertyName("statsCurrent")]
212+
public GoFileIoAccountStats StatsCurrent { get; set; }
213+
}
214+
215+
public class GoFileIoAccountResponse : GoFileIoResponse
216+
{
217+
[JsonPropertyName("data")]
218+
public GoFileIoAccount Data { get; set; }
219+
}
220+
221+
public class GoFileIoAccountStats
222+
{
223+
[JsonPropertyName("folderCount")]
224+
public int FolderCount { get; set; }
225+
226+
[JsonPropertyName("fileCount")]
227+
public int FileCount { get; set; }
228+
229+
[JsonPropertyName("storage")]
230+
public int Storage { get; set; }
231+
}
232+
233+
public class GoFileIoUploadFileResponse : IFileUploadSiteFile
234+
{
235+
[JsonPropertyName("data")]
236+
public GoFileIoUploadedFile Data { get; set; }
237+
238+
public string Url => Data.DownloadPage;
239+
}
240+
241+
public class GoFileIoUploadedFile
242+
{
243+
[JsonPropertyName("createTime")]
244+
public int CreateTime { get; set; }
245+
246+
[JsonPropertyName("downloadPage")]
247+
public string DownloadPage { get; set; }
248+
249+
[JsonPropertyName("guestToken")]
250+
public string GuestToken { get; set; }
251+
252+
[JsonPropertyName("id")]
253+
public string Id { get; set; }
254+
255+
[JsonPropertyName("md5")]
256+
public string Md5 { get; set; }
257+
258+
[JsonPropertyName("mimetype")]
259+
public string MimeType { get; set; }
260+
261+
[JsonPropertyName("modTime")]
262+
public int ModTime { get; set; }
263+
264+
[JsonPropertyName("name")]
265+
public string Name { get; set; }
266+
267+
[JsonPropertyName("parentFolder")]
268+
public string ParentFolder { get; set; }
269+
270+
[JsonPropertyName("parentFolderCode")]
271+
public string ParentFolderCode { get; set; }
272+
273+
[JsonPropertyName("servers")]
274+
public List<string> Servers { get; set; }
275+
276+
[JsonPropertyName("size")]
277+
public int Size { get; set; }
278+
279+
[JsonPropertyName("type")]
280+
public string Type { get; set; }
281+
}

0 commit comments

Comments
 (0)