Skip to content

Commit 2dc2855

Browse files
committed
fix(network): 修复 有多个域名时,无法根据请求的地址获取正确的域名的问题
1 parent 7009030 commit 2dc2855

File tree

7 files changed

+30
-32
lines changed

7 files changed

+30
-32
lines changed

src/main/kotlin/com/github/fastmirrorserver/controller/QueryController.kt

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ import org.springframework.web.bind.annotation.GetMapping
1010
import org.springframework.web.bind.annotation.PathVariable
1111
import org.springframework.web.bind.annotation.RequestParam
1212
import org.springframework.web.bind.annotation.RestController
13+
import javax.servlet.http.HttpServletRequest
1314

1415
@RestController
1516
class QueryController {
@@ -47,9 +48,10 @@ class QueryController {
4748
fun querySpecificArtifact(
4849
@PathVariable name: String,
4950
@PathVariable core_version: String,
50-
@PathVariable mc_version: String
51+
@PathVariable mc_version: String,
52+
request: HttpServletRequest
5153
) = database.getSpecificArtifact(name, mc_version, core_version)
52-
.toResponse()
54+
.toResponse(request)
5355

5456
@GetMapping(DOWNLOAD)
5557
@RawResponse

src/main/kotlin/com/github/fastmirrorserver/controller/UploadTaskController.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,8 +24,8 @@ class UploadTaskController {
2424

2525
@PostMapping(CREATE_TASK)
2626
@Authority(Permission.COLLECTOR)
27-
fun createTask(@RequestBody manifest: ManifestPOJO)
28-
= service.createTask(manifest)
27+
fun createTask(@RequestBody manifest: ManifestPOJO, request: HttpServletRequest)
28+
= service.createTask(manifest, request)
2929

3030
@PutMapping(UPLOAD)
3131
@Authority(Permission.COLLECTOR)

src/main/kotlin/com/github/fastmirrorserver/dto/Metadata.kt

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,8 @@
22

33
import com.fasterxml.jackson.annotation.JsonIgnore
44
import com.github.fastmirrorserver.controller.UploadTaskController
5-
import com.github.fastmirrorserver.util.assemblyURI
5+
import com.github.fastmirrorserver.util.assemblyURL
6+
import javax.servlet.http.HttpServletRequest
67

78
open class Metadata(
89
val name: String,
@@ -12,11 +13,10 @@ open class Metadata(
1213
@get:JsonIgnore
1314
val key: String get() = "$name-$mc_version-$core_version"
1415

15-
@get:JsonIgnore
16-
val upload_uri: String get() = assemblyURI(
17-
UploadTaskController.UPLOAD, mapOf(
18-
"name" to name,
19-
"mc_version" to mc_version,
20-
"core_version" to core_version
16+
fun uploadUrl(request: HttpServletRequest): String
17+
= request.assemblyURL(UploadTaskController.UPLOAD, mapOf(
18+
"name" to name,
19+
"mc_version" to mc_version,
20+
"core_version" to core_version
2121
))
2222
}

src/main/kotlin/com/github/fastmirrorserver/entity/Manifest.kt

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,14 @@
11
package com.github.fastmirrorserver.entity
22

33
import com.github.fastmirrorserver.controller.QueryController
4-
import com.github.fastmirrorserver.util.assemblyURI
4+
import com.github.fastmirrorserver.util.assemblyURL
55
import org.ktorm.entity.Entity
6-
import org.ktorm.schema.*
6+
import org.ktorm.schema.Table
7+
import org.ktorm.schema.boolean
8+
import org.ktorm.schema.datetime
9+
import org.ktorm.schema.varchar
710
import java.time.LocalDateTime
11+
import javax.servlet.http.HttpServletRequest
812

913
interface Manifest : Entity<Manifest> {
1014
companion object: Entity.Factory<Manifest>()
@@ -19,15 +23,14 @@ interface Manifest : Entity<Manifest> {
1923
var enable: Boolean
2024
}
2125

22-
fun Manifest.toResponse() = mapOf<String, Any>(
26+
fun Manifest.toResponse(request: HttpServletRequest) = mapOf<String, Any>(
2327
"name" to this.name,
2428
"mc_version" to this.mc_version,
2529
"core_version" to this.core_version,
2630
"update_time" to this.update_time,
2731
"sha1" to this.sha1,
2832
"filename" to this.filename,
29-
"download_url" to assemblyURI(
30-
QueryController.DOWNLOAD, mapOf(
33+
"download_url" to request.assemblyURL(QueryController.DOWNLOAD, mapOf(
3134
"name" to this.name,
3235
"mc_version" to this.mc_version,
3336
"core_version" to this.core_version,

src/main/kotlin/com/github/fastmirrorserver/service/AuthorizationService.kt

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,6 @@ import org.ktorm.database.Database
1212
import org.ktorm.dsl.eq
1313
import org.ktorm.entity.firstOrNull
1414
import org.ktorm.support.postgresql.bulkInsertOrUpdate
15-
import org.slf4j.LoggerFactory
1615
import org.springframework.beans.factory.annotation.Autowired
1716
import org.springframework.stereotype.Service
1817
import java.time.LocalDateTime
@@ -21,7 +20,6 @@ import javax.servlet.http.HttpServletResponse
2120

2221
@Service
2322
class AuthorizationService {
24-
private val logger = LoggerFactory.getLogger(AuthorizationService::class.java)
2523
@Autowired
2624
private lateinit var database: Database
2725
@Autowired
@@ -47,12 +45,6 @@ class AuthorizationService {
4745
* 同时检查账号密码(如果有)和session.
4846
*/
4947
fun verification(request: HttpServletRequest, response: HttpServletResponse): Traceback {
50-
trySetBasicURI(request) {
51-
if((scheme == "http" && serverPort == 80) ||(scheme == "https" && serverPort == 443))
52-
"$scheme://$serverName"
53-
else
54-
"$scheme://$serverName:$serverPort"
55-
}
5648
try { request.getAttribute("SESSION_ENTITY")?.let { return it as Traceback } } catch (_: Exception) { }
5749
val ip = request.remoteAddr
5850
val account = request.authorization?.let { getAccount(authorization = it) }

src/main/kotlin/com/github/fastmirrorserver/service/UploadTaskService.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@ class UploadTaskService {
4444
= pojo.update_time == manifest.update_time
4545
&& pojo.sha1 == manifest.sha1
4646

47-
fun createTask(pojo: ManifestPOJO): Map<String, String?> {
47+
fun createTask(pojo: ManifestPOJO, request: HttpServletRequest): Map<String, String?> {
4848
val entity = database.all_cores
4949
.querySpecificArtifact(pojo)
5050
.firstOrNull()
@@ -69,7 +69,7 @@ class UploadTaskService {
6969
}
7070
else insertOrUpdate(pojo) // 是 是 是 是 创建任务
7171

72-
val task = tasks.createTask(pojo, pojo.upload_uri) ?: throw ApiException.CONFLICT_TASK
72+
val task = tasks.createTask(pojo, pojo.uploadUrl(request)) ?: throw ApiException.CONFLICT_TASK
7373

7474
return mapOf(
7575
"upload_uri" to task.uri,

src/main/kotlin/com/github/fastmirrorserver/util/Network.kt

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -18,9 +18,10 @@ val HttpServletRequest.authorization get() = this
1818
throw ApiException.AUTH_METHOD_NOT_SUPPORTED
1919
return@let body
2020
}
21-
22-
private lateinit var basicURI: String
23-
fun trySetBasicURI(request: HttpServletRequest, lambda: HttpServletRequest.() -> String) {
24-
if(!::basicURI.isInitialized) basicURI = lambda(request)
25-
}
26-
fun assemblyURI(path: String, map: Map<String, String>) = "$basicURI$path".template(map)
21+
val HttpServletRequest.host get() =
22+
if((scheme == "http" && serverPort == 80) ||(scheme == "https" && serverPort == 443))
23+
"$scheme://$serverName"
24+
else
25+
"$scheme://$serverName:$serverPort"
26+
fun HttpServletRequest.assemblyURL(path: String, map: Map<String, String>)
27+
= "$host$path".template(map)

0 commit comments

Comments
 (0)