Skip to content
GitLab
Menu
Projects
Groups
Snippets
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Menu
Open sidebar
briar
briar
Commits
2ab03f48
Commit
2ab03f48
authored
Oct 24, 2018
by
akwizgran
Browse files
Merge branch '1256-remove-contact' into 'master'
briar-headless: Add endpoint for removing a contact See merge request
!962
parents
822597b4
436f4555
Pipeline
#2607
passed with stage
in 11 minutes and 11 seconds
Changes
8
Pipelines
1
Hide whitespace changes
Inline
Side-by-side
briar-headless/README.md
View file @
2ab03f48
...
...
@@ -72,9 +72,16 @@ Returns a JSON array of contacts:
The only workaround is to add a contact to the Briar app running on a rooted Android phone
and then move its database (and key files) to the headless peer.
### Removing a contact
`DELETE /v1/contacts/{contactId}`
The
`{contactId}`
is the
`contactId`
of the contact (
`1`
in the example above).
It returns with a status code
`200`
, if removal was successful.
### Listing all private messages
`GET /messages/{contactId}`
`GET
/v1
/messages/{contactId}`
The
`{contactId}`
is the
`contactId`
of the contact (
`1`
in the example above).
It returns a JSON array of private messages:
...
...
@@ -100,7 +107,7 @@ Attention: There can messages of other `type`s where the message `text` is `null
### Writing a private message
`POST /messages/{contactId}`
`POST
/v1
/messages/{contactId}`
The text of the message should be posted as JSON:
...
...
briar-headless/build.gradle
View file @
2ab03f48
plugins
{
id
'java'
id
'idea'
id
'org.jetbrains.kotlin.jvm'
version
'1.2.7
0
'
id
'org.jetbrains.kotlin.kapt'
version
'1.2.7
0
'
id
'org.jetbrains.kotlin.jvm'
version
'1.2.7
1
'
id
'org.jetbrains.kotlin.kapt'
version
'1.2.7
1
'
id
'witness'
}
apply
from:
'witness.gradle'
...
...
@@ -14,9 +14,9 @@ dependencies {
implementation
project
(
path:
':briar-core'
,
configuration:
'default'
)
implementation
project
(
path:
':bramble-java'
,
configuration:
'default'
)
implementation
'io.javalin:javalin:2.
2
.0'
implementation
'io.javalin:javalin:2.
3
.0'
implementation
'org.slf4j:slf4j-simple:1.7.25'
implementation
'com.fasterxml.jackson.core:jackson-databind:2.9.
6
'
implementation
'com.fasterxml.jackson.core:jackson-databind:2.9.
7
'
implementation
'com.github.ajalt:clikt:1.5.0'
kapt
'com.google.dagger:dagger-compiler:2.0.2'
...
...
@@ -24,11 +24,11 @@ dependencies {
testImplementation
project
(
path:
':bramble-api'
,
configuration:
'testOutput'
)
testImplementation
project
(
path:
':bramble-core'
,
configuration:
'testOutput'
)
def
junitVersion
=
'5.
2.0
'
def
junitVersion
=
'5.
3.1
'
testImplementation
"org.junit.jupiter:junit-jupiter-api:$junitVersion"
testImplementation
"org.junit.jupiter:junit-jupiter-params:$junitVersion"
testRuntime
"org.junit.jupiter:junit-jupiter-engine:$junitVersion"
testImplementation
"io.mockk:mockk:1.8.
6
"
testImplementation
"io.mockk:mockk:1.8.
9
"
testImplementation
"org.skyscreamer:jsonassert:1.5.0"
}
...
...
briar-headless/src/main/java/org/briarproject/briar/headless/Router.kt
View file @
2ab03f48
...
...
@@ -7,9 +7,11 @@ import io.javalin.Context
import
io.javalin.Javalin
import
io.javalin.JavalinEvent.SERVER_START_FAILED
import
io.javalin.JavalinEvent.SERVER_STOPPED
import
io.javalin.NotFoundResponse
import
io.javalin.apibuilder.ApiBuilder.*
import
io.javalin.core.util.ContextUtil
import
io.javalin.core.util.Header.AUTHORIZATION
import
org.briarproject.bramble.api.contact.ContactId
import
org.briarproject.briar.headless.blogs.BlogController
import
org.briarproject.briar.headless.contact.ContactController
import
org.briarproject.briar.headless.event.WebSocketController
...
...
@@ -63,6 +65,9 @@ constructor(
path
(
"/v1"
)
{
path
(
"/contacts"
)
{
get
{
ctx
->
contactController
.
list
(
ctx
)
}
path
(
"/:contactId"
)
{
delete
{
ctx
->
contactController
.
delete
(
ctx
)
}
}
}
path
(
"/messages/:contactId"
)
{
get
{
ctx
->
messagingController
.
list
(
ctx
)
}
...
...
@@ -112,6 +117,21 @@ constructor(
}
/**
* Returns a [ContactId] from the "contactId" path parameter.
*
* @throws NotFoundResponse when contactId is not a number.
*/
fun
Context
.
getContactIdFromPathParam
():
ContactId
{
val
contactString
=
pathParam
(
"contactId"
)
val
contactInt
=
try
{
Integer
.
parseInt
(
contactString
)
}
catch
(
e
:
NumberFormatException
)
{
throw
NotFoundResponse
()
}
return
ContactId
(
contactInt
)
}
/**
* Returns a String from the JSON field or throws [BadRequestResponse] if null or empty.
*/
...
...
briar-headless/src/main/java/org/briarproject/briar/headless/contact/ContactController.kt
View file @
2ab03f48
...
...
@@ -5,5 +5,6 @@ import io.javalin.Context
interface
ContactController
{
fun
list
(
ctx
:
Context
):
Context
fun
delete
(
ctx
:
Context
):
Context
}
briar-headless/src/main/java/org/briarproject/briar/headless/contact/ContactControllerImpl.kt
View file @
2ab03f48
package
org.briarproject.briar.headless.contact
import
io.javalin.Context
import
io.javalin.NotFoundResponse
import
org.briarproject.bramble.api.contact.ContactManager
import
org.briarproject.bramble.api.db.NoSuchContactException
import
org.briarproject.briar.headless.getContactIdFromPathParam
import
javax.annotation.concurrent.Immutable
import
javax.inject.Inject
import
javax.inject.Singleton
...
...
@@ -19,4 +22,14 @@ constructor(private val contactManager: ContactManager) : ContactController {
return
ctx
.
json
(
contacts
)
}
override
fun
delete
(
ctx
:
Context
):
Context
{
val
contactId
=
ctx
.
getContactIdFromPathParam
()
try
{
contactManager
.
removeContact
(
contactId
)
}
catch
(
e
:
NoSuchContactException
)
{
throw
NotFoundResponse
()
}
return
ctx
}
}
briar-headless/src/main/java/org/briarproject/briar/headless/messaging/MessagingControllerImpl.kt
View file @
2ab03f48
...
...
@@ -26,6 +26,7 @@ import org.briarproject.briar.api.privategroup.invitation.GroupInvitationRequest
import
org.briarproject.briar.api.privategroup.invitation.GroupInvitationResponse
import
org.briarproject.briar.headless.event.WebSocketController
import
org.briarproject.briar.headless.event.output
import
org.briarproject.briar.headless.getContactIdFromPathParam
import
org.briarproject.briar.headless.getFromJson
import
org.briarproject.briar.headless.json.JsonDict
import
java.util.concurrent.Executor
...
...
@@ -84,13 +85,7 @@ constructor(
}
private
fun
getContact
(
ctx
:
Context
):
Contact
{
val
contactString
=
ctx
.
pathParam
(
"contactId"
)
val
contactInt
=
try
{
Integer
.
parseInt
(
contactString
)
}
catch
(
e
:
NumberFormatException
)
{
throw
NotFoundResponse
()
}
val
contactId
=
ContactId
(
contactInt
)
val
contactId
=
ctx
.
getContactIdFromPathParam
()
return
try
{
contactManager
.
getContact
(
contactId
)
}
catch
(
e
:
NoSuchContactException
)
{
...
...
briar-headless/src/test/java/org/briarproject/briar/headless/contact/ContactControllerTest.kt
View file @
2ab03f48
package
org.briarproject.briar.headless.contact
import
io.javalin.NotFoundResponse
import
io.javalin.json.JavalinJson.toJson
import
io.mockk.Runs
import
io.mockk.every
import
io.mockk.just
import
org.briarproject.bramble.api.contact.Contact
import
org.briarproject.bramble.api.contact.ContactId
import
org.briarproject.bramble.api.db.NoSuchContactException
import
org.briarproject.bramble.identity.output
import
org.briarproject.briar.headless.ControllerTest
import
org.junit.jupiter.api.Assertions.assertThrows
import
org.junit.jupiter.api.Test
internal
class
ContactControllerTest
:
ControllerTest
()
{
...
...
@@ -25,6 +31,30 @@ internal class ContactControllerTest : ControllerTest() {
controller
.
list
(
ctx
)
}
@Test
fun
testDelete
()
{
every
{
ctx
.
pathParam
(
"contactId"
)
}
returns
"1"
every
{
contactManager
.
removeContact
(
ContactId
(
1
))
}
just
Runs
controller
.
delete
(
ctx
)
}
@Test
fun
testDeleteInvalidContactId
()
{
every
{
ctx
.
pathParam
(
"contactId"
)
}
returns
"foo"
assertThrows
(
NotFoundResponse
::
class
.
java
)
{
controller
.
delete
(
ctx
)
}
}
@Test
fun
testDeleteNonexistentContactId
()
{
every
{
ctx
.
pathParam
(
"contactId"
)
}
returns
"1"
every
{
contactManager
.
removeContact
(
ContactId
(
1
))
}
throws
NoSuchContactException
()
assertThrows
(
NotFoundResponse
::
class
.
java
)
{
controller
.
delete
(
ctx
)
}
}
@Test
fun
testOutputContact
()
{
val
json
=
"""
...
...
briar-headless/witness.gradle
View file @
2ab03f48
dependencyVerification
{
verify
=
[
'com.fasterxml.jackson.core:jackson-annotations:2.9.0:jackson-annotations-2.9.0.jar:45d32ac61ef8a744b464c54c2b3414be571016dd46bfc2bec226761cf7ae457a'
,
'com.fasterxml.jackson.core:jackson-core:2.9.
6
:jackson-core-2.9.
6
.jar:
fab8746aedd6427788ee390ea04d438ec141bff7eb3476f8bdd5d9110fb2718a
'
,
'com.fasterxml.jackson.core:jackson-databind:2.9.
6
:jackson-databind-2.9.
6
.jar:6
57e3e979446d61f88432b9c50f0ccd9c1fe4f1c822d533f5572e4c0d172a125
'
,
'com.fasterxml.jackson.core:jackson-core:2.9.
7
:jackson-core-2.9.
7
.jar:
9e5bc0efabd9f0cac5c1fdd9ae35b16332ed22a0ee19a356de370a18a8cb6c84
'
,
'com.fasterxml.jackson.core:jackson-databind:2.9.
7
:jackson-databind-2.9.
7
.jar:6
75376decfc070b039d2be773a97002f1ee1e1346d95bd99feee0d56683a92bf
'
,
'com.github.ajalt:clikt:1.5.0:clikt-1.5.0.jar:f13ab614cb0372229f6bb1e19aa98ee6f4ac96f253d0e72d482ee4f5fd2a13a9'
,
'com.google.dagger:dagger-compiler:2.0.2:dagger-compiler-2.0.2.jar:b74bc9de063dd4c6400b232231f2ef5056145b8fbecbf5382012007dd1c071b3'
,
'com.google.dagger:dagger-producers:2.0-beta:dagger-producers-2.0-beta.jar:99ec15e8a0507ba569e7655bc1165ee5e5ca5aa914b3c8f7e2c2458f724edd6b'
,
'com.google.dagger:dagger:2.0.2:dagger-2.0.2.jar:84c0282ed8be73a29e0475d639da030b55dee72369e58dd35ae7d4fe6243dcf9'
,
'com.google.guava:guava:18.0:guava-18.0.jar:d664fbfc03d2e5ce9cab2a44fb01f1d0bf9dfebeccc1a473b1f9ea31f79f6f99'
,
'com.vaadin.external.google:android-json:0.0.20131108.vaadin1:android-json-0.0.20131108.vaadin1.jar:dfb7bae2f404cfe0b72b4d23944698cb716b7665171812a0a4d0f5926c0fac79'
,
'io.javalin:javalin:2.
2
.0:javalin-2.
2
.0.jar:
f7298fa281400559e92f000477a631c75aca9e01776962fd4b392fdb3b714190
'
,
'io.mockk:mockk-agent-api:1.8.
6
:mockk-agent-api-1.8.
6
.jar:
613512c66538e6349e03df641a868f4ee324f13e2e1dbd67a0ed388aa664a444
'
,
'io.mockk:mockk-agent-common:1.8.
6
:mockk-agent-common-1.8.
6
.jar:
cb7cb26fae5bfd3c89090858548990f311b27f673b9efa9d0c94f97c463b2863
'
,
'io.mockk:mockk-agent-jvm:1.8.
6
:mockk-agent-jvm-1.8.
6
.jar:
3f30b98d23ada8b5a44d75b43cd58fc03252fcb96939ff31e7ad659818af1e5d
'
,
'io.mockk:mockk-common:1.8.
6
:mockk-common-1.8.
6
.jar:a
04b0e2fc7d583807cf89f3bbf5c7501808725e49e385d95486e1008d8ab2ba8
'
,
'io.mockk:mockk-dsl-jvm:1.8.
6
:mockk-dsl-jvm-1.8.
6
.jar:
c2c5df747ff04d1a3e02212b7b4
3f
9
ba
4233597ae278928598275d7a7bb26d73
'
,
'io.mockk:mockk-dsl:1.8.
6
:mockk-dsl-1.8.
6
.jar:
f6014265fe88ef1290c936741bdd0a7c3d9ceba9ee3bd2a153d65b05e1fc7946
'
,
'io.mockk:mockk:1.8.
6
:mockk-1.8.
6
.jar:
0a200d71bab11facfe50637b1980f53c07a21bfa4dd9eb021ac8e8cc693924b2
'
,
'io.javalin:javalin:2.
3
.0:javalin-2.
3
.0.jar:
3571e83863e1f163854f1b2ee3cbfc1336fcbdfa595ec9c2ed8ab8bfa792e5f4
'
,
'io.mockk:mockk-agent-api:1.8.
9
:mockk-agent-api-1.8.
9
.jar:
8cbc0adc0f349f891d44ffdaba55c68271790ce9c33cc437d2be86a5af572d6c
'
,
'io.mockk:mockk-agent-common:1.8.
9
:mockk-agent-common-1.8.
9
.jar:
a67b8bb696f91023e4446e2c8594c652924a350422047c96f31031be2a8de54a
'
,
'io.mockk:mockk-agent-jvm:1.8.
9
:mockk-agent-jvm-1.8.
9
.jar:
4a8b83501e0fda6f79601e073c9e419dc649eeb8d18645ae0d60c64f1e671076
'
,
'io.mockk:mockk-common:1.8.
9
:mockk-common-1.8.
9
.jar:a
3fb4d3fa776dde4eab2cc49e5df68fa394064df47431e2add9fc2100f3a145f
'
,
'io.mockk:mockk-dsl-jvm:1.8.
9
:mockk-dsl-jvm-1.8.
9
.jar:
d6cfda3ba94b
3fba
2826c4554a33866a5559df9326fb28b559078fcb4508e60d
'
,
'io.mockk:mockk-dsl:1.8.
9
:mockk-dsl-1.8.
9
.jar:
e24f0de13e12227544a68dae13f4fae4dd376f5d1eac796d3f4594989c0f2e68
'
,
'io.mockk:mockk:1.8.
9
:mockk-1.8.
9
.jar:
9ead145f12b086af1d15eb4bf0fa5ccee02781b69937be6f77f47ac03100f526
'
,
'javax.inject:javax.inject:1:javax.inject-1.jar:91c77044a50c481636c32d916fd89c9118a72195390452c81065080f957de7ff'
,
'javax.servlet:javax.servlet-api:3.1.0:javax.servlet-api-3.1.0.jar:af456b2dd41c4e82cf54f3e743bc678973d9fe35bd4d3071fa05c7e5333b8482'
,
'net.bytebuddy:byte-buddy-agent:1.8.
8
:byte-buddy-agent-1.8.
8
.jar:
dc1a2dcefe72731fa89ae84e32231c74d545ccf8216c79865096e546f20c57e8
'
,
'net.bytebuddy:byte-buddy:1.8.
8
:byte-buddy-1.8.
8
.jar:
30aed1ae2ee5261b1d2f0e98ec3fcb40755c3f61b378089fb65d56098df1f16b
'
,
'net.bytebuddy:byte-buddy-agent:1.8.
22
:byte-buddy-agent-1.8.
22
.jar:
ebc20e83fbb13e7911e4c704c9548a4166d7e83922f80de700ae5c5c983943d5
'
,
'net.bytebuddy:byte-buddy:1.8.
22
:byte-buddy-1.8.
22
.jar:
d330d2ef290a2852bbaf06eab03bc93d24501599c8a836da9d946f82c48e276c
'
,
'org.apiguardian:apiguardian-api:1.0.0:apiguardian-api-1.0.0.jar:1f58b77470d8d147a0538d515347dd322f49a83b9e884b8970051160464b65b3'
,
'org.eclipse.jetty.websocket:websocket-api:9.4.12.v20180830:websocket-api-9.4.12.v20180830.jar:6f7ecb42601058ffe4a6c19c5340cac3ebf0f83e2e252b457558f104238278e3'
,
'org.eclipse.jetty.websocket:websocket-client:9.4.12.v20180830:websocket-client-9.4.12.v20180830.jar:97c6882c858a75776773eaccc01739757c4e9f60a51613878c1f2b2ba03d91af'
,
...
...
@@ -36,31 +36,30 @@ dependencyVerification {
'org.eclipse.jetty:jetty-util:9.4.12.v20180830:jetty-util-9.4.12.v20180830.jar:60ad53e118a3e7d10418b155b9944d90b2e4e4c732e53ef4f419473288d3f48c'
,
'org.eclipse.jetty:jetty-webapp:9.4.12.v20180830:jetty-webapp-9.4.12.v20180830.jar:5301e412a32bf7dddcfad458d952179597c61f8fd531c265873562725c3d4646'
,
'org.eclipse.jetty:jetty-xml:9.4.12.v20180830:jetty-xml-9.4.12.v20180830.jar:5b8298ab3d43ddaf0941d41f51b82c8ae23a247da055fa161b752ab9495155ed'
,
'org.jetbrains.kotlin:kotlin-android-extensions:1.2.70:kotlin-android-extensions-1.2.70.jar:534601f4b10bd175268a611ea370051f75db3377da11e9400430f01db7c70bd0'
,
'org.jetbrains.kotlin:kotlin-annotation-processing-gradle:1.2.70:kotlin-annotation-processing-gradle-1.2.70.jar:820da7e3637066c14eb3d54dc29cd6d4dc4a041ff603d0b15844403de47b7d12'
,
'org.jetbrains.kotlin:kotlin-build-common:1.2.70:kotlin-build-common-1.2.70.jar:6756d98108512b8a42013e453912e868777a20f05cac3f40af891e4058e94da6'
,
'org.jetbrains.kotlin:kotlin-compiler-embeddable:1.2.70:kotlin-compiler-embeddable-1.2.70.jar:8958d6f6ce4e49a6cecaaa9a1711a6b03df793fe066a74d88cf4958f20b0f10d'
,
'org.jetbrains.kotlin:kotlin-compiler-runner:1.2.70:kotlin-compiler-runner-1.2.70.jar:44654c5f86e2b36222cb8b09e5eeb0b252db1e83d258b27fb31c670c339e65e1'
,
'org.jetbrains.kotlin:kotlin-daemon-client:1.2.70:kotlin-daemon-client-1.2.70.jar:92b73c45670324ae6b81ccaa123a38eddd53adfe3a2b58938421d4d17a53f9e3'
,
'org.jetbrains.kotlin:kotlin-gradle-plugin-api:1.2.70:kotlin-gradle-plugin-api-1.2.70.jar:a60b71d564795461e023956d8b3dd03d606d51ad1eb79e7c002dbce62a24378c'
,
'org.jetbrains.kotlin:kotlin-gradle-plugin-model:1.2.70:kotlin-gradle-plugin-model-1.2.70.jar:a7fdb4b35e7537ad417e6b19595a1df7d676e8e9fa5a8a96dbcf1a40b577493b'
,
'org.jetbrains.kotlin:kotlin-gradle-plugin:1.2.70:kotlin-gradle-plugin-1.2.70.jar:b9a96b3d39215b7fdcc8013476e70f86b8010277dd3639e58b42e6ffde1f3cab'
,
'org.jetbrains.kotlin:kotlin-reflect:1.2.41:kotlin-reflect-1.2.41.jar:1bab75771dfa2bb5949cd383ceaedf6f8d354fa0d677804fc5a39e320bab70d3'
,
'org.jetbrains.kotlin:kotlin-reflect:1.2.70:kotlin-reflect-1.2.70.jar:89ef46a458c5ee58b8460d0d22b0bb484eea0589ccffd59d650ef38bcb60e806'
,
'org.jetbrains.kotlin:kotlin-script-runtime:1.2.70:kotlin-script-runtime-1.2.70.jar:0124dfcf890e39250c3a4481cdd27f038d8321e93ce983730c4cbc10143eadc2'
,
'org.jetbrains.kotlin:kotlin-scripting-compiler-embeddable:1.2.70:kotlin-scripting-compiler-embeddable-1.2.70.jar:cbd88e1cae3f8f2baeb7021d3b76323b30e82663e7b4222a214f33ee314b3653'
,
'org.jetbrains.kotlin:kotlin-stdlib-common:1.2.70:kotlin-stdlib-common-1.2.70.jar:bb6898bef18e1de5d416d5135ca70dcac6645718c7d84bbddcfeb76ed1c199a1'
,
'org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.2.70:kotlin-stdlib-jdk7-1.2.70.jar:b4ace315288134b52fddb58b4a92636faafb2ab5eb46bad97d3bce7623a8e213'
,
'org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.2.70:kotlin-stdlib-jdk8-1.2.70.jar:88d0c29f4065b6ad34261fb4a04d39f9813051c6942428d718b649378d057ad1'
,
'org.jetbrains.kotlin:kotlin-stdlib:1.2.70:kotlin-stdlib-1.2.70.jar:7d20d0a56dd0ea6176137759a6aad331bbfae67436b45e5f0a4d8dafb6985c81'
,
'org.jetbrains.kotlin:kotlin-android-extensions:1.2.71:kotlin-android-extensions-1.2.71.jar:6c3f52bbb7c25ddb102cfbe1e91e3f1ee45805f842310fb92496668dbf1366de'
,
'org.jetbrains.kotlin:kotlin-annotation-processing-gradle:1.2.71:kotlin-annotation-processing-gradle-1.2.71.jar:107070d5bc10530a6823907487609899ac4d8753f730b8abf1f158971d93802e'
,
'org.jetbrains.kotlin:kotlin-build-common:1.2.71:kotlin-build-common-1.2.71.jar:f3c6874442409c5fac7142dc5a4f7a0148147896a6d7f9e0c3cb140690090cb1'
,
'org.jetbrains.kotlin:kotlin-compiler-embeddable:1.2.71:kotlin-compiler-embeddable-1.2.71.jar:623e546310d3da89ed2bc0cf9f7fedd78fadd9cd65d2ff798fa894c14e527665'
,
'org.jetbrains.kotlin:kotlin-compiler-runner:1.2.71:kotlin-compiler-runner-1.2.71.jar:7259a24562ba880f821bc7c9ae51f724d66e8ea00f6e3143d4427a161ae6e998'
,
'org.jetbrains.kotlin:kotlin-daemon-client:1.2.71:kotlin-daemon-client-1.2.71.jar:2ad669e3c2cedd3a2406f3c2c4739dba537acf373d605c207ed5058630e66462'
,
'org.jetbrains.kotlin:kotlin-gradle-plugin-api:1.2.71:kotlin-gradle-plugin-api-1.2.71.jar:a141e6b9740ebf88ce53d258e40cb59f54ee8e2fafdff4c4c10b0abdceb57cba'
,
'org.jetbrains.kotlin:kotlin-gradle-plugin-model:1.2.71:kotlin-gradle-plugin-model-1.2.71.jar:7082e9858b3ead143bcb48383007751a776fd46e8ce4cec1a1d4a873db5e7ec1'
,
'org.jetbrains.kotlin:kotlin-gradle-plugin:1.2.71:kotlin-gradle-plugin-1.2.71.jar:ab88dab9bd2a3c31c4e6aaa0eb4168d13f126e9076561bb42f5f3fe80c902a78'
,
'org.jetbrains.kotlin:kotlin-reflect:1.2.71:kotlin-reflect-1.2.71.jar:1f3e10abd68d0b0816bddab7314f61269e01d8aa2ca1cbd120c12d3b4dc94b0f'
,
'org.jetbrains.kotlin:kotlin-script-runtime:1.2.71:kotlin-script-runtime-1.2.71.jar:307d0a56734458a5e57e3ea788c15b22591912ba39f81b2cc8b0a090944012bb'
,
'org.jetbrains.kotlin:kotlin-scripting-compiler-embeddable:1.2.71:kotlin-scripting-compiler-embeddable-1.2.71.jar:97a5d94241d13719ea756a908262a10c638db7a8caaa23b28537b1687f894f0c'
,
'org.jetbrains.kotlin:kotlin-stdlib-common:1.2.71:kotlin-stdlib-common-1.2.71.jar:63999687ff2fce8a592dd180ffbbf8f1d21c26b4044c55cdc74ff3cf3b3cf328'
,
'org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.2.71:kotlin-stdlib-jdk7-1.2.71.jar:b136bd61b240e07d4d92ce00d3bd1dbf584400a7bf5f220c2f3cd22446858082'
,
'org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.2.71:kotlin-stdlib-jdk8-1.2.71.jar:ac3c8abf47790b64b4f7e2509a53f0c145e061ac1612a597520535d199946ea9'
,
'org.jetbrains.kotlin:kotlin-stdlib:1.2.71:kotlin-stdlib-1.2.71.jar:4c895c270b87f5fec2a2796e1d89c15407ee821de961527c28588bb46afbc68b'
,
'org.jetbrains:annotations:13.0:annotations-13.0.jar:ace2a10dc8e2d5fd34925ecac03e4988b2c0f851650c94b8cef49ba1bd111478'
,
'org.junit.jupiter:junit-jupiter-api:5.
2.0
:junit-jupiter-api-5.
2.0
.jar:
47f7d71b35dc331210b9ab219bbb00d54332981aa12eb5effe817de17e1ae7b
3'
,
'org.junit.jupiter:junit-jupiter-engine:5.
2.0
:junit-jupiter-engine-5.
2.0
.jar:
8f994f4094790e246dc84de86a1ff4194ca85e8b13bedaca0207f727ebfbc813
'
,
'org.junit.jupiter:junit-jupiter-params:5.
2.0
:junit-jupiter-params-5.
2.0
.jar:
34ce02519044ef68217002f640a83e267c4001ce53b68270218d49d00449a836
'
,
'org.junit.platform:junit-platform-commons:1.
2.0
:junit-platform-commons-1.
2.0
.jar:
7771af2f797d1d0ccce9920eb3cd826fb8fd7659ccb4d8877e76d9412be72cc
2'
,
'org.junit.platform:junit-platform-engine:1.
2.0
:junit-platform-engine-1.
2.0
.jar:
60b102e94ea01556fdc8c041950a05450edc188e3708f032a6bfb1a50ba0bc22
'
,
'org.junit.jupiter:junit-jupiter-api:5.
3.1
:junit-jupiter-api-5.
3.1
.jar:
7923e21f030a9964d70a0e48007ca873280c66ddf0f0620b2d969852c23d565
3'
,
'org.junit.jupiter:junit-jupiter-engine:5.
3.1
:junit-jupiter-engine-5.
3.1
.jar:
04f4354548a30827e126bdf6fcbe3640789ad8335a6f3f0762bf7f9f74e51fbf
'
,
'org.junit.jupiter:junit-jupiter-params:5.
3.1
:junit-jupiter-params-5.
3.1
.jar:
72fe344712d4cd88dd0cb4bfa304322d512d2cb27173ed64cb5036a573d29f4c
'
,
'org.junit.platform:junit-platform-commons:1.
3.1
:junit-platform-commons-1.
3.1
.jar:
457d8e1c0c80d1e320a792ec35e7c180694ba05182d7ecf7dabdb4e5a8a12fe
2'
,
'org.junit.platform:junit-platform-engine:1.
3.1
:junit-platform-engine-1.
3.1
.jar:
303d0546c3e950cc3beaca00dfcbf2632d4eca530e4e446391bf193cbc2a71a3
'
,
'org.objenesis:objenesis:2.6:objenesis-2.6.jar:5e168368fbc250af3c79aa5fef0c3467a2d64e5a7bd74005f25d8399aeb0708d'
,
'org.opentest4j:opentest4j:1.1.
0
:opentest4j-1.1.
0
.jar:
65a5fd7380f53aac708bcee3091dbe2dba73a9a2e7645b66e70e0804fc36ee3b
'
,
'org.opentest4j:opentest4j:1.1.
1
:opentest4j-1.1.
1
.jar:
f106351abd941110226745ed103c85863b3f04e9fa82ddea1084639ae0c5336c
'
,
'org.skyscreamer:jsonassert:1.5.0:jsonassert-1.5.0.jar:a310bc79c3f4744e2b2e993702fcebaf3696fec0063643ffdc6b49a8fb03ef39'
,
'org.slf4j:slf4j-api:1.7.25:slf4j-api-1.7.25.jar:18c4a0095d5c1da6b817592e767bb23d29dd2f560ad74df75ff3961dbde25b79'
,
'org.slf4j:slf4j-simple:1.7.25:slf4j-simple-1.7.25.jar:0966e86fffa5be52d3d9e7b89dd674d98a03eed0a454fbaf7c1bd9493bd9d874'
,
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment