Skip to content
Projects
Groups
Snippets
Help
Loading...
Sign in
Toggle navigation
C
CTF
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Grzegorz
CTF
Commits
85c2a78f
Commit
85c2a78f
authored
Apr 12, 2016
by
Grzegorz Pietrusza
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
remove proxy features
parent
28b4d09d
Hide whitespace changes
Inline
Side-by-side
Showing
9 changed files
with
32 additions
and
283 deletions
+32
-283
Task.java
...ava/com/telephoners/krakyournet/ctf/beans/tasks/Task.java
+6
-3
TaskRequestContext.java
...oners/krakyournet/ctf/beans/tasks/TaskRequestContext.java
+0
-68
TaskRequestContextBuilder.java
...rakyournet/ctf/beans/tasks/TaskRequestContextBuilder.java
+0
-77
TaskResponse.java
...telephoners/krakyournet/ctf/beans/tasks/TaskResponse.java
+0
-25
TextTask.java
...com/telephoners/krakyournet/ctf/beans/tasks/TextTask.java
+10
-5
WebTask.java
.../com/telephoners/krakyournet/ctf/beans/tasks/WebTask.java
+8
-60
TasksRepository.java
...phoners/krakyournet/ctf/repositories/TasksRepository.java
+1
-2
TaskResource.java
...m/telephoners/krakyournet/ctf/resources/TaskResource.java
+5
-42
TasksResource.java
.../telephoners/krakyournet/ctf/resources/TasksResource.java
+2
-1
No files found.
service/src/main/java/com/telephoners/krakyournet/ctf/beans/tasks/Task.java
View file @
85c2a78f
package
com
.
telephoners
.
krakyournet
.
ctf
.
beans
.
tasks
;
import
com.fasterxml.jackson.annotation.JsonIgnore
;
import
com.fasterxml.jackson.annotation.JsonInclude
;
import
com.telephoners.krakyournet.ctf.beans.Flag
;
import
com.telephoners.krakyournet.ctf.helpers.PublicProperty
;
...
...
@@ -7,7 +8,8 @@ import org.bson.types.ObjectId;
import
org.mongodb.morphia.annotations.Entity
;
import
org.mongodb.morphia.annotations.Id
;
import
java.io.IOException
;
import
javax.ws.rs.core.Response
;
import
java.net.URISyntaxException
;
import
java.util.List
;
@Entity
(
"tasks"
)
...
...
@@ -36,8 +38,6 @@ public abstract class Task
{
}
public
abstract
TaskResponse
getTaskResponse
(
TaskRequestContext
taskRequestContext
)
throws
IOException
;
public
String
getName
()
{
return
name
;
...
...
@@ -104,4 +104,7 @@ public abstract class Task
result
=
31
*
result
+
(
flags
!=
null
?
flags
.
hashCode
()
:
0
);
return
result
;
}
@JsonIgnore
public
abstract
Response
getTaskResponse
()
throws
URISyntaxException
;
}
service/src/main/java/com/telephoners/krakyournet/ctf/beans/tasks/TaskRequestContext.java
deleted
100644 → 0
View file @
28b4d09d
package
com
.
telephoners
.
krakyournet
.
ctf
.
beans
.
tasks
;
import
com.telephoners.krakyournet.ctf.beans.User
;
import
org.eclipse.jetty.http.HttpMethod
;
import
java.util.Map
;
public
class
TaskRequestContext
{
private
HttpMethod
httpMethod
;
private
User
user
;
private
String
path
;
private
String
body
;
private
Map
<
String
,
String
>
headers
;
public
TaskRequestContext
withHttpMethod
(
HttpMethod
httpMethod
)
{
this
.
httpMethod
=
httpMethod
;
return
this
;
}
public
TaskRequestContext
withUser
(
User
user
)
{
this
.
user
=
user
;
return
this
;
}
public
TaskRequestContext
withPath
(
String
path
)
{
this
.
path
=
path
;
return
this
;
}
public
TaskRequestContext
withBody
(
String
body
)
{
this
.
body
=
body
;
return
this
;
}
public
TaskRequestContext
withHeaders
(
Map
<
String
,
String
>
headers
)
{
this
.
headers
=
headers
;
return
this
;
}
public
HttpMethod
getHttpMethod
()
{
return
httpMethod
;
}
public
User
getUser
()
{
return
user
;
}
public
String
getPath
()
{
return
path
;
}
public
String
getBody
()
{
return
body
;
}
public
Map
<
String
,
String
>
getHeaders
()
{
return
headers
;
}
}
service/src/main/java/com/telephoners/krakyournet/ctf/beans/tasks/TaskRequestContextBuilder.java
deleted
100644 → 0
View file @
28b4d09d
package
com
.
telephoners
.
krakyournet
.
ctf
.
beans
.
tasks
;
import
com.google.inject.Inject
;
import
com.google.inject.Singleton
;
import
com.telephoners.krakyournet.ctf.beans.User
;
import
com.telephoners.krakyournet.ctf.core.ApplicationConfiguration
;
import
com.telephoners.krakyournet.ctf.helpers.StreamUtils
;
import
org.eclipse.jetty.http.HttpMethod
;
import
org.glassfish.jersey.server.ContainerRequest
;
import
javax.ws.rs.container.ContainerRequestContext
;
import
javax.ws.rs.core.MultivaluedMap
;
import
java.io.IOException
;
import
java.util.Map
;
import
java.util.Set
;
import
java.util.stream.Collectors
;
@Singleton
public
class
TaskRequestContextBuilder
{
private
ApplicationConfiguration
applicationConfiguration
;
@Inject
public
TaskRequestContextBuilder
(
ApplicationConfiguration
applicationConfiguration
)
{
this
.
applicationConfiguration
=
applicationConfiguration
;
}
private
Map
<
String
,
String
>
extractProxiedHeaders
(
MultivaluedMap
<
String
,
String
>
headers
)
{
Set
<
String
>
proxiedHeaders
=
applicationConfiguration
.
getProxiedHeaders
();
return
headers
.
entrySet
()
.
stream
()
.
filter
(
header
->
proxiedHeaders
.
contains
(
header
.
getKey
()))
.
collect
(
Collectors
.
toMap
(
Map
.
Entry
::
getKey
,
entry
->
entry
.
getValue
().
get
(
0
)
//todo: check
));
}
public
TaskRequestContext
from
(
User
user
,
String
path
,
ContainerRequestContext
containerRequestContext
)
throws
IOException
{
String
fullPath
=
path
;
TaskRequestContext
taskRequestContext
=
new
TaskRequestContext
();
if
(
user
!=
null
)
{
taskRequestContext
.
withUser
(
user
);
}
if
(
path
!=
null
)
{
taskRequestContext
.
withPath
(
path
);
String
httpMethod
=
containerRequestContext
.
getMethod
();
String
query
=
((
ContainerRequest
)
containerRequestContext
).
getRequestUri
().
getQuery
();
if
(
query
!=
null
)
{
fullPath
+=
"?"
+
query
;
}
taskRequestContext
.
withPath
(
fullPath
);
if
(
httpMethod
.
equals
(
"GET"
))
{
taskRequestContext
.
withHttpMethod
(
HttpMethod
.
GET
);
}
else
if
(
httpMethod
.
equals
(
"POST"
))
{
taskRequestContext
.
withHttpMethod
(
HttpMethod
.
POST
);
String
body
=
StreamUtils
.
readStream
(
containerRequestContext
.
getEntityStream
());
taskRequestContext
.
withBody
(
body
);
}
else
{
throw
new
IllegalStateException
(
"Invalid http method"
);
}
Map
<
String
,
String
>
proxiedHeaders
=
extractProxiedHeaders
(
containerRequestContext
.
getHeaders
());
taskRequestContext
.
withHeaders
(
proxiedHeaders
);
}
return
taskRequestContext
;
}
}
service/src/main/java/com/telephoners/krakyournet/ctf/beans/tasks/TaskResponse.java
deleted
100644 → 0
View file @
28b4d09d
package
com
.
telephoners
.
krakyournet
.
ctf
.
beans
.
tasks
;
import
java.util.Map
;
public
class
TaskResponse
{
private
String
text
;
private
Map
<
String
,
String
>
headers
;
public
TaskResponse
(
String
text
,
Map
<
String
,
String
>
headers
)
{
this
.
text
=
text
;
this
.
headers
=
headers
;
}
public
String
getText
()
{
return
text
;
}
public
Map
<
String
,
String
>
getHeaders
()
{
return
headers
;
}
}
\ No newline at end of file
service/src/main/java/com/telephoners/krakyournet/ctf/beans/tasks/TextTask.java
View file @
85c2a78f
package
com
.
telephoners
.
krakyournet
.
ctf
.
beans
.
tasks
;
import
com.fasterxml.jackson.annotation.JsonIgnore
;
import
com.fasterxml.jackson.annotation.JsonInclude
;
import
com.telephoners.krakyournet.ctf.beans.Flag
;
import
com.telephoners.krakyournet.ctf.beans.User
;
import
org.mongodb.morphia.annotations.Entity
;
import
javax.ws.rs.co
ntainer.ContainerRequestContext
;
import
javax.ws.rs.co
re.Response
;
import
java.io.IOException
;
import
java.util.HashMap
;
import
java.util.List
;
...
...
@@ -22,14 +22,19 @@ public class TextTask extends Task
this
.
text
=
text
;
}
public
String
getText
()
{
return
text
;
}
public
TextTask
()
{
}
@
Overrid
e
public
TaskResponse
getTaskResponse
(
TaskRequestContext
taskRequestContext
)
throws
IOException
@
JsonIgnor
e
public
Response
getTaskResponse
()
{
return
new
TaskResponse
(
text
,
new
HashMap
<>()
);
return
Response
.
ok
().
entity
(
text
).
build
(
);
}
public
void
setText
(
String
text
)
...
...
service/src/main/java/com/telephoners/krakyournet/ctf/beans/tasks/WebTask.java
View file @
85c2a78f
package
com
.
telephoners
.
krakyournet
.
ctf
.
beans
.
tasks
;
import
com.fasterxml.jackson.annotation.JsonIgnore
;
import
com.fasterxml.jackson.annotation.JsonInclude
;
import
com.telephoners.krakyournet.ctf.beans.Flag
;
import
com.telephoners.krakyournet.ctf.helpers.StreamUtils
;
import
org.apache.http.Header
;
import
org.apache.http.client.methods.CloseableHttpResponse
;
import
org.apache.http.client.methods.HttpGet
;
import
org.apache.http.client.methods.HttpPost
;
import
org.apache.http.entity.ByteArrayEntity
;
import
org.apache.http.impl.client.CloseableHttpClient
;
import
org.apache.http.impl.client.HttpClients
;
import
org.apache.http.message.BasicHeader
;
import
org.eclipse.jetty.http.HttpMethod
;
import
org.mongodb.morphia.annotations.Entity
;
import
java.io.IOException
;
import
javax.ws.rs.core.Response
;
import
java.net.URI
;
import
java.net.URISyntaxException
;
import
java.util.List
;
import
java.util.Map
;
import
java.util.stream.Collectors
;
import
java.util.stream.Stream
;
@Entity
(
"tasks"
)
@JsonInclude
(
JsonInclude
.
Include
.
NON_NULL
)
...
...
@@ -36,35 +26,13 @@ public class WebTask extends Task
{
}
//todo: avoid converting in both ways
p
rivate
Map
<
String
,
String
>
buildHeadersMap
(
Header
[]
headers
)
@JsonIgnore
p
ublic
Response
getTaskResponse
()
throws
URISyntaxException
{
return
Stream
.
of
(
headers
)
.
collect
(
Collectors
.
toMap
(
Header:
:
getName
,
Header:
:
getValue
));
return
Response
.
seeOther
(
new
URI
(
getUrl
())).
build
();
}
private
Header
[]
buildHeadersArray
(
Map
<
String
,
String
>
headers
)
{
List
<
BasicHeader
>
headersList
=
headers
.
entrySet
().
stream
()
//todo: dirty casting
.
map
(
headerEntry
->
new
BasicHeader
(
headerEntry
.
getKey
(),
headerEntry
.
getValue
()))
.
collect
(
Collectors
.
toList
());
Header
[]
headersArray
=
new
Header
[
headersList
.
size
()];
return
headersList
.
toArray
(
headersArray
);
}
@Override
public
TaskResponse
getTaskResponse
(
TaskRequestContext
taskRequestContext
)
throws
IOException
{
String
proxiedUrl
=
getTaskUrl
()
+
taskRequestContext
.
getPath
();
CloseableHttpResponse
response
=
proxyRequest
(
proxiedUrl
,
taskRequestContext
);
String
text
=
StreamUtils
.
readStream
(
response
.
getEntity
().
getContent
());
return
new
TaskResponse
(
text
,
buildHeadersMap
(
response
.
getAllHeaders
()));
}
public
String
getTaskUrl
()
public
String
getUrl
()
{
return
url
;
}
...
...
@@ -73,24 +41,4 @@ public class WebTask extends Task
{
this
.
url
=
url
;
}
private
CloseableHttpResponse
proxyRequest
(
String
url
,
TaskRequestContext
taskRequestContext
)
throws
IOException
{
CloseableHttpClient
httpClient
=
HttpClients
.
createDefault
();
HttpMethod
httpMethod
=
taskRequestContext
.
getHttpMethod
();
if
(
httpMethod
.
equals
(
HttpMethod
.
GET
))
{
HttpGet
httpget
=
new
HttpGet
(
url
);
httpget
.
setHeaders
(
buildHeadersArray
(
taskRequestContext
.
getHeaders
()));
return
httpClient
.
execute
(
httpget
);
}
else
if
(
httpMethod
.
equals
(
HttpMethod
.
POST
))
{
HttpPost
httpPost
=
new
HttpPost
(
url
);
httpPost
.
setHeaders
(
buildHeadersArray
(
taskRequestContext
.
getHeaders
()));
httpPost
.
setEntity
(
new
ByteArrayEntity
(
taskRequestContext
.
getBody
().
getBytes
(
"UTF-8"
)));
return
httpClient
.
execute
(
httpPost
);
}
else
{
throw
new
IllegalStateException
(
"Invalid http method"
);
}
}
}
service/src/main/java/com/telephoners/krakyournet/ctf/repositories/TasksRepository.java
View file @
85c2a78f
...
...
@@ -33,10 +33,9 @@ public class TasksRepository extends Repository<Task>
public
List
<
Task
>
getAllPublic
()
{
List
<
Task
>
level
=
datastore
.
createQuery
(
Task
.
class
)
return
datastore
.
createQuery
(
Task
.
class
)
.
order
(
"level"
)
.
retrievedFields
(
true
,
DBObjectUtils
.
getPublicFields
(
Task
.
class
))
.
asList
();
return
level
;
}
}
\ No newline at end of file
service/src/main/java/com/telephoners/krakyournet/ctf/resources/TaskResource.java
View file @
85c2a78f
...
...
@@ -2,78 +2,41 @@ package com.telephoners.krakyournet.ctf.resources;
import
com.telephoners.krakyournet.ctf.beans.User
;
import
com.telephoners.krakyournet.ctf.beans.tasks.Task
;
import
com.telephoners.krakyournet.ctf.beans.tasks.TaskRequestContext
;
import
com.telephoners.krakyournet.ctf.beans.tasks.TaskRequestContextBuilder
;
import
com.telephoners.krakyournet.ctf.beans.tasks.TaskResponse
;
import
com.telephoners.krakyournet.ctf.repositories.TasksRepository
;
import
io.dropwizard.auth.Auth
;
import
javax.inject.Inject
;
import
javax.inject.Singleton
;
import
javax.ws.rs.GET
;
import
javax.ws.rs.POST
;
import
javax.ws.rs.Path
;
import
javax.ws.rs.PathParam
;
import
javax.ws.rs.container.ContainerRequestContext
;
import
javax.ws.rs.core.Context
;
import
javax.ws.rs.core.Response
;
import
java.io.IOException
;
import
java.net.URISyntaxException
;
@Singleton
@Path
(
value
=
"/task"
)
public
class
TaskResource
{
private
final
TasksRepository
tasksRepository
;
private
final
TaskRequestContextBuilder
taskRequestContextBuilder
;
@Inject
public
TaskResource
(
TasksRepository
tasksRepository
,
TaskRequestContextBuilder
taskRequestContextBuilder
)
public
TaskResource
(
TasksRepository
tasksRepository
)
{
this
.
tasksRepository
=
tasksRepository
;
this
.
taskRequestContextBuilder
=
taskRequestContextBuilder
;
}
private
Response
buildResponse
(
TaskResponse
taskResponse
)
{
Response
.
ResponseBuilder
responseBuilder
=
Response
.
ok
();
responseBuilder
.
entity
(
taskResponse
.
getText
());
taskResponse
.
getHeaders
()
.
entrySet
()
.
stream
()
.
forEach
(
headerEntry
->
{
responseBuilder
.
header
(
headerEntry
.
getKey
(),
headerEntry
.
getValue
());
});
return
responseBuilder
.
build
();
}
private
Response
handleRequest
(
User
user
,
int
taskLevel
,
String
path
,
ContainerRequestContext
containerRequestContext
)
throws
IOException
{
Task
task
=
tasksRepository
.
getByLevel
(
taskLevel
);
TaskRequestContext
taskRequestContext
=
taskRequestContextBuilder
.
from
(
user
,
path
,
containerRequestContext
);
return
buildResponse
(
task
.
getTaskResponse
(
taskRequestContext
));
}
@Path
(
"{task_level}/{path: .*}"
)
@GET
public
Response
getTaskGet
(
@Auth
User
user
,
final
@PathParam
(
"task_level"
)
int
taskLevel
,
final
@PathParam
(
"path"
)
String
path
,
@Context
ContainerRequestContext
containerRequestContext
)
throws
IOException
@Context
ContainerRequestContext
containerRequestContext
)
throws
IOException
,
URISyntaxException
{
return
handleRequest
(
user
,
taskLevel
,
path
,
containerRequestContext
);
}
@Path
(
"{task_level}/{path: .*}"
)
@POST
public
Response
getTaskPost
(
@Auth
User
user
,
final
@PathParam
(
"task_level"
)
int
taskLevel
,
final
@PathParam
(
"path"
)
String
path
,
@Context
ContainerRequestContext
containerRequestContext
)
throws
IOException
{
return
handleRequest
(
user
,
taskLevel
,
path
,
containerRequestContext
);
Task
task
=
tasksRepository
.
getByLevel
(
taskLevel
);
return
task
.
getTaskResponse
();
}
}
service/src/main/java/com/telephoners/krakyournet/ctf/resources/TasksResource.java
View file @
85c2a78f
...
...
@@ -27,6 +27,7 @@ public class TasksResource
@GET
public
List
<
Task
>
getTasksPublic
()
{
return
tasksRepository
.
getAllPublic
();
List
<
Task
>
allPublic
=
tasksRepository
.
getAllPublic
();
return
allPublic
;
}
}
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