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
bb2009d5
Commit
bb2009d5
authored
Mar 05, 2016
by
Grzegorz Pietrusza
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
list of flags per task - not checked stub
parent
f40fda3f
Show whitespace changes
Inline
Side-by-side
Showing
7 changed files
with
122 additions
and
57 deletions
+122
-57
configuration.yml
service/configuration.yml
+14
-4
CryptoTaskConfig.java
service/src/main/java/helpers/CryptoTaskConfig.java
+8
-5
TaskUserPair.java
service/src/main/java/helpers/TaskUserPair.java
+5
-5
WebTaskConfig.java
service/src/main/java/helpers/WebTaskConfig.java
+7
-5
Task.java
service/src/main/java/objects/tasks/Task.java
+9
-10
TasksRepository.java
service/src/main/java/repositories/TasksRepository.java
+68
-24
TasksResource.java
service/src/main/java/resources/TasksResource.java
+11
-4
No files found.
service/configuration.yml
View file @
bb2009d5
...
@@ -54,21 +54,31 @@ teams:
...
@@ -54,21 +54,31 @@ teams:
cryptoTasks
:
cryptoTasks
:
-
name
:
"
Szyfro1"
-
name
:
"
Szyfro1"
text
:
"
Odszyfruj1"
text
:
"
Odszyfruj1"
flag
:
"
asdf"
flags
:
-
"
asdf1"
-
"
asdf2"
-
"
asdf3"
level
:
1
level
:
1
-
name
:
"
Szyfro2"
-
name
:
"
Szyfro2"
text
:
"
Odszyfruj2"
text
:
"
Odszyfruj2"
flag
:
"
sdfg"
flags
:
-
"
sdfg1"
-
"
sdfg2"
-
"
sdfg3"
level
:
2
level
:
2
webTasks
:
webTasks
:
-
name
:
"
SQL
Injection"
-
name
:
"
SQL
Injection"
url
:
"
http://google.pl"
url
:
"
http://google.pl"
flag
:
"
fgh"
flags
:
-
"
fgh1"
-
"
fgh2"
-
"
fgh3"
level
:
3
level
:
3
-
name
:
"
Inna
dziura"
-
name
:
"
Inna
dziura"
url
:
"
http://wikipedia.pl"
url
:
"
http://wikipedia.pl"
flag
:
"
hjk"
flags
:
-
"
hjk"
level
:
4
level
:
4
service/src/main/java/helpers/CryptoTaskConfig.java
View file @
bb2009d5
package
helpers
;
package
helpers
;
import
java.util.List
;
/**
/**
* Created by gpietrus on 23.02.2016.
* Created by gpietrus on 23.02.2016.
*/
*/
...
@@ -7,8 +9,9 @@ public class CryptoTaskConfig {
...
@@ -7,8 +9,9 @@ public class CryptoTaskConfig {
private
String
name
;
private
String
name
;
private
int
level
;
private
int
level
;
private
String
text
;
private
String
text
;
private
String
flag
;
private
List
<
String
>
flags
;
//todo: refactor, map directly to Flag class?
public
String
getName
()
{
public
String
getName
()
{
return
name
;
return
name
;
}
}
...
@@ -33,11 +36,11 @@ public class CryptoTaskConfig {
...
@@ -33,11 +36,11 @@ public class CryptoTaskConfig {
this
.
text
=
text
;
this
.
text
=
text
;
}
}
public
String
getFlag
()
{
public
List
<
String
>
getFlags
()
{
return
flag
;
return
flag
s
;
}
}
public
void
setFlag
(
String
flag
)
{
public
void
setFlag
s
(
List
<
String
>
flags
)
{
this
.
flag
=
flag
;
this
.
flag
s
=
flags
;
}
}
}
}
service/src/main/java/helpers/TaskUserPair.java
View file @
bb2009d5
...
@@ -8,17 +8,17 @@ import org.hibernate.validator.constraints.NotEmpty;
...
@@ -8,17 +8,17 @@ import org.hibernate.validator.constraints.NotEmpty;
public
class
TaskUserPair
{
public
class
TaskUserPair
{
@NotEmpty
@NotEmpty
private
String
taskId
;
private
Integer
taskLevel
;
@NotEmpty
@NotEmpty
private
String
username
;
private
String
username
;
public
String
getTaskId
()
{
public
Integer
getTaskLevel
()
{
return
task
Id
;
return
task
Level
;
}
}
public
void
setTask
Id
(
String
taskId
)
{
public
void
setTask
Level
(
Integer
taskLevel
)
{
this
.
task
Id
=
taskId
;
this
.
task
Level
=
taskLevel
;
}
}
public
String
getUsername
()
{
public
String
getUsername
()
{
...
...
service/src/main/java/helpers/WebTaskConfig.java
View file @
bb2009d5
package
helpers
;
package
helpers
;
import
java.util.List
;
/**
/**
* Created by gpietrus on 23.02.2016.
* Created by gpietrus on 23.02.2016.
*/
*/
...
@@ -7,7 +9,7 @@ public class WebTaskConfig {
...
@@ -7,7 +9,7 @@ public class WebTaskConfig {
private
String
name
;
private
String
name
;
private
String
url
;
private
String
url
;
private
int
level
;
private
int
level
;
private
String
flag
;
private
List
<
String
>
flags
;
public
String
getName
()
{
public
String
getName
()
{
return
name
;
return
name
;
...
@@ -33,11 +35,11 @@ public class WebTaskConfig {
...
@@ -33,11 +35,11 @@ public class WebTaskConfig {
this
.
url
=
url
;
this
.
url
=
url
;
}
}
public
String
getFlag
()
{
public
List
<
String
>
getFlags
()
{
return
flag
;
return
flag
s
;
}
}
public
void
setFlag
(
String
flag
)
{
public
void
setFlag
s
(
List
<
String
>
flags
)
{
this
.
flag
=
flag
;
this
.
flag
s
=
flags
;
}
}
}
}
service/src/main/java/objects/tasks/Task.java
View file @
bb2009d5
...
@@ -6,9 +6,8 @@ import org.bson.types.ObjectId;
...
@@ -6,9 +6,8 @@ import org.bson.types.ObjectId;
import
org.mongodb.morphia.annotations.Entity
;
import
org.mongodb.morphia.annotations.Entity
;
import
org.mongodb.morphia.annotations.Id
;
import
org.mongodb.morphia.annotations.Id
;
/**
import
java.util.List
;
* Created by gpietrus on 20.02.2016.
*/
@Entity
(
"tasks"
)
@Entity
(
"tasks"
)
public
class
Task
{
public
class
Task
{
@Id
@Id
...
@@ -16,11 +15,11 @@ public class Task {
...
@@ -16,11 +15,11 @@ public class Task {
private
String
name
;
private
String
name
;
private
int
level
;
private
int
level
;
private
TaskType
taskType
;
private
TaskType
taskType
;
private
Flag
flag
;
private
List
<
Flag
>
flags
;
private
TaskContent
taskContent
;
private
TaskContent
taskContent
;
public
Task
(
String
name
,
int
level
,
TaskType
type
,
Flag
flag
,
TaskContent
taskContent
)
{
public
Task
(
String
name
,
int
level
,
TaskType
type
,
List
<
Flag
>
flags
,
TaskContent
taskContent
)
{
this
.
flag
=
flag
;
this
.
flag
s
=
flags
;
this
.
taskType
=
type
;
this
.
taskType
=
type
;
this
.
level
=
level
;
this
.
level
=
level
;
this
.
name
=
name
;
this
.
name
=
name
;
...
@@ -53,12 +52,12 @@ public class Task {
...
@@ -53,12 +52,12 @@ public class Task {
this
.
taskType
=
taskType
;
this
.
taskType
=
taskType
;
}
}
public
Flag
getFlag
()
{
public
List
<
Flag
>
getFlags
()
{
return
flag
;
return
flag
s
;
}
}
public
void
setFlag
(
Flag
flag
)
{
public
void
setFlag
s
(
List
<
Flag
>
flags
)
{
this
.
flag
=
flag
;
this
.
flag
s
=
flags
;
}
}
public
TaskContent
getTaskContent
()
{
public
TaskContent
getTaskContent
()
{
...
...
service/src/main/java/repositories/TasksRepository.java
View file @
bb2009d5
...
@@ -71,19 +71,30 @@ public class TasksRepository implements Repository {
...
@@ -71,19 +71,30 @@ public class TasksRepository implements Repository {
this
.
clean
();
this
.
clean
();
cryptoTasks
.
forEach
(
cryptoTaskConfig
->
this
.
add
(
new
Task
(
cryptoTasks
.
forEach
(
cryptoTaskConfig
->
{
cryptoTaskConfig
.
getFlags
().
stream
()
.
map
(
Flag:
:
new
)
.
collect
(
Collectors
.
toList
());
this
.
add
(
new
Task
(
cryptoTaskConfig
.
getName
(),
cryptoTaskConfig
.
getName
(),
cryptoTaskConfig
.
getLevel
(),
cryptoTaskConfig
.
getLevel
(),
TaskType
.
CRYPTO
,
TaskType
.
CRYPTO
,
new
Flag
(
cryptoTaskConfig
.
getFlag
()),
cryptoTaskConfig
.
getFlags
().
stream
()
.
map
(
Flag:
:
new
)
.
collect
(
Collectors
.
toList
()),
new
TaskCryptoContent
(
cryptoTaskConfig
.
getText
())
new
TaskCryptoContent
(
cryptoTaskConfig
.
getText
())
)));
));
});
webTasks
.
forEach
(
webTaskConfig
->
this
.
add
(
new
Task
(
webTasks
.
forEach
(
webTaskConfig
->
this
.
add
(
new
Task
(
webTaskConfig
.
getName
(),
webTaskConfig
.
getName
(),
webTaskConfig
.
getLevel
(),
webTaskConfig
.
getLevel
(),
TaskType
.
WEB
,
TaskType
.
WEB
,
new
Flag
(
webTaskConfig
.
getFlag
()),
webTaskConfig
.
getFlags
().
stream
()
.
map
(
Flag:
:
new
)
.
collect
(
Collectors
.
toList
()),
new
TaskWebContent
(
webTaskConfig
.
getUrl
())
new
TaskWebContent
(
webTaskConfig
.
getUrl
())
)));
)));
}
}
...
@@ -96,11 +107,14 @@ public class TasksRepository implements Repository {
...
@@ -96,11 +107,14 @@ public class TasksRepository implements Repository {
datastore
.
getCollection
(
Task
.
class
).
drop
();
datastore
.
getCollection
(
Task
.
class
).
drop
();
}
}
public
Map
<
String
,
Task
>
getUserFlagsHashes
(
String
username
)
{
//todo: refactor?
public
Map
<
List
<
String
>,
Integer
>
getUserFlagsHashes
(
String
username
)
{
return
this
.
getAll
().
stream
()
return
this
.
getAll
().
stream
()
.
collect
(
Collectors
.
toMap
(
.
collect
(
Collectors
.
toMap
(
task
->
calculateHashValue
(
username
,
task
.
getFlag
().
getValue
()),
task
->
task
.
getFlags
().
stream
()
task
->
task
.
map
(
flag
->
calculateHashValue
(
username
,
flag
.
getValue
()))
.
collect
(
Collectors
.
toList
()),
Task:
:
getLevel
));
));
}
}
...
@@ -116,30 +130,60 @@ public class TasksRepository implements Repository {
...
@@ -116,30 +130,60 @@ public class TasksRepository implements Repository {
return
encodedHash
;
return
encodedHash
;
}
}
private
void
acceptSolution
(
String
username
,
Integer
taskLevel
)
{
User
user
=
usersRepository
.
getUserByName
(
username
);
Optional
<
Team
>
team
=
teamsRepository
.
getTeamByUser
(
user
);
Optional
<
Task
>
task
=
getTaskByLevel
(
taskLevel
);
if
(
team
.
isPresent
()
&&
task
.
isPresent
())
{
solutionsRepository
.
add
(
new
Solution
(
team
.
get
(),
task
.
get
().
getName
()));
}
}
private
Optional
<
Task
>
getTaskByLevel
(
Integer
level
)
{
return
getAll
().
stream
()
.
filter
(
task
->
task
.
getLevel
()
==
level
)
.
findFirst
();
}
//todo: cleanup
//todo: depracted?
private
void
acceptSolution
(
String
username
,
Task
task
)
{
private
void
acceptSolution
(
String
username
,
Task
task
)
{
User
user
=
usersRepository
.
getUserByName
(
username
);
User
user
=
usersRepository
.
getUserByName
(
username
);
Optional
<
Team
>
team
=
teamsRepository
.
getTeamByUser
(
user
);
Optional
<
Team
>
team
=
teamsRepository
.
getTeamByUser
(
user
);
if
(
team
.
isPresent
())
{
if
(
team
.
isPresent
())
{
solutionsRepository
.
add
(
new
Solution
(
team
.
get
(),
task
.
getName
()));
solutionsRepository
.
add
(
new
Solution
(
team
.
get
(),
task
.
getName
()));
}
}
}
}
public
boolean
checkFlag
(
String
username
,
String
flagValue
)
throws
Exception
{
private
Optional
<
Integer
>
findTaskLevelByFlag
(
String
username
,
String
flagValue
)
{
Task
task
=
getUserFlagsHashes
(
username
).
get
(
flagValue
);
return
getUserFlagsHashes
(
username
).
entrySet
()
if
(
task
!=
null
)
{
.
stream
()
acceptSolution
(
username
,
task
);
.
filter
(
flagsMapEntry
->
flagsMapEntry
.
getKey
().
contains
(
flagValue
))
.
map
(
Map
.
Entry
::
getValue
)
.
findFirst
();
}
public
boolean
checkFlag
(
String
username
,
String
flagValue
)
{
Optional
<
Integer
>
taskLevel
=
findTaskLevelByFlag
(
username
,
flagValue
);
if
(
taskLevel
.
isPresent
())
{
acceptSolution
(
username
,
taskLevel
.
get
());
return
true
;
return
true
;
}
}
return
false
;
return
false
;
}
}
public
Optional
<
String
>
getUserTaskFlag
(
String
username
,
String
taskId
)
{
public
Optional
<
List
<
String
>>
getUserTaskFlags
(
String
username
,
Integer
taskLevel
)
{
//todo: task level, task id
//todo: taskId, level, name? discuss
return
getUserFlagsHashes
(
username
).
entrySet
().
stream
()
return
getUserFlagsHashes
(
username
).
entrySet
().
stream
()
.
filter
(
taskEntry
->
taskEntry
.
getValue
().
getName
().
equals
(
taskId
))
.
filter
(
taskEntry
->
taskEntry
.
getValue
().
equals
(
taskLevel
))
.
map
(
taskEntry
->
calculateHashValue
(
username
,
taskEntry
.
getValue
().
getFlag
().
getValue
()))
.
map
(
listIntegerEntry
->
{
Integer
taskLevel1
=
listIntegerEntry
.
getValue
();
Task
task
=
getTaskByLevel
(
taskLevel1
).
get
();
List
<
String
>
flags
=
task
.
getFlags
()
.
stream
()
.
map
(
flag
->
calculateHashValue
(
username
,
flag
.
getValue
()))
.
collect
(
Collectors
.
toList
());
return
flags
;
})
.
findFirst
();
.
findFirst
();
}
}
}
}
\ No newline at end of file
//todo: generify!
\ No newline at end of file
service/src/main/java/resources/TasksResource.java
View file @
bb2009d5
...
@@ -14,7 +14,9 @@ import javax.ws.rs.core.MediaType;
...
@@ -14,7 +14,9 @@ import javax.ws.rs.core.MediaType;
import
javax.ws.rs.core.Response
;
import
javax.ws.rs.core.Response
;
import
java.util.Collection
;
import
java.util.Collection
;
import
java.util.List
;
import
java.util.List
;
import
java.util.Map
;
import
java.util.Optional
;
import
java.util.Optional
;
import
java.util.stream.Collectors
;
/**
/**
* Created by gpietrus on 16.02.16.
* Created by gpietrus on 16.02.16.
...
@@ -39,7 +41,11 @@ public class TasksResource
...
@@ -39,7 +41,11 @@ public class TasksResource
@GET
@GET
@Path
(
"my"
)
@Path
(
"my"
)
public
Collection
<
String
>
getUserFlags
(
@Auth
User
user
)
{
public
Collection
<
String
>
getUserFlags
(
@Auth
User
user
)
{
return
tasksRepository
.
getUserFlagsHashes
(
user
.
getName
()).
keySet
();
Map
<
List
<
String
>,
Integer
>
userFlagsHashes
=
tasksRepository
.
getUserFlagsHashes
(
user
.
getName
());
return
userFlagsHashes
.
entrySet
()
.
stream
()
.
flatMap
(
listIntegerEntry
->
listIntegerEntry
.
getKey
().
stream
())
.
collect
(
Collectors
.
toList
());
}
}
//todo: merge with upper
//todo: merge with upper
...
@@ -49,9 +55,10 @@ public class TasksResource
...
@@ -49,9 +55,10 @@ public class TasksResource
@Path
(
"/flags/user_task_flag"
)
@Path
(
"/flags/user_task_flag"
)
@Consumes
(
MediaType
.
APPLICATION_JSON
)
@Consumes
(
MediaType
.
APPLICATION_JSON
)
public
Response
getUserTaskFlag
(
@Valid
final
TaskUserPair
taskUserPair
)
{
public
Response
getUserTaskFlag
(
@Valid
final
TaskUserPair
taskUserPair
)
{
Optional
<
String
>
userTaskFlag
=
tasksRepository
.
getUserTaskFlag
(
taskUserPair
.
getUsername
(),
taskUserPair
.
getTaskId
());
//todo
if
(
userTaskFlag
.
isPresent
())
{
Optional
<
List
<
String
>>
userTaskFlags
=
tasksRepository
.
getUserTaskFlags
(
taskUserPair
.
getUsername
(),
taskUserPair
.
getTaskLevel
());
//todo
return
Response
.
ok
().
entity
(
userTaskFlag
.
get
()).
build
();
if
(
userTaskFlags
.
isPresent
())
{
return
Response
.
ok
().
entity
(
userTaskFlags
.
get
()).
build
();
}
}
return
Response
.
status
(
Response
.
Status
.
BAD_REQUEST
).
build
();
return
Response
.
status
(
Response
.
Status
.
BAD_REQUEST
).
build
();
}
}
...
...
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