diff --git a/src/main/scala/app/SettingsController.scala b/src/main/scala/app/SettingsController.scala index dd7f52c..a4fef9e 100644 --- a/src/main/scala/app/SettingsController.scala +++ b/src/main/scala/app/SettingsController.scala @@ -1,8 +1,10 @@ package app import service._ +import util.Directory._ import util.OwnerOnlyAuthenticator import jp.sf.amateras.scalatra.forms._ +import org.apache.commons.io.FileUtils class SettingsController extends SettingsControllerBase with RepositoryService with AccountService with OwnerOnlyAuthenticator @@ -95,8 +97,35 @@ removeCollaborator(owner, repository, userName) redirect("/%s/%s/settings/collaborators".format(owner, repository)) }) - - + + /** + * Display the delete repository page. + */ + get("/:owner/:repository/settings/delete")(ownerOnly { + val owner = params("owner") + val repository = params("repository") + + getRepository(owner, repository, servletContext) match { + case Some(r) => settings.html.delete(r) + case None => NotFound() + } + }) + + /** + * Delete the repository. + */ + post("/:owner/:repository/settings/delete")(ownerOnly { + val owner = params("owner") + val repository = params("repository") + + deleteRepository(owner, repository) + + FileUtils.deleteDirectory(getRepositoryDir(owner, repository)) + FileUtils.deleteDirectory(getWikiRepositoryDir(owner, repository)) + + redirect("/%s".format(owner)) + }) + /** * Provides Constraint to validate the collaborator name. */ diff --git a/src/main/scala/service/RepositoryService.scala b/src/main/scala/service/RepositoryService.scala index 88068ee..a2c0b67 100644 --- a/src/main/scala/service/RepositoryService.scala +++ b/src/main/scala/service/RepositoryService.scala @@ -42,6 +42,16 @@ lastActivityDate = currentDate) } + def deleteRepository(userName: String, repositoryName: String): Unit = { + Collaborators + .filter { c => (c.userName is userName.bind) && (c.repositoryName is repositoryName.bind) } + .delete + + Repositories + .filter { r => (r.userName is userName.bind) && (r.repositoryName is repositoryName.bind) } + .delete + } + /** * Returns the list of specified user's repositories information. * diff --git a/src/main/twirl/settings/delete.scala.html b/src/main/twirl/settings/delete.scala.html new file mode 100644 index 0000000..105f6a6 --- /dev/null +++ b/src/main/twirl/settings/delete.scala.html @@ -0,0 +1,21 @@ +@(repository: service.RepositoryService.RepositoryInfo)(implicit context: app.Context) +@import context._ +@html.main("Delete Repository"){ + @html.header("settings", repository) + @menu("delete", repository){ +
+

Delete repository

+

+ Once you delete a repository, there is no going back. +

+ +
+ } +} + \ No newline at end of file