@@ -163,6 +163,137 @@ public void Start()
163163 clients . Remove ( socket ) ;
164164 } ;
165165 wsServer . StartServer ( CoreService . coreVars . wsPort ) ;
166+ server . AddRoute ( "POST" , "/api/diff/create" , request =>
167+ {
168+ if ( request . queryString . Get ( "package" ) == null )
169+ {
170+ request . SendString ( GenericResponse . GetResponse ( "package key needed" , false ) , "application/json" , 400 ) ;
171+ return true ;
172+ }
173+ string package = request . queryString . Get ( "package" ) ;
174+ if ( request . queryString . Get ( "sourceBackup" ) == null )
175+ {
176+ request . SendString ( GenericResponse . GetResponse ( "sourceBackup key needed" , false ) , "application/json" , 400 ) ;
177+ return true ;
178+ }
179+ string sourceBackup = CoreService . coreVars . QAVSBackupDir + package + Path . DirectorySeparatorChar + request . queryString . Get ( "sourceBackup" ) + Path . DirectorySeparatorChar ;
180+ if ( request . queryString . Get ( "targetBackup" ) == null )
181+ {
182+ request . SendString ( GenericResponse . GetResponse ( "targetBackup key needed" , false ) , "application/json" , 400 ) ;
183+ return true ;
184+ }
185+ string targetBackup = CoreService . coreVars . QAVSBackupDir + package + Path . DirectorySeparatorChar + request . queryString . Get ( "targetBackup" ) + Path . DirectorySeparatorChar ;
186+ string outputDir = targetBackup + "diffs" + Path . DirectorySeparatorChar + request . queryString . Get ( "sourceBackup" ) +
187+ Path . DirectorySeparatorChar + DateTime . Now . Ticks + Path . DirectorySeparatorChar ;
188+ DiffCreator . CreateDiff ( package , sourceBackup , targetBackup , outputDir ) ;
189+ request . SendString ( GenericResponse . GetResponse ( "Created diff" , true ) , "application/json" ) ;
190+ return true ;
191+ } ) ;
192+ server . AddRoute ( "GET" , "/api/backup/files" , request =>
193+ {
194+
195+ if ( request . queryString . Get ( "package" ) == null )
196+ {
197+ request . SendString ( GenericResponse . GetResponse ( "package key needed" , false ) , "application/json" , 400 ) ;
198+ return true ;
199+ }
200+ string package = request . queryString . Get ( "package" ) ;
201+ if ( request . queryString . Get ( "name" ) == null )
202+ {
203+ request . SendString ( GenericResponse . GetResponse ( "name key needed" , false ) , "application/json" , 400 ) ;
204+ return true ;
205+ }
206+ string name = request . queryString . Get ( "name" ) ;
207+ string directory = CoreService . coreVars . QAVSBackupDir + package + "/" + name + "/" ;
208+ if ( ! Directory . Exists ( directory ) )
209+ {
210+ request . SendString ( GenericResponse . GetResponse ( "Backup does not exist" , false ) , "application/json" , 404 ) ;
211+ return true ;
212+ }
213+ // get all files recursively
214+ request . SendString ( JsonSerializer . Serialize ( FileManager . GetAllFilesRecursively ( directory ) ) , "application/json" ) ;
215+ return true ;
216+ } ) ;
217+ server . AddRoute ( "GET" , "/api/backup/getfile" , request =>
218+ {
219+ if ( request . queryString . Get ( "package" ) == null )
220+ {
221+ request . SendString ( GenericResponse . GetResponse ( "package key needed" , false ) , "application/json" , 400 ) ;
222+ return true ;
223+ }
224+ string package = request . queryString . Get ( "package" ) ;
225+ if ( request . queryString . Get ( "name" ) == null )
226+ {
227+ request . SendString ( GenericResponse . GetResponse ( "name key needed" , false ) , "application/json" , 400 ) ;
228+ return true ;
229+ }
230+ string name = request . queryString . Get ( "name" ) ;
231+ if ( request . queryString . Get ( "file" ) == null )
232+ {
233+ request . SendString ( GenericResponse . GetResponse ( "file key needed" , false ) , "application/json" , 400 ) ;
234+ return true ;
235+ }
236+ string file = request . queryString . Get ( "file" ) ;
237+ string directory = CoreService . coreVars . QAVSBackupDir + package + "/" + name + "/" ;
238+ string createdFile = directory + file ;
239+ if ( ! File . Exists ( createdFile ) )
240+ {
241+ request . Send404 ( ) ;
242+ return true ;
243+ }
244+ request . SendFileFS ( createdFile , "application/octet-stream" , 200 , true , new Dictionary < string , string > { { "Content-Disposition" , "attachment; filename=\" " + Path . GetFileName ( file ) + "\" " } } ) ;
245+ return true ;
246+ } ) ;
247+ server . AddRouteStreamOnly ( "POST" , "/api/backup/upload" , request =>
248+ {
249+
250+ if ( request . queryString . Get ( "package" ) == null )
251+ {
252+ request . SendString ( GenericResponse . GetResponse ( "package key needed" , false ) , "application/json" , 400 ) ;
253+ return true ;
254+ }
255+ string package = request . queryString . Get ( "package" ) ;
256+ if ( request . queryString . Get ( "name" ) == null )
257+ {
258+ request . SendString ( GenericResponse . GetResponse ( "name key needed" , false ) , "application/json" , 400 ) ;
259+ return true ;
260+ }
261+ string name = request . queryString . Get ( "name" ) ;
262+ if ( request . queryString . Get ( "file" ) == null )
263+ {
264+ request . SendString ( GenericResponse . GetResponse ( "file key needed" , false ) , "application/json" , 400 ) ;
265+ return true ;
266+ }
267+ string file = request . queryString . Get ( "file" ) ;
268+ string directory = CoreService . coreVars . QAVSBackupDir + package + "/" + name + "/" ;
269+ string createdFile = directory + ( file . ToLower ( ) . EndsWith ( ".apk" ) ? "app.apk" : "obb/" + package + "/" + file ) ;
270+ FileManager . CreateDirectoryIfNotExisting ( FileManager . GetParentDirIfExisting ( createdFile ) ) ;
271+ Stream fileStream = File . Create ( createdFile ) ;
272+ request . context . Request . InputStream . CopyTo ( fileStream ) ;
273+ fileStream . Close ( ) ;
274+ request . SendString ( GenericResponse . GetResponse ( "Created file at " + createdFile , true ) , "application/json" ) ;
275+ return true ;
276+ } ) ;
277+ server . AddRoute ( "POST" , "/api/backup/create" , request =>
278+ {
279+
280+ if ( request . queryString . Get ( "package" ) == null )
281+ {
282+ request . SendString ( GenericResponse . GetResponse ( "package key needed" , false ) , "application/json" , 400 ) ;
283+ return true ;
284+ }
285+ string package = request . queryString . Get ( "package" ) ;
286+ if ( request . queryString . Get ( "name" ) == null )
287+ {
288+ request . SendString ( GenericResponse . GetResponse ( "name key needed" , false ) , "application/json" , 400 ) ;
289+ return true ;
290+ }
291+ string name = request . queryString . Get ( "name" ) ;
292+ string directory = CoreService . coreVars . QAVSBackupDir + package + "/" + name ;
293+ Directory . CreateDirectory ( directory ) ;
294+ request . SendString ( GenericResponse . GetResponse ( "Created backup" , true ) , "application/json" ) ;
295+ return true ;
296+ } ) ;
166297 server . AddRoute ( "GET" , "/api/downgrade/usediff" , request =>
167298 {
168299 request . SendString ( UseDiffResponse . GetResponse ( CoreService . coreVars . useDiffDowngrading || CoreService . coreVars . onlineDowngradeJson . useDiffDowngrade , true ) , "application/json" ) ;
@@ -564,6 +695,7 @@ public void Start()
564695 } ) ;
565696
566697 server . AddRouteFile ( "/" , "html/index.html" ) ;
698+ server . AddRouteFile ( "/diff" , "html/diff/diff.html" ) ;
567699 server . AddRouteFile ( "/scotlandforever.mp3" , "html/scotlandforever.mp3" ) ;
568700 server . AddRouteFile ( "/setup" , "html/setup.html" ) ;
569701 server . AddRouteFile ( "/flows/beat_saber_modding" , "html/flows/beat_saber_modding.html" ) ;
0 commit comments