Skip to content

Commit cdbfc17

Browse files
committed
Idiomatic Kotlin for util package.
1 parent 155ed4b commit cdbfc17

File tree

7 files changed

+192
-278
lines changed

7 files changed

+192
-278
lines changed

server/src/main/kotlin/com/adobe/testing/s3mock/util/AbstractAwsInputStream.kt

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -91,13 +91,14 @@ abstract class AbstractAwsInputStream protected constructor(source: InputStream,
9191
protected fun extractAlgorithmAndChecksum() {
9292
if (algorithm == null && checksum == null) {
9393
readUntil(CHECKSUM_HEADER)
94-
val typeAndChecksum = readUntil(CRLF)
95-
val typeAndChecksumString = String(typeAndChecksum)
96-
if (!typeAndChecksumString.isBlank()) {
97-
val split: Array<String?> = typeAndChecksumString.split(":".toRegex()).dropLastWhile { it.isEmpty() }.toTypedArray()
98-
val type: String = split[0]!!
99-
algorithm = ChecksumAlgorithm.fromString(type)
100-
checksum = split[1]
94+
val headerLine = String(readUntil(CRLF))
95+
if (headerLine.isNotBlank()) {
96+
val sep = headerLine.indexOf(':')
97+
if (sep in 1 until headerLine.length - 1) {
98+
val type = headerLine.take(sep)
99+
algorithm = ChecksumAlgorithm.fromString(type)
100+
checksum = headerLine.substring(sep + 1)
101+
}
101102
}
102103
}
103104
}

server/src/main/kotlin/com/adobe/testing/s3mock/util/AwsChunkedDecodingChecksumInputStream.kt

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,10 @@ import java.io.InputStream
5454
*
5555
* @see [AwsChunkedEncodingInputStream](https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/core/internal/io/AwsChunkedEncodingInputStream.html)
5656
*/
57-
class AwsChunkedDecodingChecksumInputStream(source: InputStream, decodedLength: Long) : AbstractAwsInputStream(source, decodedLength) {
57+
class AwsChunkedDecodingChecksumInputStream(
58+
source: InputStream,
59+
decodedLength: Long
60+
) : AbstractAwsInputStream(source, decodedLength) {
5861
@Throws(IOException::class)
5962
override fun read(): Int {
6063
if (chunkLength == 0L) {
@@ -83,7 +86,5 @@ class AwsChunkedDecodingChecksumInputStream(source: InputStream, decodedLength:
8386
}
8487

8588
@Throws(IOException::class)
86-
private fun readHexLength(): ByteArray {
87-
return readUntil(DELIMITER)
88-
}
89+
private fun readHexLength(): ByteArray = readUntil(DELIMITER)
8990
}

server/src/main/kotlin/com/adobe/testing/s3mock/util/AwsUnsignedChunkedDecodingChecksumInputStream.kt

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -51,19 +51,22 @@ import java.io.InputStream
5151
* [hex-encoded-number-of-bytes-in-chunk][EOL]
5252
* [payload-bytes-of-this-chunk][EOL]
5353
* 0[EOL]
54-
* x-amz-checksum-[checksum-algoritm]:[checksum][EOL]
54+
* x-amz-checksum-[checksum-algorithm]:[checksum][EOL]
5555
* [other trail headers]
5656
* </pre>
5757
*
5858
* @see [
5959
* AwsUnsignedChunkedEncodingInputStream](https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/core/internal/io/AwsUnsignedChunkedEncodingInputStream.html)
6060
*/
61-
class AwsUnsignedChunkedDecodingChecksumInputStream(source: InputStream, decodedLength: Long) : AbstractAwsInputStream(source, decodedLength) {
61+
class AwsUnsignedChunkedDecodingChecksumInputStream(
62+
source: InputStream,
63+
decodedLength: Long
64+
) : AbstractAwsInputStream(source, decodedLength) {
6265
@Throws(IOException::class)
6366
override fun read(): Int {
6467
if (chunkLength == 0L) {
6568
// try to read chunk length
66-
val hexLengthBytes = readHexlength()
69+
val hexLengthBytes = readHexLength()
6770
if (hexLengthBytes.isEmpty()) {
6871
return -1
6972
}
@@ -86,7 +89,7 @@ class AwsUnsignedChunkedDecodingChecksumInputStream(source: InputStream, decoded
8689
}
8790

8891
@Throws(IOException::class)
89-
private fun readHexlength(): ByteArray {
92+
private fun readHexLength(): ByteArray {
9093
var hexLengthBytes = readUntil(CRLF)
9194
if (hexLengthBytes.isEmpty()) {
9295
hexLengthBytes = readUntil(CRLF)

server/src/main/kotlin/com/adobe/testing/s3mock/util/CannedAclUtil.kt

Lines changed: 54 additions & 118 deletions
Original file line numberDiff line numberDiff line change
@@ -30,144 +30,80 @@ import com.adobe.testing.s3mock.dto.Owner
3030
*/
3131
object CannedAclUtil {
3232
@JvmStatic
33-
fun policyForCannedAcl(cannedAcl: ObjectCannedACL): AccessControlPolicy {
34-
return when (cannedAcl) {
33+
fun policyForCannedAcl(cannedAcl: ObjectCannedACL): AccessControlPolicy =
34+
when (cannedAcl) {
3535
ObjectCannedACL.PRIVATE -> privateAcl()
3636
ObjectCannedACL.PUBLIC_READ -> publicReadAcl()
3737
ObjectCannedACL.PUBLIC_READ_WRITE -> publicReadWriteAcl()
3838
ObjectCannedACL.AWS_EXEC_READ -> awsExecReadAcl()
3939
ObjectCannedACL.AUTHENTICATED_READ -> authenticatedReadAcl()
4040
ObjectCannedACL.BUCKET_OWNER_READ -> bucketOwnerReadAcl()
41-
ObjectCannedACL.BUCKET_OWNER_FULL_CONTROL -> bucketOwnerFulleControlAcl()
41+
ObjectCannedACL.BUCKET_OWNER_FULL_CONTROL -> bucketOwnerFullControlAcl()
4242
}
43-
}
4443

45-
private fun bucketOwnerFulleControlAcl(): AccessControlPolicy {
46-
return AccessControlPolicy(
47-
Owner.DEFAULT_OWNER,
48-
listOf<Grant>(
49-
Grant(
50-
CanonicalUser(
51-
Owner.DEFAULT_OWNER.displayName, Owner.DEFAULT_OWNER.id
52-
),
53-
Grant.Permission.FULL_CONTROL
54-
),
55-
Grant(
56-
CanonicalUser(
57-
Owner.DEFAULT_OWNER_BUCKET.displayName, Owner.DEFAULT_OWNER_BUCKET.id
58-
),
59-
Grant.Permission.READ
60-
)
61-
)
44+
private val defaultOwner = Owner.DEFAULT_OWNER
45+
private val defaultOwnerUser = CanonicalUser(defaultOwner.displayName, defaultOwner.id)
46+
47+
private fun policyWithOwner(vararg additionalGrants: Grant): AccessControlPolicy =
48+
AccessControlPolicy(
49+
defaultOwner,
50+
listOf(Grant(defaultOwnerUser, Grant.Permission.FULL_CONTROL)) + additionalGrants
51+
)
52+
53+
private fun bucketOwnerFullControlAcl(): AccessControlPolicy =
54+
policyWithOwner(
55+
Grant(
56+
CanonicalUser(
57+
Owner.DEFAULT_OWNER_BUCKET.displayName,
58+
Owner.DEFAULT_OWNER_BUCKET.id
59+
),
60+
Grant.Permission.READ
61+
)
6262
)
63-
}
6463

65-
private fun bucketOwnerReadAcl(): AccessControlPolicy {
66-
return AccessControlPolicy(
67-
Owner.DEFAULT_OWNER,
68-
listOf<Grant>(
69-
Grant(
70-
CanonicalUser(
71-
Owner.DEFAULT_OWNER.displayName, Owner.DEFAULT_OWNER.id
72-
),
73-
Grant.Permission.FULL_CONTROL
74-
),
75-
Grant(
76-
CanonicalUser(
77-
Owner.DEFAULT_OWNER_BUCKET.displayName, Owner.DEFAULT_OWNER_BUCKET.id
78-
),
79-
Grant.Permission.READ
80-
)
81-
)
64+
private fun bucketOwnerReadAcl(): AccessControlPolicy =
65+
policyWithOwner(
66+
Grant(
67+
CanonicalUser(
68+
Owner.DEFAULT_OWNER_BUCKET.displayName,
69+
Owner.DEFAULT_OWNER_BUCKET.id
70+
),
71+
Grant.Permission.READ
72+
)
8273
)
83-
}
8474

85-
private fun authenticatedReadAcl(): AccessControlPolicy {
86-
return AccessControlPolicy(
87-
Owner.DEFAULT_OWNER,
88-
listOf<Grant>(
89-
Grant(
90-
CanonicalUser(
91-
Owner.DEFAULT_OWNER.displayName, Owner.DEFAULT_OWNER.id
92-
),
93-
Grant.Permission.FULL_CONTROL
94-
),
95-
Grant(
96-
Group(Group.AUTHENTICATED_USERS_URI),
97-
Grant.Permission.READ
98-
)
99-
)
75+
private fun authenticatedReadAcl(): AccessControlPolicy =
76+
policyWithOwner(
77+
Grant(
78+
Group(Group.AUTHENTICATED_USERS_URI),
79+
Grant.Permission.READ
80+
)
10081
)
101-
}
10282

10383
/**
10484
* The documentation says that EC2 gets READ access. Not sure what to configure for that.
10585
*/
106-
private fun awsExecReadAcl(): AccessControlPolicy {
107-
return AccessControlPolicy(
108-
Owner.DEFAULT_OWNER,
109-
listOf<Grant>(
110-
Grant(
111-
CanonicalUser(
112-
Owner.DEFAULT_OWNER.displayName, Owner.DEFAULT_OWNER.id
113-
),
114-
Grant.Permission.FULL_CONTROL
115-
)
116-
)
117-
)
118-
}
86+
private fun awsExecReadAcl(): AccessControlPolicy = policyWithOwner()
11987

120-
private fun publicReadWriteAcl(): AccessControlPolicy {
121-
return AccessControlPolicy(
122-
Owner.DEFAULT_OWNER,
123-
listOf<Grant>(
124-
Grant(
125-
CanonicalUser(
126-
Owner.DEFAULT_OWNER.displayName, Owner.DEFAULT_OWNER.id
127-
),
128-
Grant.Permission.FULL_CONTROL
129-
),
130-
Grant(
131-
Group(Group.ALL_USERS_URI),
132-
Grant.Permission.READ
133-
),
134-
Grant(
135-
Group(Group.ALL_USERS_URI),
136-
Grant.Permission.WRITE
137-
)
138-
)
88+
private fun publicReadWriteAcl(): AccessControlPolicy =
89+
policyWithOwner(
90+
Grant(
91+
Group(Group.ALL_USERS_URI),
92+
Grant.Permission.READ
93+
),
94+
Grant(
95+
Group(Group.ALL_USERS_URI),
96+
Grant.Permission.WRITE
97+
)
13998
)
140-
}
14199

142-
private fun publicReadAcl(): AccessControlPolicy {
143-
return AccessControlPolicy(
144-
Owner.DEFAULT_OWNER,
145-
listOf<Grant>(
146-
Grant(
147-
CanonicalUser(
148-
Owner.DEFAULT_OWNER.displayName, Owner.DEFAULT_OWNER.id
149-
),
150-
Grant.Permission.FULL_CONTROL
151-
),
152-
Grant(
153-
Group(Group.ALL_USERS_URI),
154-
Grant.Permission.READ
155-
)
156-
)
100+
private fun publicReadAcl(): AccessControlPolicy =
101+
policyWithOwner(
102+
Grant(
103+
Group(Group.ALL_USERS_URI),
104+
Grant.Permission.READ
105+
)
157106
)
158-
}
159107

160-
private fun privateAcl(): AccessControlPolicy {
161-
return AccessControlPolicy(
162-
Owner.DEFAULT_OWNER,
163-
listOf<Grant>(
164-
Grant(
165-
CanonicalUser(
166-
Owner.DEFAULT_OWNER.displayName, Owner.DEFAULT_OWNER.id
167-
),
168-
Grant.Permission.FULL_CONTROL
169-
)
170-
)
171-
)
172-
}
108+
private fun privateAcl(): AccessControlPolicy = policyWithOwner()
173109
}

0 commit comments

Comments
 (0)