mirror of
https://github.com/gitbucket/gitbucket.git
synced 2025-11-07 22:15:51 +01:00
(refs #115)Base URL is required if SSH access is enabled
This commit is contained in:
@@ -41,7 +41,11 @@ trait SystemSettingsControllerBase extends ControllerBase {
|
|||||||
"tls" -> trim(label("Enable TLS", optional(boolean()))),
|
"tls" -> trim(label("Enable TLS", optional(boolean()))),
|
||||||
"keystore" -> trim(label("Keystore", optional(text())))
|
"keystore" -> trim(label("Keystore", optional(text())))
|
||||||
)(Ldap.apply))
|
)(Ldap.apply))
|
||||||
)(SystemSettings.apply)
|
)(SystemSettings.apply).verifying { settings =>
|
||||||
|
if(settings.ssh && settings.baseUrl.isEmpty){
|
||||||
|
Seq("baseUrl" -> "Base URL is required if SSH access is enabled.")
|
||||||
|
} else Nil
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
get("/admin/system")(adminOnly {
|
get("/admin/system")(adminOnly {
|
||||||
@@ -51,8 +55,10 @@ trait SystemSettingsControllerBase extends ControllerBase {
|
|||||||
post("/admin/system", form)(adminOnly { form =>
|
post("/admin/system", form)(adminOnly { form =>
|
||||||
saveSystemSettings(form)
|
saveSystemSettings(form)
|
||||||
|
|
||||||
if(form.ssh && !SshServer.isActive){
|
if(form.ssh && !SshServer.isActive && form.baseUrl.isDefined){
|
||||||
SshServer.start(request.getServletContext, form.sshPort.getOrElse(SystemSettingsService.DefaultSshPort))
|
SshServer.start(request.getServletContext,
|
||||||
|
form.sshPort.getOrElse(SystemSettingsService.DefaultSshPort),
|
||||||
|
form.baseUrl.get)
|
||||||
} else if(!form.ssh && SshServer.isActive){
|
} else if(!form.ssh && SshServer.isActive){
|
||||||
SshServer.stop()
|
SshServer.stop()
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -96,10 +96,8 @@ class GitUploadPack(context: ServletContext, owner: String, repoName: String) ex
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
class GitReceivePack(context: ServletContext, owner: String, repoName: String) extends GitCommand(context, owner, repoName)
|
class GitReceivePack(context: ServletContext, owner: String, repoName: String, baseUrl: String) extends GitCommand(context, owner, repoName)
|
||||||
with SystemSettingsService with RepositoryService with AccountService {
|
with SystemSettingsService with RepositoryService with AccountService {
|
||||||
// TODO Correct this info. where i get base url?
|
|
||||||
val BaseURL: String = loadSystemSettings().baseUrl.getOrElse("http://localhost:8080")
|
|
||||||
|
|
||||||
override protected def runTask(user: String): Unit = {
|
override protected def runTask(user: String): Unit = {
|
||||||
getRepository(owner, repoName, null).foreach { repositoryInfo =>
|
getRepository(owner, repoName, null).foreach { repositoryInfo =>
|
||||||
@@ -107,7 +105,7 @@ class GitReceivePack(context: ServletContext, owner: String, repoName: String) e
|
|||||||
using(Git.open(getRepositoryDir(owner, repoName))) { git =>
|
using(Git.open(getRepositoryDir(owner, repoName))) { git =>
|
||||||
val repository = git.getRepository
|
val repository = git.getRepository
|
||||||
val receive = new ReceivePack(repository)
|
val receive = new ReceivePack(repository)
|
||||||
receive.setPostReceiveHook(new CommitLogHook(owner, repoName, user, BaseURL))
|
receive.setPostReceiveHook(new CommitLogHook(owner, repoName, user, baseUrl))
|
||||||
receive.receive(in, out, err)
|
receive.receive(in, out, err)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -116,14 +114,14 @@ class GitReceivePack(context: ServletContext, owner: String, repoName: String) e
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
class GitCommandFactory(context: ServletContext) extends CommandFactory {
|
class GitCommandFactory(context: ServletContext, baseUrl: String) extends CommandFactory {
|
||||||
private val logger = LoggerFactory.getLogger(classOf[GitCommandFactory])
|
private val logger = LoggerFactory.getLogger(classOf[GitCommandFactory])
|
||||||
|
|
||||||
override def createCommand(command: String): Command = {
|
override def createCommand(command: String): Command = {
|
||||||
logger.debug(s"command: $command")
|
logger.debug(s"command: $command")
|
||||||
command match {
|
command match {
|
||||||
case GitCommand.CommandRegex("upload", owner, repoName) => new GitUploadPack(context, owner, repoName)
|
case GitCommand.CommandRegex("upload", owner, repoName) => new GitUploadPack(context, owner, repoName)
|
||||||
case GitCommand.CommandRegex("receive", owner, repoName) => new GitReceivePack(context, owner, repoName)
|
case GitCommand.CommandRegex("receive", owner, repoName) => new GitReceivePack(context, owner, repoName, baseUrl)
|
||||||
case _ => new UnknownCommand(command)
|
case _ => new UnknownCommand(command)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -12,17 +12,17 @@ object SshServer {
|
|||||||
private val server = org.apache.sshd.SshServer.setUpDefaultServer()
|
private val server = org.apache.sshd.SshServer.setUpDefaultServer()
|
||||||
private val active = new AtomicBoolean(false)
|
private val active = new AtomicBoolean(false)
|
||||||
|
|
||||||
private def configure(context: ServletContext, port: Int) = {
|
private def configure(context: ServletContext, port: Int, baseUrl: String) = {
|
||||||
server.setPort(port)
|
server.setPort(port)
|
||||||
server.setKeyPairProvider(new SimpleGeneratorHostKeyProvider(s"${Directory.GitBucketHome}/gitbucket.ser"))
|
server.setKeyPairProvider(new SimpleGeneratorHostKeyProvider(s"${Directory.GitBucketHome}/gitbucket.ser"))
|
||||||
server.setPublickeyAuthenticator(new PublicKeyAuthenticator(context))
|
server.setPublickeyAuthenticator(new PublicKeyAuthenticator(context))
|
||||||
server.setCommandFactory(new GitCommandFactory(context))
|
server.setCommandFactory(new GitCommandFactory(context, baseUrl))
|
||||||
server.setShellFactory(new NoShell)
|
server.setShellFactory(new NoShell)
|
||||||
}
|
}
|
||||||
|
|
||||||
def start(context: ServletContext, port: Int) = {
|
def start(context: ServletContext, port: Int, baseUrl: String) = {
|
||||||
if(active.compareAndSet(false, true)){
|
if(active.compareAndSet(false, true)){
|
||||||
configure(context, port)
|
configure(context, port, baseUrl)
|
||||||
server.start()
|
server.start()
|
||||||
logger.info(s"Start SSH Server Listen on ${server.getPort}")
|
logger.info(s"Start SSH Server Listen on ${server.getPort}")
|
||||||
}
|
}
|
||||||
@@ -48,7 +48,14 @@ class SshServerListener extends ServletContextListener with SystemSettingsServic
|
|||||||
override def contextInitialized(sce: ServletContextEvent): Unit = {
|
override def contextInitialized(sce: ServletContextEvent): Unit = {
|
||||||
val settings = loadSystemSettings()
|
val settings = loadSystemSettings()
|
||||||
if(settings.ssh){
|
if(settings.ssh){
|
||||||
SshServer.start(sce.getServletContext, settings.sshPort.getOrElse(SystemSettingsService.DefaultSshPort))
|
if(settings.baseUrl.isEmpty){
|
||||||
|
// TODO use logger?
|
||||||
|
println("Could not start SshServer because the baseUrl is not configured.")
|
||||||
|
} else {
|
||||||
|
SshServer.start(sce.getServletContext,
|
||||||
|
settings.sshPort.getOrElse(SystemSettingsService.DefaultSshPort),
|
||||||
|
settings.baseUrl.get)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -22,9 +22,10 @@
|
|||||||
<fieldset>
|
<fieldset>
|
||||||
<div class="controls">
|
<div class="controls">
|
||||||
<input type="text" name="baseUrl" id="baseUrl" style="width: 400px" value="@settings.baseUrl"/>
|
<input type="text" name="baseUrl" id="baseUrl" style="width: 400px" value="@settings.baseUrl"/>
|
||||||
|
<span id="error-baseUrl" class="error"></span>
|
||||||
</div>
|
</div>
|
||||||
</fieldset>
|
</fieldset>
|
||||||
<p>
|
<p class="muted">
|
||||||
The base URL is used for redirect, notification email, git repository URL box and more.
|
The base URL is used for redirect, notification email, git repository URL box and more.
|
||||||
If the base URL is empty, GitBucket generates URL from request information.
|
If the base URL is empty, GitBucket generates URL from request information.
|
||||||
You can use this property to adjust URL difference between the reverse proxy and GitBucket.
|
You can use this property to adjust URL difference between the reverse proxy and GitBucket.
|
||||||
@@ -75,6 +76,9 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
<p class="muted">
|
||||||
|
Base URL is required if SSH access is enabled.
|
||||||
|
</p>
|
||||||
<!--====================================================================-->
|
<!--====================================================================-->
|
||||||
<!-- Authentication -->
|
<!-- Authentication -->
|
||||||
<!--====================================================================-->
|
<!--====================================================================-->
|
||||||
|
|||||||
@@ -48,7 +48,7 @@ $(function(){
|
|||||||
$('#repository-url-copy').attr('data-clipboard-text', $('#repository-url').val());
|
$('#repository-url-copy').attr('data-clipboard-text', $('#repository-url').val());
|
||||||
});
|
});
|
||||||
$('#repository-url-ssh').click(function(){
|
$('#repository-url-ssh').click(function(){
|
||||||
$('#repository-url').val('@repository.sshUrl(settings.sshPort.get)'); // TODO apply default value for None?
|
$('#repository-url').val('@repository.sshUrl(settings.sshPort.getOrElse(service.SystemSettingsService.DefaultSshPort))');
|
||||||
$('#repository-url-copy').attr('data-clipboard-text', $('#repository-url').val());
|
$('#repository-url-copy').attr('data-clipboard-text', $('#repository-url').val());
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|||||||
Reference in New Issue
Block a user