Skip to content

Commit 02b4a5b

Browse files
committed
Make allowed origins more flexible
1 parent d27f0dc commit 02b4a5b

31 files changed

+12
-42
lines changed

backend/src/main/kotlin/hu/bme/sch/cmsch/component/app/ApplicationApiController.kt

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,6 @@ import org.springframework.http.HttpHeaders
1111
import org.springframework.http.HttpStatusCode
1212
import org.springframework.http.ResponseEntity
1313
import org.springframework.security.core.Authentication
14-
import org.springframework.web.bind.annotation.CrossOrigin
1514
import org.springframework.web.bind.annotation.GetMapping
1615
import org.springframework.web.bind.annotation.RequestMapping
1716
import org.springframework.web.bind.annotation.RestController
@@ -20,7 +19,6 @@ import java.util.*
2019

2120
@RestController
2221
@RequestMapping("/api")
23-
@CrossOrigin(origins = ["\${cmsch.frontend.production-url}"], allowedHeaders = ["*"])
2422
class ApplicationApiController(
2523
private val menuService: MenuService,
2624
private val applicationComponent: ApplicationComponent,

backend/src/main/kotlin/hu/bme/sch/cmsch/component/app/ManifestApiController.kt

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
package hu.bme.sch.cmsch.component.app
22

33
import org.springframework.boot.autoconfigure.condition.ConditionalOnBean
4-
import org.springframework.web.bind.annotation.CrossOrigin
54
import org.springframework.web.bind.annotation.GetMapping
65
import org.springframework.web.bind.annotation.RequestMapping
76
import org.springframework.web.bind.annotation.RestController
@@ -10,7 +9,6 @@ const val IMAGE_PNG = "image/png"
109

1110
@RestController
1211
@RequestMapping("/manifest")
13-
@CrossOrigin(origins = ["\${cmsch.frontend.production-url}"], allowedHeaders = ["*"])
1412
@ConditionalOnBean(ApplicationComponent::class)
1513
class ManifestApiController(
1614
private val manifestComponent: ManifestComponent,

backend/src/main/kotlin/hu/bme/sch/cmsch/component/app/SettingsApiController.kt

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,6 @@ import org.springframework.web.bind.annotation.*
77

88
@RestController
99
@RequestMapping("/admin/api/settings")
10-
@CrossOrigin(origins = ["\${cmsch.frontend.production-url}"], allowedHeaders = ["*"])
1110
class SettingsApiController(
1211
private val adminMenuService: AdminMenuService
1312
) {

backend/src/main/kotlin/hu/bme/sch/cmsch/component/app/WarningApiController.kt

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,14 +3,12 @@ package hu.bme.sch.cmsch.component.app
33
import com.fasterxml.jackson.annotation.JsonView
44
import hu.bme.sch.cmsch.dto.Preview
55
import org.springframework.boot.autoconfigure.condition.ConditionalOnBean
6-
import org.springframework.web.bind.annotation.CrossOrigin
76
import org.springframework.web.bind.annotation.GetMapping
87
import org.springframework.web.bind.annotation.RequestMapping
98
import org.springframework.web.bind.annotation.RestController
109

1110
@RestController
1211
@RequestMapping("/api")
13-
@CrossOrigin(origins = ["\${cmsch.frontend.production-url}"], allowedHeaders = ["*"])
1412
@ConditionalOnBean(ApplicationComponent::class)
1513
class WarningApiController(
1614
private val applicationComponent: ApplicationComponent

backend/src/main/kotlin/hu/bme/sch/cmsch/component/communities/CommunitiesApiController.kt

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,6 @@ import org.springframework.web.bind.annotation.*
88

99
@RestController
1010
@RequestMapping("/api")
11-
@CrossOrigin(origins = ["\${cmsch.frontend.production-url}"], allowedHeaders = ["*"])
1211
@ConditionalOnBean(CommunitiesComponent::class)
1312
class CommunitiesApiController(
1413
private val organizationService: OrganizationService

backend/src/main/kotlin/hu/bme/sch/cmsch/component/debt/DebtApiController.kt

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,14 +5,12 @@ import hu.bme.sch.cmsch.dto.FullDetails
55
import hu.bme.sch.cmsch.util.getUser
66
import org.springframework.boot.autoconfigure.condition.ConditionalOnBean
77
import org.springframework.security.core.Authentication
8-
import org.springframework.web.bind.annotation.CrossOrigin
98
import org.springframework.web.bind.annotation.GetMapping
109
import org.springframework.web.bind.annotation.RequestMapping
1110
import org.springframework.web.bind.annotation.RestController
1211

1312
@RestController
1413
@RequestMapping("/api")
15-
@CrossOrigin(origins = ["\${cmsch.frontend.production-url}"], allowedHeaders = ["*"])
1614
@ConditionalOnBean(DebtComponent::class)
1715
class DebtApiController(
1816
private val debtsRepository: SoldProductRepository

backend/src/main/kotlin/hu/bme/sch/cmsch/component/event/EventApiController.kt

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,6 @@ import org.springframework.web.bind.annotation.*
1616

1717
@RestController
1818
@RequestMapping("/api")
19-
@CrossOrigin(origins = ["\${cmsch.frontend.production-url}"], allowedHeaders = ["*"])
2019
@ConditionalOnBean(EventComponent::class)
2120
class EventApiController(
2221
private val eventComponent: EventComponent,

backend/src/main/kotlin/hu/bme/sch/cmsch/component/form/FormApiController.kt

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,6 @@ import org.springframework.web.bind.annotation.*
1212

1313
@RestController
1414
@RequestMapping("/api")
15-
@CrossOrigin(origins = ["\${cmsch.frontend.production-url}"], allowedHeaders = ["*"])
1615
@ConditionalOnBean(FormComponent::class)
1716
class FormApiController(
1817
private val formService: FormService

backend/src/main/kotlin/hu/bme/sch/cmsch/component/gallery/GalleryApiController.kt

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,14 +11,12 @@ import org.springframework.boot.autoconfigure.condition.ConditionalOnBean
1111
import org.springframework.http.HttpStatus
1212
import org.springframework.http.ResponseEntity
1313
import org.springframework.security.core.Authentication
14-
import org.springframework.web.bind.annotation.CrossOrigin
1514
import org.springframework.web.bind.annotation.GetMapping
1615
import org.springframework.web.bind.annotation.RequestMapping
1716
import org.springframework.web.bind.annotation.RestController
1817

1918
@RestController
2019
@RequestMapping("/api")
21-
@CrossOrigin(origins = ["\${cmsch.frontend.production-url}"], allowedHeaders = ["*"])
2220
@ConditionalOnBean(GalleryComponent::class)
2321
class GalleryApiController(
2422
private val galleryComponent: GalleryComponent,

backend/src/main/kotlin/hu/bme/sch/cmsch/component/groupselection/GroupSelectionApiController.kt

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,6 @@ import java.util.*
99

1010
@RestController
1111
@RequestMapping("/api")
12-
@CrossOrigin(origins = ["\${cmsch.frontend.production-url}"], allowedHeaders = ["*"])
1312
@ConditionalOnBean(GroupSelectionComponent::class)
1413
class GroupSelectionApiController(
1514
private val groupSelectionService: GroupSelectionService,

backend/src/main/kotlin/hu/bme/sch/cmsch/component/home/HomeApiController.kt

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,15 +7,13 @@ import hu.bme.sch.cmsch.dto.Preview
77
import hu.bme.sch.cmsch.util.getUserOrNull
88
import org.springframework.boot.autoconfigure.condition.ConditionalOnBean
99
import org.springframework.security.core.Authentication
10-
import org.springframework.web.bind.annotation.CrossOrigin
1110
import org.springframework.web.bind.annotation.GetMapping
1211
import org.springframework.web.bind.annotation.RequestMapping
1312
import org.springframework.web.bind.annotation.RestController
1413
import java.util.*
1514

1615
@RestController
1716
@RequestMapping("/api")
18-
@CrossOrigin(origins = ["\${cmsch.frontend.production-url}"], allowedHeaders = ["*"])
1917
@ConditionalOnBean(HomeComponent::class)
2018
class HomeApiController(
2119
private val newsService: Optional<NewsService>,

backend/src/main/kotlin/hu/bme/sch/cmsch/component/key/AccessKeyApiController.kt

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,6 @@ import org.springframework.web.bind.annotation.*
1010

1111
@RestController
1212
@RequestMapping("/api")
13-
@CrossOrigin(origins = ["\${cmsch.frontend.production-url}"], allowedHeaders = ["*"])
1413
@ConditionalOnBean(AccessKeyComponent::class)
1514
class AccessKeyApiController(
1615
private val accessKeyComponent: AccessKeyComponent,

backend/src/main/kotlin/hu/bme/sch/cmsch/component/leaderboard/LeaderBoardApiController.kt

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,14 +9,12 @@ import org.springframework.boot.autoconfigure.condition.ConditionalOnBean
99
import org.springframework.http.HttpStatus
1010
import org.springframework.http.ResponseEntity
1111
import org.springframework.security.core.Authentication
12-
import org.springframework.web.bind.annotation.CrossOrigin
1312
import org.springframework.web.bind.annotation.GetMapping
1413
import org.springframework.web.bind.annotation.RequestMapping
1514
import org.springframework.web.bind.annotation.RestController
1615

1716
@RestController
1817
@RequestMapping("/api")
19-
@CrossOrigin(origins = ["\${cmsch.frontend.production-url}"], allowedHeaders = ["*"])
2018
@ConditionalOnBean(LeaderBoardComponent::class)
2119
class LeaderBoardApiController(
2220
private val leaderBoardService: LeaderBoardService,

backend/src/main/kotlin/hu/bme/sch/cmsch/component/location/LocationApiController.kt

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,6 @@ class LocationApiController(
2121
return locationService.pushLocation(payload)
2222
}
2323

24-
@CrossOrigin(origins = ["\${cmsch.frontend.production-url}"], allowedHeaders = ["*"])
2524
@GetMapping("/track-my-group")
2625
fun trackMyGroup(auth: Authentication?): List<MapMarker> {
2726
val user = auth?.getUserOrNull() ?: return listOf()

backend/src/main/kotlin/hu/bme/sch/cmsch/component/login/AuthschLoginController.kt

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,6 @@ import org.springframework.http.ResponseEntity
1313
import org.springframework.security.core.Authentication
1414
import org.springframework.security.core.context.SecurityContextHolder
1515
import org.springframework.stereotype.Controller
16-
import org.springframework.web.bind.annotation.CrossOrigin
1716
import org.springframework.web.bind.annotation.GetMapping
1817
import org.springframework.web.bind.annotation.PostMapping
1918
import org.springframework.web.bind.annotation.ResponseBody
@@ -88,7 +87,6 @@ class AuthschLoginController(
8887
}
8988

9089
@ResponseBody
91-
@CrossOrigin(origins = ["\${cmsch.frontend.production-url}"], allowedHeaders = ["*"])
9290
@PostMapping("/api/control/refresh")
9391
fun refreshToken(auth: Authentication?): ResponseEntity<String> {
9492
if (auth == null)

backend/src/main/kotlin/hu/bme/sch/cmsch/component/news/NewsApiController.kt

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,6 @@ import org.springframework.web.bind.annotation.*
1616

1717
@RestController
1818
@RequestMapping("/api")
19-
@CrossOrigin(origins = ["\${cmsch.frontend.production-url}"], allowedHeaders = ["*"])
2019
@ConditionalOnBean(NewsComponent::class)
2120
class NewsApiController(
2221
private val newsService: NewsService,

backend/src/main/kotlin/hu/bme/sch/cmsch/component/profile/ProfileApiController.kt

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,6 @@ import org.springframework.web.bind.annotation.*
1414

1515
@RestController
1616
@RequestMapping("/api")
17-
@CrossOrigin(origins = ["\${cmsch.frontend.production-url}"], allowedHeaders = ["*"])
1817
@ConditionalOnBean(ProfileComponent::class)
1918
class ProfileApiController(
2019
private val profileService: ProfileService,

backend/src/main/kotlin/hu/bme/sch/cmsch/component/pushnotification/PushNotificationApiController.kt

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,15 +9,13 @@ import org.springframework.http.HttpStatus
99
import org.springframework.http.ResponseEntity
1010
import org.springframework.security.core.Authentication
1111
import org.springframework.stereotype.Controller
12-
import org.springframework.web.bind.annotation.CrossOrigin
1312
import org.springframework.web.bind.annotation.PostMapping
1413
import org.springframework.web.bind.annotation.RequestBody
1514
import org.springframework.web.bind.annotation.RequestMapping
1615

1716
@Controller
1817
@ConditionalOnBean(PushNotificationComponent::class)
1918
@RequestMapping("/api/pushnotification/")
20-
@CrossOrigin(origins = ["\${cmsch.frontend.production-url}"], allowedHeaders = ["*"])
2119
class PushNotificationApiController(
2220
private val notificationService: PushNotificationService,
2321
private val notificationComponent: PushNotificationComponent

backend/src/main/kotlin/hu/bme/sch/cmsch/component/qrfight/QrFightApiController.kt

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,6 @@ import org.springframework.web.bind.annotation.*
1212

1313
@RestController
1414
@RequestMapping("/api")
15-
@CrossOrigin(origins = ["\${cmsch.frontend.production-url}"], allowedHeaders = ["*"])
1615
@ConditionalOnBean(QrFightComponent::class)
1716
class QrFightApiController(
1817
private val qrFightComponent: QrFightComponent,

backend/src/main/kotlin/hu/bme/sch/cmsch/component/race/RaceApiController.kt

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,6 @@ import org.springframework.web.bind.annotation.*
1414

1515
@RestController
1616
@RequestMapping("/api")
17-
@CrossOrigin(origins = ["\${cmsch.frontend.production-url}"], allowedHeaders = ["*"])
1817
@ConditionalOnBean(RaceComponent::class)
1918
class RaceApiController(
2019
private val raceService: RaceService,

backend/src/main/kotlin/hu/bme/sch/cmsch/component/riddle/RiddleApiController.kt

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,6 @@ import org.springframework.web.bind.annotation.*
1414

1515
@RestController
1616
@RequestMapping("/api")
17-
@CrossOrigin(origins = ["\${cmsch.frontend.production-url}"], allowedHeaders = ["*"])
1817
@ConditionalOnBean(RiddleComponent::class)
1918
class RiddleApiController(
2019
private val riddleService: ConcurrentRiddleService,

backend/src/main/kotlin/hu/bme/sch/cmsch/component/staticpage/StaticPageApiController.kt

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,6 @@ import org.springframework.web.bind.annotation.*
1515

1616
@RestController
1717
@RequestMapping("/api")
18-
@CrossOrigin(origins = ["\${cmsch.frontend.production-url}"], allowedHeaders = ["*"])
1918
@ConditionalOnBean(StaticPageComponent::class)
2019
class StaticPageApiController(
2120
private val staticPageService: StaticPageService,

backend/src/main/kotlin/hu/bme/sch/cmsch/component/task/TaskApiController.kt

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,6 @@ import java.util.*
1717

1818
@RestController
1919
@RequestMapping("/api")
20-
@CrossOrigin(origins = ["\${cmsch.frontend.production-url}"], allowedHeaders = ["*"])
2120
@ConditionalOnBean(TaskComponent::class)
2221
class TaskApiController(
2322
private val leaderBoardService: Optional<LeaderBoardService>,

backend/src/main/kotlin/hu/bme/sch/cmsch/component/team/TeamApiController.kt

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,6 @@ import org.springframework.web.multipart.MultipartFile
1212

1313
@RestController
1414
@RequestMapping("/api")
15-
@CrossOrigin(origins = ["\${cmsch.frontend.production-url}"], allowedHeaders = ["*"])
1615
@ConditionalOnBean(TeamComponent::class)
1716
class TeamApiController(
1817
private val teamComponent: TeamComponent,

backend/src/main/kotlin/hu/bme/sch/cmsch/component/token/TokenApiController.kt

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,6 @@ const val SESSION_TOKEN_COLLECTOR_ATTRIBUTE = "TOKEN_COLLECTOR_ATTRIBUTE"
2121

2222
@Controller
2323
@RequestMapping("/api")
24-
@CrossOrigin(origins = ["\${cmsch.frontend.production-url}"], allowedHeaders = ["*"])
2524
@ConditionalOnBean(TokenComponent::class)
2625
class TokenApiController(
2726
private val tokens: TokenCollectorService,

backend/src/main/kotlin/hu/bme/sch/cmsch/config/WebMvcConfig.kt

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -11,19 +11,23 @@ import java.time.Duration
1111
@Configuration
1212
class WebMvcConfig(
1313
private val startupPropertyConfig: StartupPropertyConfig,
14-
@Value("\${cmsch.frontend.production-url:*}") private val productionUrl: String
14+
@Value("\${cmsch.frontend.production-url:*}") private val productionUrl: String,
15+
@Value("\${cmsch.backend.allowed-origin-patterns:*}") private val allowedOrigins: List<String>
1516
) : WebMvcConfigurer {
1617

1718
override fun addResourceHandlers(registry: ResourceHandlerRegistry) {
1819
val handler = registry.addResourceHandler("/cdn/**")
19-
.addResourceLocations("file:${startupPropertyConfig.external}")
20+
.addResourceLocations("file:${startupPropertyConfig.external}")
2021
if (startupPropertyConfig.cdnCacheMaxAge > 0) {
2122
handler.setCacheControl(CacheControl.maxAge(Duration.ofSeconds(startupPropertyConfig.cdnCacheMaxAge)))
2223
}
2324
}
2425

2526
override fun addCorsMappings(registry: CorsRegistry) {
26-
registry.addMapping("/cdn/**")
27-
.allowedOrigins(productionUrl)
27+
arrayOf("/api/**", "/manifest/**", "/cdn/**").forEach {
28+
registry.addMapping(it)
29+
.allowedOrigins(productionUrl)
30+
.allowedOriginPatterns(*allowedOrigins.toTypedArray())
31+
}
2832
}
2933
}

backend/src/main/kotlin/hu/bme/sch/cmsch/controller/MainApiController.kt

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,6 @@ val UNKNOWN_USER = UserEntity(0, fullName = "Feature Not Available")
1010

1111
@RestController
1212
@RequestMapping("/api")
13-
@CrossOrigin(origins = ["\${cmsch.frontend.production-url}"], allowedHeaders = ["*"])
1413
class MainApiController(
1514
private val clock: TimeService
1615
) {

backend/src/main/resources/config/application-docker.properties

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ hu.bme.sch.cmsch.startup.mailgun-token=${MAILGUN_TOKEN}
2020
hu.bme.sch.cmsch.startup.sysadmins=${SYSADMINS:6af3c8b0-592c-6864-8dd9-5f354edfc0be}
2121
hu.bme.sch.cmsch.login.googleAdminAddresses=${GOOGLE_ADMIN_ADDRESSES:}
2222
cmsch.frontend.production-url=${FRONTEND_URL}
23+
cmsch.backend.allowed-origin-patterns=${ALLOWED_ORIGIN_PATTERNS:}
2324
hu.bme.sch.cmsch.app.siteUrl=${FRONTEND_URL}/
2425
hu.bme.sch.cmsch.app.adminSiteUrl=${BACKEND_URL:http://127.0.0.1:8080/}
2526
spring.security.oauth2.client.registration.google.redirect-uri=${BACKEND_URL:http://127.0.0.1:8080/}login/oauth2/code/google

backend/src/main/resources/config/application.properties

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ server.error.path=/error
2626

2727
# Env vars - used mainly on frontend
2828
cmsch.frontend.production-url=http://127.0.0.1:3000
29-
cmsch.backend.production-url=https://gkorte.sch.bme.hu
29+
cmsch.backend.allowed-origin-patterns=http://127.0.0.1:3000,http://localhost:3000
3030
cmsch.frontend.kirdev-url=https://kir-dev.sch.bme.hu
3131
cmsch.frontend.bugreport-url=https://kir-dev.sch.bme.hu/about#contact
3232

frontend/.env.example

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
VITE_API_BASE_URL=http://127.0.0.1:8080
1+
VITE_API_BASE_URL=http://localhost:8080
22
VITE_BUGREPORT_URL='https://kir-dev.hu/about/contact'
33
VITE_NAME="CMSch Web"
44
VITE_DESCRIPTION="CMSch Web"

frontend/vite.config.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ export default defineConfig({
66
plugins: [react()],
77
server: {
88
host: '0.0.0.0',
9-
open: 'http://127.0.0.1:3000',
9+
open: true,
1010
port: 3000
1111
},
1212
preview: {

0 commit comments

Comments
 (0)