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
1239bc4e
Commit
1239bc4e
authored
Nov 11, 2016
by
Grzegorz Pietrusza
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
initial version of refactored repositories
parent
a52bf60c
Hide whitespace changes
Inline
Side-by-side
Showing
12 changed files
with
64 additions
and
92 deletions
+64
-92
CTFApplication.java
.../java/com/telephoners/krakyournet/ctf/CTFApplication.java
+8
-12
Solution.java
.../java/com/telephoners/krakyournet/ctf/beans/Solution.java
+2
-1
Team.java
...main/java/com/telephoners/krakyournet/ctf/beans/Team.java
+3
-1
Task.java
...ava/com/telephoners/krakyournet/ctf/beans/tasks/Task.java
+2
-1
RegisterTasksCommand.java
...honers/krakyournet/ctf/commands/RegisterTasksCommand.java
+1
-1
RegisterTeamsCommand.java
...honers/krakyournet/ctf/commands/RegisterTeamsCommand.java
+1
-1
ApplicationModule.java
...elephoners/krakyournet/ctf/modules/ApplicationModule.java
+18
-5
Repository.java
.../telephoners/krakyournet/ctf/repositories/Repository.java
+6
-32
SolutionsRepository.java
...ers/krakyournet/ctf/repositories/SolutionsRepository.java
+12
-15
TasksRepository.java
...phoners/krakyournet/ctf/repositories/TasksRepository.java
+3
-6
TeamsRepository.java
...phoners/krakyournet/ctf/repositories/TeamsRepository.java
+5
-8
UsersRepository.java
...phoners/krakyournet/ctf/repositories/UsersRepository.java
+3
-9
No files found.
service/src/main/java/com/telephoners/krakyournet/ctf/CTFApplication.java
View file @
1239bc4e
...
...
@@ -5,7 +5,6 @@ import com.google.common.collect.ImmutableSet;
import
com.google.common.reflect.ClassPath
;
import
com.google.inject.Guice
;
import
com.google.inject.Injector
;
import
com.telephoners.krakyournet.ctf.auth.UserAuthenticator
;
import
com.telephoners.krakyournet.ctf.beans.User
;
import
com.telephoners.krakyournet.ctf.commands.PurgeDatabaseCommand
;
import
com.telephoners.krakyournet.ctf.commands.RegisterTasksCommand
;
...
...
@@ -14,12 +13,9 @@ import com.telephoners.krakyournet.ctf.core.ApplicationConfiguration;
import
com.telephoners.krakyournet.ctf.logging.LoggingFilter
;
import
com.telephoners.krakyournet.ctf.modules.ApplicationModule
;
import
com.telephoners.krakyournet.ctf.repositories.SofaRepository
;
import
com.telephoners.krakyournet.ctf.repositories.UsersRepository
;
import
io.dropwizard.Application
;
import
io.dropwizard.assets.AssetsBundle
;
import
io.dropwizard.auth.AuthDynamicFeature
;
import
io.dropwizard.auth.AuthValueFactoryProvider
;
import
io.dropwizard.auth.basic.BasicCredentialAuthFilter
;
import
io.dropwizard.jersey.setup.JerseyEnvironment
;
import
io.dropwizard.setup.Bootstrap
;
import
io.dropwizard.setup.Environment
;
...
...
@@ -51,16 +47,16 @@ public class CTFApplication extends Application<ApplicationConfiguration>
JerseyEnvironment
jersey
=
environment
.
jersey
();
final
ClassPath
classPath
=
ClassPath
.
from
(
this
.
getClass
().
getClassLoader
());
ImmutableSet
<
ClassPath
.
ClassInfo
>
resourceClasses
=
classPath
.
getTopLevelClasses
(
"com.telephoners.krakyournet.ctf.resources"
);
resourceClasses
.
stream
()
.
forEach
(
classInfo
->
jersey
.
register
(
injector
.
getInstance
(
classInfo
.
load
())));
//
resourceClasses.stream()
//
.forEach(classInfo -> jersey.register(injector.getInstance(classInfo.load())));
}
private
void
registerAuthFeatures
(
Environment
environment
)
{
environment
.
jersey
().
register
(
new
AuthDynamicFeature
(
new
BasicCredentialAuthFilter
.
Builder
<
User
>()
.
setAuthenticator
(
injector
.
getInstance
(
UserAuthenticator
.
class
))
.
buildAuthFilter
()));
//
environment.jersey().register(new AuthDynamicFeature(
//
new BasicCredentialAuthFilter.Builder<User>()
//
.setAuthenticator(injector.getInstance(UserAuthenticator.class))
//
.buildAuthFilter()));
environment
.
jersey
().
register
(
RolesAllowedDynamicFeature
.
class
);
environment
.
jersey
().
register
(
new
AuthValueFactoryProvider
.
Binder
<>(
User
.
class
));
}
...
...
@@ -95,8 +91,8 @@ public class CTFApplication extends Application<ApplicationConfiguration>
private
void
registerAdmins
(
ApplicationConfiguration
applicationConfiguration
)
{
UsersRepository
usersRepository
=
injector
.
getInstance
(
UsersRepository
.
class
);
applicationConfiguration
.
getAdmins
().
forEach
(
usersRepository:
:
add
);
//
UsersRepository usersRepository = injector.getInstance(UsersRepository.class);
//
applicationConfiguration.getAdmins().forEach(usersRepository::add);
}
private
Injector
createInjector
(
ApplicationConfiguration
applicationConfiguration
)
...
...
service/src/main/java/com/telephoners/krakyournet/ctf/beans/Solution.java
View file @
1239bc4e
package
com
.
telephoners
.
krakyournet
.
ctf
.
beans
;
import
com.telephoners.krakyournet.ctf.beans.tasks.Task
;
import
org.ektorp.support.CouchDbDocument
;
import
org.joda.time.Instant
;
import
static
com
.
google
.
common
.
base
.
Preconditions
.
checkNotNull
;
public
class
Solution
public
class
Solution
extends
CouchDbDocument
{
private
Task
task
;
private
Team
team
;
...
...
service/src/main/java/com/telephoners/krakyournet/ctf/beans/Team.java
View file @
1239bc4e
...
...
@@ -2,10 +2,12 @@ package com.telephoners.krakyournet.ctf.beans;
import
com.fasterxml.jackson.annotation.JsonCreator
;
import
com.fasterxml.jackson.annotation.JsonProperty
;
import
org.ektorp.support.CouchDbDocument
;
import
java.util.List
;
public
class
Team
{
public
class
Team
extends
CouchDbDocument
{
private
String
name
;
private
String
description
;
...
...
service/src/main/java/com/telephoners/krakyournet/ctf/beans/tasks/Task.java
View file @
1239bc4e
...
...
@@ -4,13 +4,14 @@ 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
;
import
org.ektorp.support.CouchDbDocument
;
import
javax.ws.rs.core.Response
;
import
java.net.URISyntaxException
;
import
java.util.List
;
@JsonInclude
(
JsonInclude
.
Include
.
NON_NULL
)
public
abstract
class
Task
public
abstract
class
Task
extends
CouchDbDocument
{
@PublicProperty
private
String
name
;
...
...
service/src/main/java/com/telephoners/krakyournet/ctf/commands/RegisterTasksCommand.java
View file @
1239bc4e
...
...
@@ -30,7 +30,7 @@ public class RegisterTasksCommand extends ConfiguredCommand<ApplicationConfigura
List
<
TextTask
>
cryptoTasks
=
applicationConfiguration
.
getTextTasks
();
List
<
WebTask
>
webTasks
=
applicationConfiguration
.
getWebTasks
();
tasksRepository
.
clean
();
//
tasksRepository.clean();
cryptoTasks
.
forEach
(
tasksRepository:
:
add
);
webTasks
.
forEach
(
tasksRepository:
:
add
);
...
...
service/src/main/java/com/telephoners/krakyournet/ctf/commands/RegisterTeamsCommand.java
View file @
1239bc4e
...
...
@@ -25,7 +25,7 @@ public class RegisterTeamsCommand extends ConfiguredCommand<ApplicationConfigura
TeamsRepository
teamsRepository
=
injector
.
getInstance
(
TeamsRepository
.
class
);
UsersRepository
usersRepository
=
injector
.
getInstance
(
UsersRepository
.
class
);
teamsRepository
.
clean
();
//
teamsRepository.clean();
applicationConfiguration
.
getTeams
().
forEach
(
team
->
{
team
.
getMembers
().
stream
().
forEach
(
usersRepository:
:
add
);
teamsRepository
.
add
(
team
);
...
...
service/src/main/java/com/telephoners/krakyournet/ctf/modules/ApplicationModule.java
View file @
1239bc4e
...
...
@@ -2,17 +2,20 @@ package com.telephoners.krakyournet.ctf.modules;
import
com.google.inject.AbstractModule
;
import
com.google.inject.Provides
;
import
com.
google.inject.name.Named
;
import
com.
telephoners.krakyournet.ctf.beans.User
;
import
com.telephoners.krakyournet.ctf.core.ApplicationConfiguration
;
import
com.telephoners.krakyournet.ctf.repositories.Repository
;
import
org.ektorp.CouchDbConnector
;
import
org.ektorp.CouchDbInstance
;
import
org.ektorp.http.HttpClient
;
import
org.ektorp.http.StdHttpClient
;
import
org.ektorp.impl.StdCouchDbConnector
;
import
org.ektorp.impl.StdCouchDbInstance
;
import
org.ektorp.support.CouchDbDocument
;
import
java.net.MalformedURLException
;
//tdo: split modules
public
class
ApplicationModule
extends
AbstractModule
{
private
final
ApplicationConfiguration
applicationConfiguration
;
...
...
@@ -28,9 +31,15 @@ public class ApplicationModule extends AbstractModule
bind
(
ApplicationConfiguration
.
class
).
toInstance
(
applicationConfiguration
);
}
@Provides
public
Repository
provideUserRepository
(
final
CouchDbConnector
connector
)
{
return
createRepository
(
User
.
class
,
connector
);
}
@Provides
//todo: hide behind interface
public
CouchDbConnector
provideDatastore
(
@Named
(
"database.instance"
)
CouchDbInstance
databaseInstance
)
public
CouchDbConnector
provideDatastore
(
/*@Named("database.instance") */
CouchDbInstance
databaseInstance
)
{
databaseInstance
.
deleteDatabase
(
"database"
);
//todo: temp
final
StdCouchDbConnector
database
=
new
StdCouchDbConnector
(
"database"
,
databaseInstance
);
//todo: to configuration
...
...
@@ -40,14 +49,14 @@ public class ApplicationModule extends AbstractModule
}
@Provides
@Named
(
"database.instance"
)
public
CouchDbInstance
provideDatabaseInstance
(
@Named
(
"database.http.client"
)
final
HttpClient
httpClient
)
//
@Named("database.instance")
public
CouchDbInstance
provideDatabaseInstance
(
/*@Named("database.http.client") */
final
HttpClient
httpClient
)
{
return
new
StdCouchDbInstance
(
httpClient
);
}
@Provides
@Named
(
"database.http.client"
)
//
@Named("database.http.client")
public
HttpClient
provideDatabaseHttpClient
()
throws
MalformedURLException
{
return
new
StdHttpClient
.
Builder
()
...
...
@@ -57,4 +66,8 @@ public class ApplicationModule extends AbstractModule
.
build
();
}
private
Repository
createRepository
(
final
Class
<?
extends
CouchDbDocument
>
clazz
,
final
CouchDbConnector
connector
)
{
return
new
Repository
<>(
clazz
,
connector
);
}
}
service/src/main/java/com/telephoners/krakyournet/ctf/repositories/Repository.java
View file @
1239bc4e
package
com
.
telephoners
.
krakyournet
.
ctf
.
repositories
;
import
javax.inject.Inject
;
import
java.lang.reflect.ParameterizedType
;
import
java.util.Lis
t
;
import
org.ektorp.CouchDbConnector
;
import
org.ektorp.support.CouchDbDocument
;
import
org.ektorp.support.CouchDbRepositorySuppor
t
;
public
abstract
class
Repository
<
T
>
public
class
Repository
<
T
extends
CouchDbDocument
>
extends
CouchDbRepositorySupport
<
T
>
{
@Inject
public
Repository
()
public
Repository
(
final
Class
<
T
>
type
,
final
CouchDbConnector
connector
)
{
}
public
void
add
(
T
item
)
{
// datastore.save(item);
}
public
List
<
T
>
getAll
()
{
return
null
;
// return datastore.createQuery(getRepositoryType()).asList();
}
public
void
clean
()
{
// datastore.getCollection(getRepositoryType()).drop();
}
Class
getRepositoryType
()
{
try
{
return
Class
.
forName
((((
ParameterizedType
)
this
.
getClass
().
getGenericSuperclass
())
.
getActualTypeArguments
()[
0
]).
getTypeName
());
}
catch
(
ClassNotFoundException
e
)
{
throw
new
IllegalStateException
(
"Class not found"
);
}
super
(
type
,
connector
);
}
}
service/src/main/java/com/telephoners/krakyournet/ctf/repositories/SolutionsRepository.java
View file @
1239bc4e
...
...
@@ -3,27 +3,23 @@ package com.telephoners.krakyournet.ctf.repositories;
import
com.telephoners.krakyournet.ctf.beans.Flag
;
import
com.telephoners.krakyournet.ctf.beans.Solution
;
import
com.telephoners.krakyournet.ctf.beans.Team
;
import
com.telephoners.krakyournet.ctf.beans.tasks.Task
;
import
com.telephoners.krakyournet.ctf.exceptions.SolutionAlreadySubmittedException
;
import
org.ektorp.CouchDbConnector
;
import
javax.inject.Inject
;
import
javax.inject.Singleton
;
import
java.util.List
;
import
java.util.Map
;
import
java.util.function.Function
;
import
java.util.stream.Collectors
;
@Singleton
public
class
SolutionsRepository
extends
Repository
<
Solution
>
{
private
final
TasksRepository
tasksRepository
;
@Inject
public
SolutionsRepository
(
TasksRepository
tasksRepository
)
public
SolutionsRepository
(
Class
<
Solution
>
type
,
CouchDbConnector
connector
)
{
this
.
tasksRepository
=
tasksRepository
;
super
(
type
,
connector
)
;
}
public
Map
<
Integer
,
List
<
Flag
>>
getTeamSolutions
(
Team
team
)
{
return
null
;
...
...
@@ -65,13 +61,14 @@ public class SolutionsRepository extends Repository<Solution>
public
List
<
Integer
>
getCompletedTasks
(
Team
team
)
{
Map
<
Integer
,
List
<
Flag
>>
teamSolutions
=
getTeamSolutions
(
team
);
return
tasksRepository
.
getAll
().
stream
()
.
filter
(
task
->
{
List
<
Flag
>
teamTaskSolutions
=
teamSolutions
.
get
(
task
.
getLevel
());
return
teamTaskSolutions
!=
null
&&
teamTaskSolutions
.
size
()
==
task
.
getFlags
().
size
();
})
.
map
(
Task:
:
getLevel
)
.
collect
(
Collectors
.
toList
());
return
null
;
// return tasksRepository.getAll().stream()
// .filter(task -> {
// List<Flag> teamTaskSolutions = teamSolutions.get(task.getLevel());
// return teamTaskSolutions != null && teamTaskSolutions.size() == task.getFlags().size();
// })
// .map(Task::getLevel)
// .collect(Collectors.toList());
}
public
void
submitSolution
(
Solution
solution
)
...
...
service/src/main/java/com/telephoners/krakyournet/ctf/repositories/TasksRepository.java
View file @
1239bc4e
...
...
@@ -2,16 +2,13 @@ package com.telephoners.krakyournet.ctf.repositories;
import
com.sun.tools.javac.util.List
;
import
com.telephoners.krakyournet.ctf.beans.tasks.Task
;
import
org.ektorp.CouchDbConnector
;
import
javax.inject.Inject
;
import
javax.inject.Singleton
;
@Singleton
public
class
TasksRepository
extends
Repository
<
Task
>
{
@Inject
public
TasksRepository
()
public
TasksRepository
(
Class
<
Task
>
type
,
CouchDbConnector
connector
)
{
super
(
type
,
connector
);
}
public
Task
getByLevel
(
int
level
)
...
...
service/src/main/java/com/telephoners/krakyournet/ctf/repositories/TeamsRepository.java
View file @
1239bc4e
...
...
@@ -2,19 +2,15 @@ package com.telephoners.krakyournet.ctf.repositories;
import
com.telephoners.krakyournet.ctf.beans.Team
;
import
com.telephoners.krakyournet.ctf.beans.User
;
import
org.ektorp.CouchDbConnector
;
import
javax.inject.Inject
;
import
javax.inject.Singleton
;
@Singleton
public
class
TeamsRepository
extends
Repository
<
Team
>
{
private
final
UsersRepository
usersRepository
;
@Inject
public
TeamsRepository
(
UsersRepository
usersRepository
)
public
TeamsRepository
(
Class
<
Team
>
type
,
CouchDbConnector
connector
)
{
this
.
usersRepository
=
usersRepository
;
super
(
type
,
connector
)
;
}
public
Team
getTeamByUser
(
User
user
)
...
...
@@ -29,6 +25,7 @@ public class TeamsRepository extends Repository<Team>
public
Team
getTeamByUserName
(
String
username
)
{
return
getTeamByUser
(
usersRepository
.
getUserByName
(
username
));
return
null
;
// return getTeamByUser(usersRepository.getUserByName(username));
}
}
service/src/main/java/com/telephoners/krakyournet/ctf/repositories/UsersRepository.java
View file @
1239bc4e
package
com
.
telephoners
.
krakyournet
.
ctf
.
repositories
;
import
com.google.inject.Inject
;
import
com.google.inject.Singleton
;
import
com.telephoners.krakyournet.ctf.beans.User
;
import
com.telephoners.krakyournet.ctf.providers.MessageDigestProvider
;
import
io.dropwizard.auth.basic.BasicCredentials
;
import
org.ektorp.CouchDbConnector
;
@Singleton
public
class
UsersRepository
extends
Repository
<
User
>
{
private
final
MessageDigestProvider
messageDigestProvider
;
@Inject
public
UsersRepository
(
MessageDigestProvider
messageDigestProvider
)
public
UsersRepository
(
Class
<
User
>
type
,
CouchDbConnector
connector
)
{
this
.
messageDigestProvider
=
messageDigestProvider
;
super
(
type
,
connector
)
;
}
public
User
getUserByName
(
String
username
)
...
...
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