1717using System . Security . Cryptography ;
1818using System . Text ;
1919using System . Linq ;
20- using OculusGraphQLApiLib ;
2120
2221namespace QuestAppVersionSwitcher
2322{
@@ -206,11 +205,19 @@ public void Start()
206205 }
207206 string apkDir = AndroidService . FindAPKLocation ( package ) ;
208207 string gameDataDir = CoreService . coreVars . AndroidAppLocation + package ;
208+
209+
209210 try
210211 {
211- text = "Copying APK. Please wait until it has finished. This can take up to 2 minutes" ;
212- code = 202 ;
213- File . Copy ( apkDir , backupDir + "app.apk" ) ;
212+ if ( serverRequest . queryString . Get ( "onlyappdata" ) == null )
213+ {
214+ text = "Copying APK. Please wait until it has finished. This can take up to 2 minutes" ;
215+ code = 202 ;
216+ File . Copy ( apkDir , backupDir + "app.apk" ) ;
217+ } else
218+ {
219+ File . WriteAllText ( backupDir + "onlyappdata.txt" , "This backup only contains app data." ) ;
220+ }
214221 text = "Copying App Data. Please wait until it has finished. This can take up to 2 minutes" ;
215222 code = 202 ;
216223 FileManager . DirectoryCopy ( gameDataDir , backupDir + package , true ) ;
@@ -234,6 +241,44 @@ public void Start()
234241 code = 200 ;
235242 return true ;
236243 } ) ) ;
244+ server . AddRoute ( "GET" , "/isonlyappdata" , new Func < ServerRequest , bool > ( serverRequest =>
245+ {
246+ if ( serverRequest . queryString . Get ( "package" ) == null )
247+ {
248+ serverRequest . SendString ( "package key needed" , "text/plain" , 400 ) ;
249+ return true ;
250+ }
251+ if ( serverRequest . queryString . Get ( "backupname" ) == null )
252+ {
253+ serverRequest . SendString ( "backupname key needed" , "text/plain" , 400 ) ;
254+ return true ;
255+ }
256+ string package = serverRequest . queryString . Get ( "package" ) ;
257+ string backupname = serverRequest . queryString . Get ( "backupname" ) ;
258+ if ( ! IsNameFileNameSafe ( backupname ) )
259+ {
260+ serverRequest . SendString ( "Your Backup name contains a forbidden character. Please remove them. Forbidden characters are: " + String . Join ( ' ' , ReservedChars ) + "and space. Tip: replace spaces with _" , "text/plain" , 400 ) ;
261+ return true ;
262+ }
263+ if ( ! IsNameFileNameSafe ( package ) )
264+ {
265+ serverRequest . SendString ( "Your package contains a forbidden character. Forbidden characters are: " + String . Join ( ' ' , ReservedChars ) + "and space. Tip: replace spaces with _" , "text/plain" , 400 ) ;
266+ return true ;
267+ }
268+ if ( backupname == "" )
269+ {
270+ serverRequest . SendString ( "The backup has to have a name. Please add one." , "text/plain" , 400 ) ;
271+ return true ;
272+ }
273+ string backupDir = CoreService . coreVars . QAVSBackupDir + package + "/" + backupname + "/" ;
274+ if ( ! Directory . Exists ( backupDir ) )
275+ {
276+ serverRequest . SendString ( "This backup doesn't exist" , "text/plain" , 400 ) ;
277+ return true ;
278+ }
279+ serverRequest . SendString ( File . Exists ( backupDir + "onlyappdata.txt" ) . ToString ( ) . ToLower ( ) ) ;
280+ return true ;
281+ } ) ) ;
237282 server . AddRoute ( "GET" , "/backup" , new Func < ServerRequest , bool > ( serverRequest =>
238283 {
239284 serverRequest . SendString ( text , "text/plain" , code ) ;
@@ -402,7 +447,21 @@ public void Start()
402447 server . AddRoute ( "POST" , "/token" , new Func < ServerRequest , bool > ( serverRequest =>
403448 {
404449 TokenRequest r = JsonSerializer . Deserialize < TokenRequest > ( serverRequest . bodyString ) ;
405- string error = TokenTools
450+ if ( r . token . Contains ( "%" ) )
451+ {
452+ serverRequest . SendString ( "You got your token from the wrong place. Go to the payload tab. Don't get it from the url." , "text/plain" , 400 ) ;
453+ return true ;
454+ }
455+ if ( ! r . token . StartsWith ( "OC" ) )
456+ {
457+ serverRequest . SendString ( "Tokens must start with 'OC'. Please get a new one" , "text/plain" , 400 ) ;
458+ return true ;
459+ }
460+ if ( r . token . Contains ( "|" ) )
461+ {
462+ serverRequest . SendString ( "You seem to have entered a token of an application. Please get YOUR token. Usually this can be done by using another request in the network tab." , "text/plain" , 400 ) ;
463+ return true ;
464+ }
406465 CoreService . coreVars . token = PasswordEncryption . Encrypt ( r . token , r . password ) ;
407466 SHA256 s = SHA256 . Create ( ) ;
408467 CoreService . coreVars . password = GetSHA256OfString ( r . password ) ;
0 commit comments