diff --git a/src/main/scala/gitbucket/core/controller/SystemSettingsController.scala b/src/main/scala/gitbucket/core/controller/SystemSettingsController.scala index 7841721..2e54423 100644 --- a/src/main/scala/gitbucket/core/controller/SystemSettingsController.scala +++ b/src/main/scala/gitbucket/core/controller/SystemSettingsController.scala @@ -62,8 +62,9 @@ "mailAttribute" -> trim(label("Mail address attribute", optional(text()))), "tls" -> trim(label("Enable TLS", optional(boolean()))), "ssl" -> trim(label("Enable SSL", optional(boolean()))), - "keystore" -> trim(label("Keystore", optional(text()))) - )(Ldap.apply)) + "keystore" -> trim(label("Keystore", optional(text()))), + )(Ldap.apply)), + "debug" -> trim(label("Debug", boolean())) )(SystemSettings.apply).verifying { settings => Vector( if(settings.ssh && settings.baseUrl.isEmpty){ diff --git a/src/main/scala/gitbucket/core/service/SystemSettingsService.scala b/src/main/scala/gitbucket/core/service/SystemSettingsService.scala index 248d122..7734f3e 100644 --- a/src/main/scala/gitbucket/core/service/SystemSettingsService.scala +++ b/src/main/scala/gitbucket/core/service/SystemSettingsService.scala @@ -54,6 +54,7 @@ ldap.keystore.foreach(x => props.setProperty(LdapKeystore, x)) } } + props.setProperty(Debug, settings.debug.toString) using(new java.io.FileOutputStream(GitBucketConf)){ out => props.store(out, null) } @@ -111,7 +112,8 @@ getOptionValue(props, LdapKeystore, None))) } else { None - } + }, + getValue(props, Debug, false) ) } } @@ -136,7 +138,8 @@ useSMTP: Boolean, smtp: Option[Smtp], ldapAuthentication: Boolean, - ldap: Option[Ldap]){ + ldap: Option[Ldap], + debug: Boolean){ def baseUrl(request: HttpServletRequest): String = baseUrl.fold(request.baseUrl)(_.stripSuffix("/")) def sshAddress:Option[SshAddress] = @@ -219,6 +222,7 @@ private val LdapTls = "ldap.tls" private val LdapSsl = "ldap.ssl" private val LdapKeystore = "ldap.keystore" + private val Debug = "debug" private def getValue[A: ClassTag](props: java.util.Properties, key: String, default: A): A = { getSystemProperty(key).getOrElse(getEnvironmentVariable(key).getOrElse { diff --git a/src/main/twirl/gitbucket/core/error.scala.html b/src/main/twirl/gitbucket/core/error.scala.html index 211073c..2671797 100644 --- a/src/main/twirl/gitbucket/core/error.scala.html +++ b/src/main/twirl/gitbucket/core/error.scala.html @@ -3,15 +3,19 @@

@title

- @e.map { ex => -

@ex.getMessage

- - - @ex.getStackTrace.map{ st => - - } - -
@st
+ @if(context.loginAccount.map{_.isAdmin}.getOrElse(false) || context.settings.debug){ + @e.map { ex => +

@ex.getMessage

+ + + @ex.getStackTrace.map{ st => + + } + +
@st
+ } + } else { +
Please contact your administrator.
}
diff --git a/src/test/scala/gitbucket/core/view/AvatarImageProviderSpec.scala b/src/test/scala/gitbucket/core/view/AvatarImageProviderSpec.scala index 27d8c7d..c78b205 100644 --- a/src/test/scala/gitbucket/core/view/AvatarImageProviderSpec.scala +++ b/src/test/scala/gitbucket/core/view/AvatarImageProviderSpec.scala @@ -118,7 +118,8 @@ useSMTP = false, smtp = None, ldapAuthentication = false, - ldap = None) + ldap = None, + debug = false) /** * Adapter to test AvatarImageProviderImpl.