Skip to content

Commit 239dc0b

Browse files
dmetznerclaude
andcommitted
Fix WebView downloads, cookie security, dead code cleanup
- Fix project downloads: intercept /api/projects/{id}/catrobat in shouldInterceptRequest, download synchronously so project is imported before JS shows completion state - Fix media library downloads: URL pattern /api/media/ → /resources/media/ to match actual Catroweb download paths - Add Secure; Path=/; SameSite=Strict flags to BEARER cookie - Handle new API URL format in ProjectDownloader.getProjectNameFromUrl() - Remove dead code: UPLOAD_URL, BASE_UPLOAD_URL, old cookie/token constants, ProjectUploadData, old ServerAuthenticationConstants - Fix tags type: Any? → Map<String, String>? in ProjectResponseApi - Remove projectsList alias, update callers to projects_list - Only delete upload archive on success, not in finally block - Add SupervisorJob to LoginHelper coroutine scopes - Add auth interceptor test for stale-token race condition Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
1 parent 0dfb661 commit 239dc0b

34 files changed

Lines changed: 284 additions & 496 deletions

File tree

catroid/src/androidTest/java/org/catrobat/catroid/retrofittesting/CatroidWebServerTest.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -189,8 +189,8 @@ class CatroidWebServerTest : KoinTest {
189189
assertNotNull(it)
190190
assertNotNull(it.name)
191191
assertNotNull(it.type)
192-
assertNotNull(it.projectsList)
193-
it.projectsList.forEach { projectResponse ->
192+
assertNotNull(it.projects_list)
193+
it.projects_list.forEach { projectResponse ->
194194
assertNotNull(projectResponse.id)
195195
assertNotNull(projectResponse.name)
196196
assertNotNull(projectResponse.author)

catroid/src/catroid/java/org/catrobat/catroid/common/FlavoredConstants.java

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -30,13 +30,11 @@
3030
import java.io.File;
3131

3232
import static org.catrobat.catroid.common.Constants.MAIN_URL_HTTPS;
33-
import static org.catrobat.catroid.common.Constants.UPLOAD_URL;
3433

3534
public final class FlavoredConstants {
3635
// Web:
3736
public static final String BASE_URL_HTTPS = "https://catrobat.org/docs/";
3837

39-
public static final String BASE_UPLOAD_URL = UPLOAD_URL + "/pocketcode/";
4038

4139
public static final String CATROBAT_HELP_URL = "https://catrobat.org/docs/";
4240

@@ -53,7 +51,7 @@ public final class FlavoredConstants {
5351

5452
// Media Library (via share.catrobat.org):
5553
public static final String LIBRARY_BASE_URL = MAIN_URL_HTTPS + "/" + FLAVOR_NAME + "/media-library";
56-
public static final String CATROBAT_CONTENT_DOWNLOAD_URL = MAIN_URL_HTTPS + "/api/media/";
54+
public static final String CATROBAT_CONTENT_DOWNLOAD_URL = MAIN_URL_HTTPS + "/resources/media/";
5755
public static final String CATROBAT_CONTENT_LOOKS_URL = LIBRARY_BASE_URL + "?file_type=IMAGE";
5856
public static final String CATROBAT_CONTENT_SOUNDS_URL = LIBRARY_BASE_URL + "?file_type=SOUND";
5957
public static final String CATROBAT_CONTENT_BACKGROUNDS_URL = LIBRARY_BASE_URL + "?file_type=IMAGE&category=backgrounds";

catroid/src/createAtSchool/java/org/catrobat/catroid/common/FlavoredConstants.java

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -30,13 +30,11 @@
3030
import java.io.File;
3131

3232
import static org.catrobat.catroid.common.Constants.MAIN_URL_HTTPS;
33-
import static org.catrobat.catroid.common.Constants.UPLOAD_URL;
3433

3534
public final class FlavoredConstants {
3635
// Web:
3736
public static final String BASE_URL_HTTPS = "https://catrobat.org/docs/";
3837

39-
public static final String BASE_UPLOAD_URL = UPLOAD_URL + "/create@school/";
4038

4139
public static final String CATROBAT_HELP_URL = "https://catrobat.org/docs/";
4240

@@ -53,7 +51,7 @@ public final class FlavoredConstants {
5351

5452
// Media Library (via share.catrobat.org):
5553
public static final String LIBRARY_BASE_URL = MAIN_URL_HTTPS + "/" + FLAVOR_NAME + "/media-library";
56-
public static final String CATROBAT_CONTENT_DOWNLOAD_URL = MAIN_URL_HTTPS + "/api/media/";
54+
public static final String CATROBAT_CONTENT_DOWNLOAD_URL = MAIN_URL_HTTPS + "/resources/media/";
5755
public static final String CATROBAT_CONTENT_LOOKS_URL = LIBRARY_BASE_URL + "?file_type=IMAGE";
5856
public static final String CATROBAT_CONTENT_SOUNDS_URL = LIBRARY_BASE_URL + "?file_type=SOUND";
5957
public static final String CATROBAT_CONTENT_BACKGROUNDS_URL = LIBRARY_BASE_URL + "?file_type=IMAGE&category=backgrounds";

catroid/src/embroideryDesigner/java/org/catrobat/catroid/common/FlavoredConstants.java

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -30,13 +30,11 @@
3030
import java.io.File;
3131

3232
import static org.catrobat.catroid.common.Constants.MAIN_URL_HTTPS;
33-
import static org.catrobat.catroid.common.Constants.UPLOAD_URL;
3433

3534
public final class FlavoredConstants {
3635
// Web:
3736
public static final String BASE_URL_HTTPS = "https://catrobat.org/docs/";
3837

39-
public static final String BASE_UPLOAD_URL = UPLOAD_URL + "/embroidery/";
4038

4139
public static final String CATROBAT_HELP_URL = "https://catrobat.org/docs/";
4240

@@ -53,7 +51,7 @@ public final class FlavoredConstants {
5351

5452
// Media Library (via share.catrobat.org):
5553
public static final String LIBRARY_BASE_URL = MAIN_URL_HTTPS + "/" + FLAVOR_NAME + "/media-library";
56-
public static final String CATROBAT_CONTENT_DOWNLOAD_URL = MAIN_URL_HTTPS + "/api/media/";
54+
public static final String CATROBAT_CONTENT_DOWNLOAD_URL = MAIN_URL_HTTPS + "/resources/media/";
5755
public static final String CATROBAT_CONTENT_LOOKS_URL = LIBRARY_BASE_URL + "?file_type=IMAGE";
5856
public static final String CATROBAT_CONTENT_SOUNDS_URL = LIBRARY_BASE_URL + "?file_type=SOUND";
5957
public static final String CATROBAT_CONTENT_BACKGROUNDS_URL = LIBRARY_BASE_URL + "?file_type=IMAGE&category=backgrounds";

catroid/src/lunaAndCat/java/org/catrobat/catroid/common/FlavoredConstants.java

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -30,13 +30,11 @@
3030
import java.io.File;
3131

3232
import static org.catrobat.catroid.common.Constants.MAIN_URL_HTTPS;
33-
import static org.catrobat.catroid.common.Constants.UPLOAD_URL;
3433

3534
public final class FlavoredConstants {
3635
// Web:
3736
public static final String BASE_URL_HTTPS = "https://catrobat.org/docs/";
3837

39-
public static final String BASE_UPLOAD_URL = UPLOAD_URL + "/luna/";
4038

4139
public static final String CATROBAT_HELP_URL = "https://catrobat.org/docs/";
4240

@@ -53,7 +51,7 @@ public final class FlavoredConstants {
5351

5452
// Media Library (via share.catrobat.org):
5553
public static final String LIBRARY_BASE_URL = MAIN_URL_HTTPS + "/" + FLAVOR_NAME + "/media-library";
56-
public static final String CATROBAT_CONTENT_DOWNLOAD_URL = MAIN_URL_HTTPS + "/api/media/";
54+
public static final String CATROBAT_CONTENT_DOWNLOAD_URL = MAIN_URL_HTTPS + "/resources/media/";
5755
public static final String CATROBAT_CONTENT_LOOKS_URL = LIBRARY_BASE_URL + "?file_type=IMAGE";
5856
public static final String CATROBAT_CONTENT_SOUNDS_URL = LIBRARY_BASE_URL + "?file_type=SOUND";
5957
public static final String CATROBAT_CONTENT_BACKGROUNDS_URL = LIBRARY_BASE_URL + "?file_type=IMAGE&category=backgrounds";

catroid/src/main/java/org/catrobat/catroid/common/Constants.java

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -127,7 +127,6 @@ public final class Constants {
127127

128128
// Web:
129129
private static final String MAIN_URL_PRODUCTION = "https://share.catrobat.org";
130-
public static final String UPLOAD_URL = "https://upload.catrob.at";
131130
private static final String WEB_TEST_URL = BuildConfig.WEB_TEST_URL;
132131
public static final String MAIN_URL_HTTPS = BuildConfig.WEB_TEST_FLAG ? WEB_TEST_URL : MAIN_URL_PRODUCTION;
133132

@@ -153,9 +152,6 @@ public final class Constants {
153152
public static final String PLAY_STORE_PAGE_LINK = "https://play.google.com/store/apps/details?id=";
154153
public static final String HUAWEI_APP_GALLERY_LINK = "https://catrob.at/HuaweiAppGallery";
155154

156-
public static final String USERNAME_COOKIE_NAME = "CATRO_LOGIN_USER";
157-
public static final String TOKEN_COOKIE_NAME = "CATRO_LOGIN_TOKEN";
158-
159155
public static final String USER_AGENT = "Mozilla/5.0 (compatible; Catrobatbot/1.0; +https://catrob.at/bot)";
160156

161157
// HTTP status codes:
@@ -298,6 +294,7 @@ public final class Constants {
298294

299295
public static final int UPLOAD_IMAGE_SCALE_WIDTH = 480;
300296
public static final int UPLOAD_IMAGE_SCALE_HEIGHT = 480;
297+
public static final long UPLOAD_MAX_SIZE_BYTES = 100L * 1024 * 1024; // 100 MB
301298

302299
public static final int TEXT_FROM_CAMERA_SENSOR_HASHCODE = 1613638780;
303300

catroid/src/main/java/org/catrobat/catroid/common/Survey.java

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -33,19 +33,18 @@
3333
import org.catrobat.catroid.ui.WebViewActivity;
3434
import org.catrobat.catroid.utils.Utils;
3535

36-
import static org.koin.java.KoinJavaComponent.inject;
37-
38-
import kotlin.Lazy;
39-
4036
import java.util.Date;
4137

4238
import androidx.annotation.VisibleForTesting;
4339

40+
import kotlin.Lazy;
41+
4442
import static org.catrobat.catroid.common.SharedPreferenceKeys.LAST_USED_DATE_KEY;
4543
import static org.catrobat.catroid.common.SharedPreferenceKeys.SHOW_SURVEY_KEY;
4644
import static org.catrobat.catroid.common.SharedPreferenceKeys.SURVEY_URL1_HASH_KEY;
4745
import static org.catrobat.catroid.common.SharedPreferenceKeys.SURVEY_URL2_HASH_KEY;
4846
import static org.catrobat.catroid.common.SharedPreferenceKeys.TIME_SPENT_IN_APP_IN_SECONDS_KEY;
47+
import static org.koin.java.KoinJavaComponent.inject;
4948

5049
public class Survey {
5150
@VisibleForTesting

catroid/src/main/java/org/catrobat/catroid/retrofit/models/Models.kt

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -169,10 +169,7 @@ data class ProjectsCategoryApi(
169169
val type: String,
170170
val name: String,
171171
val projects_list: List<ProjectResponseApi>
172-
) {
173-
// Keep old accessor name for compatibility with existing code
174-
val projectsList: List<ProjectResponseApi> get() = projects_list
175-
}
172+
)
176173

177174
@SuppressWarnings("ConstructorParameterNaming")
178175
data class ProjectResponseApi(
@@ -188,7 +185,7 @@ data class ProjectResponseApi(
188185
val comments: Int = 0,
189186
val private: Boolean = false,
190187
val flavor: String = "",
191-
val tags: Any? = null,
188+
val tags: Map<String, String>? = null,
192189
val uploaded_at: String? = null,
193190
val uploaded_string: String = "",
194191
val screenshot: ImageVariants? = null,

catroid/src/main/java/org/catrobat/catroid/transfers/GoogleLoginHandler.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -40,14 +40,14 @@
4040

4141
import androidx.appcompat.app.AppCompatActivity;
4242

43+
import kotlin.Lazy;
44+
4345
import static com.google.android.gms.auth.api.signin.GoogleSignIn.getClient;
4446
import static com.google.android.gms.auth.api.signin.GoogleSignIn.getSignedInAccountFromIntent;
4547

4648
import static org.catrobat.catroid.web.ServerAuthenticationConstants.GOOGLE_LOGIN_CATROWEB_SERVER_CLIENT_ID;
4749
import static org.koin.java.KoinJavaComponent.inject;
4850

49-
import kotlin.Lazy;
50-
5151
public class GoogleLoginHandler {
5252

5353
private AppCompatActivity activity;

catroid/src/main/java/org/catrobat/catroid/transfers/MediaDownloadService.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -36,10 +36,10 @@
3636

3737
import java.io.IOException;
3838

39-
import static org.koin.java.KoinJavaComponent.inject;
40-
4139
import kotlin.Lazy;
4240

41+
import static org.koin.java.KoinJavaComponent.inject;
42+
4343
public class MediaDownloadService extends IntentService {
4444

4545
public static final String TAG = MediaDownloadService.class.getSimpleName();

0 commit comments

Comments
 (0)