Update bootstrap to 4.5

This commit is contained in:
Robin Shen 2020-07-15 09:24:31 +08:00
parent c2f2cff766
commit 028145ce2a
642 changed files with 91124 additions and 2007 deletions

29
pom.xml
View File

@ -309,16 +309,6 @@
<artifactId>HikariCP</artifactId>
<version>2.7.9</version>
</dependency>
<dependency>
<groupId>de.agilecoders.wicket</groupId>
<artifactId>wicket-bootstrap-core</artifactId>
<version>${wicketbootstrap.version}</version>
</dependency>
<dependency>
<groupId>de.agilecoders.wicket</groupId>
<artifactId>wicket-bootstrap-extensions</artifactId>
<version>${wicketbootstrap.version}</version>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-collections4</artifactId>
@ -429,16 +419,6 @@
<artifactId>quartz</artifactId>
<version>2.3.2</version>
</dependency>
<dependency>
<groupId>org.webjars</groupId>
<artifactId>font-awesome</artifactId>
<version>4.7.0</version>
</dependency>
<dependency>
<groupId>org.webjars.npm</groupId>
<artifactId>codemirror</artifactId>
<version>5.21.0</version>
</dependency>
<dependency>
<groupId>org.apache.shiro</groupId>
<artifactId>shiro-core</artifactId>
@ -564,7 +544,12 @@
<artifactId>sshd-core</artifactId>
<version>2.2.0</version>
</dependency>
</dependencies>
<dependency>
<groupId>org.json</groupId>
<artifactId>json</artifactId>
<version>20090211</version>
</dependency>
</dependencies>
</dependencyManagement>
<repositories>
<repository>
@ -589,7 +574,7 @@
<logback.version>1.0.11</logback.version>
<antlr.version>4.7.2</antlr.version>
<jetty.version>9.4.24.v20191120</jetty.version>
<wicket.version>7.14.0</wicket.version>
<wicket.version>7.17.0</wicket.version>
<jersey.version>2.26</jersey.version>
<hibernate.version>5.4.9.Final</hibernate.version>
<wicketbootstrap.version>0.10.18</wicketbootstrap.version>

View File

@ -98,20 +98,6 @@
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.webjars</groupId>
<artifactId>font-awesome</artifactId>
<exclusions>
<exclusion>
<groupId>org.webjars</groupId>
<artifactId>bootstrap</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.webjars.npm</groupId>
<artifactId>codemirror</artifactId>
</dependency>
<dependency>
<groupId>org.apache.shiro</groupId>
<artifactId>shiro-core</artifactId>
@ -266,14 +252,6 @@
<groupId>org.apache.wicket</groupId>
<artifactId>wicket-native-websocket-core</artifactId>
</dependency>
<dependency>
<groupId>de.agilecoders.wicket</groupId>
<artifactId>wicket-bootstrap-core</artifactId>
</dependency>
<dependency>
<groupId>de.agilecoders.wicket</groupId>
<artifactId>wicket-bootstrap-extensions</artifactId>
</dependency>
<dependency>
<groupId>commons-fileupload</groupId>
<artifactId>commons-fileupload</artifactId>
@ -322,6 +300,10 @@
<groupId>org.dom4j</groupId>
<artifactId>dom4j</artifactId>
</dependency>
<dependency>
<groupId>org.json</groupId>
<artifactId>json</artifactId>
</dependency>
<dependency>
<groupId>io.onedev</groupId>
<artifactId>k8s-helper</artifactId>

View File

@ -1,18 +0,0 @@
package de.agilecoders.wicket.core.markup.html.bootstrap.behavior;
import org.apache.wicket.markup.head.IHeaderResponse;
import de.agilecoders.wicket.core.settings.IBootstrapSettings;
/*
* Remove bootstrap resource reference, as otherwise it causes issue #14 in production mode
*/
public class BootstrapJavascriptBehavior extends BootstrapBaseBehavior {
private static final long serialVersionUID = 1L;
@Override
public void renderHead(IBootstrapSettings settings, IHeaderResponse headerResponse) {
super.renderHead(settings, headerResponse);
}
}

View File

@ -1,47 +0,0 @@
package de.agilecoders.wicket.extensions.markup.html.bootstrap.references;
import org.apache.wicket.markup.head.CssHeaderItem;
import org.apache.wicket.markup.head.HeaderItem;
import org.apache.wicket.request.resource.CssResourceReference;
/**
* Eonasdan datetime-picker css reference
*
* @author Alexey Volkov
* @since 01.02.15
*/
public class DatetimePickerCssReference extends CssResourceReference {
private static final long serialVersionUID = 1L;
/**
* Singleton instance of this reference
*/
private static final class Holder {
private static final DatetimePickerCssReference INSTANCE = new DatetimePickerCssReference();
}
/**
* @return the single instance of the resource reference
*/
public static DatetimePickerCssReference instance() {
return Holder.INSTANCE;
}
/**
* Private constructor.
*/
private DatetimePickerCssReference() {
super(DatetimePickerCssReference.class, "bootstrap-datetimepicker.min.css");
}
/**
* @return this resource reference singleton instance as header item
*/
public static HeaderItem asHeaderItem() {
return CssHeaderItem.forReference(instance());
}
}

View File

@ -1,59 +0,0 @@
package de.agilecoders.wicket.extensions.markup.html.bootstrap.references;
import java.util.List;
import org.apache.wicket.Application;
import org.apache.wicket.markup.head.HeaderItem;
import org.apache.wicket.markup.head.JavaScriptHeaderItem;
import org.apache.wicket.request.resource.JavaScriptResourceReference;
import de.agilecoders.wicket.core.util.Dependencies;
/**
* Eonasdan datetime-picker js reference
*
* @author Alexey Volkov
* @since 01.02.15
*/
public class DatetimePickerJsReference extends JavaScriptResourceReference {
private static final long serialVersionUID = 1L;
/**
* Singleton instance of this reference
*/
private static final class Holder {
private static final DatetimePickerJsReference INSTANCE = new DatetimePickerJsReference();
}
/**
* @return the single instance of the resource reference
*/
public static DatetimePickerJsReference instance() {
return Holder.INSTANCE;
}
/**
* Private constructor.
*/
private DatetimePickerJsReference() {
super(DatetimePickerJsReference.class, "bootstrap-datetimepicker.min.js");
}
@Override
public List<HeaderItem> getDependencies() {
return Dependencies.combine(super.getDependencies(),
JavaScriptHeaderItem.forReference(Application.get().getJavaScriptLibrarySettings().getJQueryReference()),
MomentWithLocalesJsReference.asHeaderItem());
}
/**
* @return this resource reference singleton instance as header item
*/
public static HeaderItem asHeaderItem() {
return JavaScriptHeaderItem.forReference(instance());
}
}

View File

@ -44,7 +44,6 @@ import org.apache.sshd.common.keyprovider.KeyPairProvider;
import org.apache.wicket.Application;
import org.apache.wicket.core.request.mapper.StalePageException;
import org.apache.wicket.protocol.http.PageExpiredException;
import org.apache.wicket.protocol.http.WebApplication;
import org.apache.wicket.protocol.http.WicketFilter;
import org.apache.wicket.protocol.http.WicketServlet;
import org.eclipse.jetty.servlet.ServletContextHandler;
@ -222,10 +221,10 @@ import io.onedev.server.security.BasicAuthenticationFilter;
import io.onedev.server.security.BearerAuthenticationFilter;
import io.onedev.server.security.CodePullAuthorizationSource;
import io.onedev.server.security.FilterChainConfigurator;
import io.onedev.server.security.OneFilterChainResolver;
import io.onedev.server.security.OnePasswordService;
import io.onedev.server.security.OneRememberMeManager;
import io.onedev.server.security.OneWebSecurityManager;
import io.onedev.server.security.DefaultFilterChainResolver;
import io.onedev.server.security.DefaultPasswordService;
import io.onedev.server.security.DefaultRememberMeManager;
import io.onedev.server.security.DefaultWebSecurityManager;
import io.onedev.server.security.SecurityUtils;
import io.onedev.server.security.realm.AbstractAuthorizingRealm;
import io.onedev.server.ssh.DefaultKeyPairProvider;
@ -267,7 +266,7 @@ import io.onedev.server.web.DefaultUrlManager;
import io.onedev.server.web.DefaultWicketFilter;
import io.onedev.server.web.DefaultWicketServlet;
import io.onedev.server.web.ExpectedExceptionContribution;
import io.onedev.server.web.OneWebApplication;
import io.onedev.server.web.WebApplication;
import io.onedev.server.web.ResourcePackScopeContribution;
import io.onedev.server.web.WebApplicationConfigurator;
import io.onedev.server.web.avatar.AvatarManager;
@ -281,7 +280,7 @@ import io.onedev.server.web.editable.DefaultEditSupportRegistry;
import io.onedev.server.web.editable.EditSupport;
import io.onedev.server.web.editable.EditSupportLocator;
import io.onedev.server.web.editable.EditSupportRegistry;
import io.onedev.server.web.mapper.OnePageMapper;
import io.onedev.server.web.mapper.GeneralPageMapper;
import io.onedev.server.web.page.DashboardPage;
import io.onedev.server.web.page.base.BasePage;
import io.onedev.server.web.page.layout.BuildListTab;
@ -504,12 +503,12 @@ public class CoreModule extends AbstractPluginModule {
private void configureSecurity() {
contributeFromPackage(Realm.class, AbstractAuthorizingRealm.class);
bind(RememberMeManager.class).to(OneRememberMeManager.class);
bind(WebSecurityManager.class).to(OneWebSecurityManager.class);
bind(FilterChainResolver.class).to(OneFilterChainResolver.class);
bind(RememberMeManager.class).to(DefaultRememberMeManager.class);
bind(WebSecurityManager.class).to(DefaultWebSecurityManager.class);
bind(FilterChainResolver.class).to(DefaultFilterChainResolver.class);
bind(BasicAuthenticationFilter.class);
bind(BearerAuthenticationFilter.class);
bind(PasswordService.class).to(OnePasswordService.class);
bind(PasswordService.class).to(DefaultPasswordService.class);
bind(ShiroFilter.class);
install(new ShiroAopModule());
contribute(FilterChainConfigurator.class, new FilterChainConfigurator() {
@ -568,8 +567,8 @@ public class CoreModule extends AbstractPluginModule {
contributeFromPackage(EditSupport.class, EditSupport.class);
bind(WebApplication.class).to(OneWebApplication.class);
bind(Application.class).to(OneWebApplication.class);
bind(org.apache.wicket.protocol.http.WebApplication.class).to(WebApplication.class);
bind(Application.class).to(WebApplication.class);
bind(AvatarManager.class).to(DefaultAvatarManager.class);
bind(WebSocketManager.class).to(DefaultWebSocketManager.class);
@ -578,8 +577,8 @@ public class CoreModule extends AbstractPluginModule {
contribute(WebApplicationConfigurator.class, new WebApplicationConfigurator() {
@Override
public void configure(WebApplication application) {
application.mount(new OnePageMapper("/test", TestPage.class));
public void configure(org.apache.wicket.protocol.http.WebApplication application) {
application.mount(new GeneralPageMapper("/test", TestPage.class));
}
});
@ -598,7 +597,7 @@ public class CoreModule extends AbstractPluginModule {
@Override
public Collection<Class<?>> getResourcePackScopes() {
return Lists.newArrayList(OneWebApplication.class);
return Lists.newArrayList(WebApplication.class);
}
});
@ -609,7 +608,7 @@ public class CoreModule extends AbstractPluginModule {
public Collection<Class<? extends Exception>> getExpectedExceptionClasses() {
return Sets.newHashSet(ConstraintViolationException.class, EntityNotFoundException.class,
ObjectNotFoundException.class, StaleStateException.class, UnauthorizedException.class,
OneException.class, PageExpiredException.class, StalePageException.class);
GeneralException.class, PageExpiredException.class, StalePageException.class);
}
});

View File

@ -0,0 +1,19 @@
package io.onedev.server;
public class GeneralException extends RuntimeException {
private static final long serialVersionUID = 1L;
public GeneralException(String message) {
super(message);
}
public GeneralException(String message, Throwable cause) {
super(message, cause);
}
public GeneralException(Throwable cause) {
super(cause);
}
}

View File

@ -1,19 +0,0 @@
package io.onedev.server;
public class OneException extends RuntimeException {
private static final long serialVersionUID = 1L;
public OneException(String message) {
super(message);
}
public OneException(String message, Throwable cause) {
super(message, cause);
}
public OneException(Throwable cause) {
super(cause);
}
}

View File

@ -1,9 +1,9 @@
package io.onedev.server.buildspec;
import io.onedev.server.OneException;
import io.onedev.server.GeneralException;
import io.onedev.server.util.Path;
public class BuildSpecException extends OneException {
public class BuildSpecException extends GeneralException {
private static final long serialVersionUID = 1L;

View File

@ -1,8 +1,8 @@
package io.onedev.server.buildspec;
import io.onedev.server.OneException;
import io.onedev.server.GeneralException;
public class InvalidBuildSpecException extends OneException {
public class InvalidBuildSpecException extends GeneralException {
private static final long serialVersionUID = 1L;

View File

@ -51,7 +51,7 @@ import io.onedev.commons.utils.LockUtils;
import io.onedev.k8shelper.CacheInstance;
import io.onedev.k8shelper.CloneInfo;
import io.onedev.server.OneDev;
import io.onedev.server.OneException;
import io.onedev.server.GeneralException;
import io.onedev.server.buildspec.BuildSpec;
import io.onedev.server.buildspec.job.action.PostBuildAction;
import io.onedev.server.buildspec.job.action.condition.ActionCondition;
@ -162,7 +162,7 @@ public class DefaultJobManager implements JobManager, Runnable, CodePullAuthoriz
for (ConstraintViolation<?> violation: validator.validate(project.getBuildSpec(commitId))) {
String message = String.format("Error validating build spec (project: %s, commit: %s, property: %s, message: %s)",
project.getName(), commitId.name(), violation.getPropertyPath(), violation.getMessage());
throw new OneException(message);
throw new GeneralException(message);
}
} finally {
Project.pop();
@ -222,7 +222,7 @@ public class DefaultJobManager implements JobManager, Runnable, CodePullAuthoriz
if (!checkedJobNames.add(jobName)) {
String message = String.format("Circular job dependencies found (%s)", checkedJobNames);
throw new OneException(message);
throw new GeneralException(message);
}
Map<String, List<String>> paramMapToQuery = new HashMap<>(paramMap);
@ -280,14 +280,14 @@ public class DefaultJobManager implements JobManager, Runnable, CodePullAuthoriz
for (ProjectDependency dependency: build.getJob().getProjectDependencies()) {
Project dependencyProject = projectManager.find(dependency.getProjectName());
if (dependencyProject == null)
throw new OneException("Unable to find dependency project: " + dependency.getProjectName());
throw new GeneralException("Unable to find dependency project: " + dependency.getProjectName());
Subject subject;
if (dependency.getAccessTokenSecret() != null) {
String accessToken = build.getSecretValue(dependency.getAccessTokenSecret());
User user = userManager.findByAccessToken(accessToken);
if (user == null) {
throw new OneException("Unable to access dependency project '"
throw new GeneralException("Unable to access dependency project '"
+ dependency.getProjectName() + "': invalid access token");
}
subject = user.asSubject();
@ -302,12 +302,12 @@ public class DefaultJobManager implements JobManager, Runnable, CodePullAuthoriz
if (dependencyBuild == null) {
String errorMessage = String.format("Unable to find dependency build (project: %s, build number: %d)",
dependency.getProjectName(), buildNumber);
throw new OneException(errorMessage);
throw new GeneralException(errorMessage);
}
JobPermission jobPermission = new JobPermission(dependencyBuild.getJobName(), new AccessBuild());
if (!subject.isPermitted(new ProjectPermission(dependencyProject, jobPermission))) {
throw new OneException("Unable to access dependency build '"
throw new GeneralException("Unable to access dependency build '"
+ dependencyBuild.getFQN() + "': permission denied");
}
@ -463,7 +463,7 @@ public class DefaultJobManager implements JobManager, Runnable, CodePullAuthoriz
@Override
public Boolean call() {
Build build = buildManager.load(buildId);
if (e instanceof OneException)
if (e instanceof GeneralException)
build.setErrorMessage(e.getMessage());
else
build.setErrorMessage(Throwables.getStackTraceAsString(e));
@ -555,7 +555,7 @@ public class DefaultJobManager implements JobManager, Runnable, CodePullAuthoriz
return executionRef.get();
} else {
throw new OneException("No applicable job executor");
throw new GeneralException("No applicable job executor");
}
} finally {
Build.pop();
@ -563,23 +563,23 @@ public class DefaultJobManager implements JobManager, Runnable, CodePullAuthoriz
}
private void log(Throwable e, JobLogger logger) {
if (e instanceof OneException)
if (e instanceof GeneralException)
logger.log(e.getMessage());
else
logger.log(e);
}
private RuntimeException maskSecrets(Throwable e, Collection<String> jobSecretsToMask) {
if (e instanceof OneException) {
if (e instanceof GeneralException) {
String errorMessage = e.getMessage();
for (String secret: jobSecretsToMask)
errorMessage = StringUtils.replace(errorMessage, secret, SecretInput.MASK);
return new OneException(errorMessage);
return new GeneralException(errorMessage);
} else {
String stackTrace = Throwables.getStackTraceAsString(e);
for (String secret: jobSecretsToMask)
stackTrace = StringUtils.replace(stackTrace, secret, SecretInput.MASK);
return new OneException(stackTrace);
return new GeneralException(stackTrace);
}
}
@ -587,7 +587,7 @@ public class DefaultJobManager implements JobManager, Runnable, CodePullAuthoriz
public JobContext getJobContext(String jobToken, boolean mustExist) {
JobContext jobContext = jobContexts.get(jobToken);
if (mustExist && jobContext == null)
throw new OneException("No job context found for specified job token");
throw new GeneralException("No job context found for specified job token");
return jobContext;
}
@ -706,7 +706,7 @@ public class DefaultJobManager implements JobManager, Runnable, CodePullAuthoriz
buildManager.save(build);
listenerRegistry.post(new BuildSubmitted(build));
} else {
throw new OneException("Build #" + build.getNumber() + " not finished yet");
throw new GeneralException("Build #" + build.getNumber() + " not finished yet");
}
}
@ -799,7 +799,7 @@ public class DefaultJobManager implements JobManager, Runnable, CodePullAuthoriz
try {
jobExecutions.put(build.getId(), execute(build));
} catch (Throwable t) {
if (t instanceof OneException)
if (t instanceof GeneralException)
markBuildError(build, t.getMessage());
else
markBuildError(build, Throwables.getStackTraceAsString(t));
@ -846,7 +846,7 @@ public class DefaultJobManager implements JobManager, Runnable, CodePullAuthoriz
}
build.setStatus(Build.Status.CANCELLED);
} catch (ExecutionException e) {
if (e.getCause() instanceof OneException)
if (e.getCause() instanceof GeneralException)
build.setStatus(Build.Status.FAILED, e.getCause().getMessage());
else
build.setStatus(Build.Status.FAILED, e.getMessage());

View File

@ -12,7 +12,7 @@ import java.util.Map.Entry;
import java.util.function.Function;
import io.onedev.commons.utils.StringUtils;
import io.onedev.server.OneException;
import io.onedev.server.GeneralException;
import io.onedev.server.buildspec.job.paramspec.ParamSpec;
import io.onedev.server.model.Build;
import io.onedev.server.util.BeanUtils;
@ -61,18 +61,18 @@ public class VariableInterpolator implements Function<String, String> {
}
return StringUtils.join(paramValues, ",");
} else {
throw new OneException("Invisible param: " + paramName);
throw new GeneralException("Invisible param: " + paramName);
}
}
}
throw new OneException("Undefined param: " + paramName);
throw new GeneralException("Undefined param: " + paramName);
} else if (t.startsWith(PREFIX_PROPERTIES)) {
String propertyName = t.substring(PREFIX_PROPERTIES.length());
String propertyValue = build.getSpec().getPropertyMap().get(propertyName);
if (propertyValue != null)
return propertyValue;
else
throw new OneException("Undefined property: " + propertyName);
throw new GeneralException("Undefined property: " + propertyName);
} else if (t.startsWith(PREFIX_SECRETS)) {
String secretName = t.substring(PREFIX_SECRETS.length());
return build.getSecretValue(secretName);
@ -86,7 +86,7 @@ public class VariableInterpolator implements Function<String, String> {
else
return "";
} else {
throw new OneException("Unrecognized interpolation variable: " + t);
throw new GeneralException("Unrecognized interpolation variable: " + t);
}
}

View File

@ -6,7 +6,7 @@ import org.hibernate.validator.constraints.NotEmpty;
import io.onedev.commons.codeassist.InputSuggestion;
import io.onedev.server.OneDev;
import io.onedev.server.OneException;
import io.onedev.server.GeneralException;
import io.onedev.server.buildspec.job.Job;
import io.onedev.server.entitymanager.MilestoneManager;
import io.onedev.server.model.Build;
@ -57,10 +57,10 @@ public class CloseMilestoneAction extends PostBuildAction {
milestone.setClosed(true);
milestoneManager.save(milestone);
} else {
throw new OneException("Closing milestone '" + milestoneName + "' is not allowed in this build");
throw new GeneralException("Closing milestone '" + milestoneName + "' is not allowed in this build");
}
} else {
throw new OneException("Unable to find milestone '" + milestoneName + "'");
throw new GeneralException("Unable to find milestone '" + milestoneName + "'");
}
}

View File

@ -8,7 +8,7 @@ import org.hibernate.validator.constraints.NotEmpty;
import io.onedev.commons.codeassist.InputSuggestion;
import io.onedev.server.OneDev;
import io.onedev.server.OneException;
import io.onedev.server.GeneralException;
import io.onedev.server.buildspec.job.Job;
import io.onedev.server.entitymanager.ProjectManager;
import io.onedev.server.entitymanager.UserManager;
@ -73,7 +73,7 @@ public class CreateTagAction extends PostBuildAction {
project.createTag(tagName, build.getCommitHash(), tagIdent, getTagMessage());
}
} else {
throw new OneException("Creating tag '" + tagName + "' is not allowed in this build");
throw new GeneralException("Creating tag '" + tagName + "' is not allowed in this build");
}
}

View File

@ -14,7 +14,7 @@ import org.antlr.v4.runtime.Recognizer;
import io.onedev.commons.codeassist.AntlrUtils;
import io.onedev.commons.codeassist.FenceAware;
import io.onedev.commons.utils.StringUtils;
import io.onedev.server.OneException;
import io.onedev.server.GeneralException;
import io.onedev.server.buildspec.job.Job;
import io.onedev.server.buildspec.job.action.condition.ActionConditionParser.AndCriteriaContext;
import io.onedev.server.buildspec.job.action.condition.ActionConditionParser.ConditionContext;
@ -106,7 +106,7 @@ public class ActionCondition extends Criteria<Build> {
case ActionConditionLexer.RequiredByPullRequests:
return new RequiredByPullRequestsCriteria();
default:
throw new OneException("Unexpected operator: " + ctx.operator.getText());
throw new GeneralException("Unexpected operator: " + ctx.operator.getText());
}
}
@ -175,12 +175,12 @@ public class ActionCondition extends Criteria<Build> {
if (operator != ActionConditionLexer.IsEmpty && operator != ActionConditionLexer.Is)
throw newOperatorException(fieldName, operator);
} else {
throw new OneException("Param not found: " + fieldName);
throw new GeneralException("Param not found: " + fieldName);
}
}
private static OneException newOperatorException(String fieldName, int operator) {
return new OneException("Field '" + fieldName + "' is not applicable for operator '"
private static GeneralException newOperatorException(String fieldName, int operator) {
return new GeneralException("Field '" + fieldName + "' is not applicable for operator '"
+ AntlrUtils.getLexerRuleName(ActionConditionLexer.ruleNames, operator) + "'");
}

View File

@ -20,7 +20,7 @@ import org.eclipse.jgit.revwalk.RevCommit;
import io.onedev.commons.codeassist.FenceAware;
import io.onedev.commons.utils.StringUtils;
import io.onedev.server.OneDev;
import io.onedev.server.OneException;
import io.onedev.server.GeneralException;
import io.onedev.server.buildspec.job.action.notificationreceiver.NotificationReceiverParser.CriteriaContext;
import io.onedev.server.entitymanager.GroupManager;
import io.onedev.server.entitymanager.UserManager;
@ -63,14 +63,14 @@ public class NotificationReceiver {
if (user != null)
emails.add(user.getEmail());
else
throw new OneException("Unable to find user '" + userName + "'");
throw new GeneralException("Unable to find user '" + userName + "'");
} else if (criteria.groupCriteria() != null) {
String groupName = getValue(criteria.groupCriteria().Value());
Group group = OneDev.getInstance(GroupManager.class).find(groupName);
if (group != null)
emails.addAll(group.getMembers().stream().map(it->it.getEmail()).collect(Collectors.toList()));
else
throw new OneException("Unable to find group '" + groupName + "'");
throw new GeneralException("Unable to find group '" + groupName + "'");
} else if (criteria.Committers() != null) {
if (build != null) {
for (RevCommit commit: build.getCommits(null)) {

View File

@ -14,7 +14,7 @@ import org.antlr.v4.runtime.Recognizer;
import io.onedev.commons.codeassist.AntlrUtils;
import io.onedev.commons.codeassist.FenceAware;
import io.onedev.commons.utils.StringUtils;
import io.onedev.server.OneException;
import io.onedev.server.GeneralException;
import io.onedev.server.buildspec.job.Job;
import io.onedev.server.buildspec.job.retrycondition.RetryConditionParser.AndCriteriaContext;
import io.onedev.server.buildspec.job.retrycondition.RetryConditionParser.ConditionContext;
@ -139,7 +139,7 @@ public class RetryCondition extends Criteria<Build> {
if (operator != RetryConditionLexer.IsEmpty && operator != RetryConditionLexer.Is)
throw newOperatorException(fieldName, operator);
} else {
throw new OneException("Param not found: " + fieldName);
throw new GeneralException("Param not found: " + fieldName);
}
}
@ -147,8 +147,8 @@ public class RetryCondition extends Criteria<Build> {
return AntlrUtils.getLexerRuleName(RetryConditionLexer.ruleNames, rule);
}
private static OneException newOperatorException(String fieldName, int operator) {
return new OneException("Field '" + fieldName + "' is not applicable for operator '"
private static GeneralException newOperatorException(String fieldName, int operator) {
return new GeneralException("Field '" + fieldName + "' is not applicable for operator '"
+ AntlrUtils.getLexerRuleName(RetryConditionLexer.ruleNames, operator) + "'");
}

View File

@ -59,7 +59,7 @@ import io.onedev.commons.launcher.loader.ListenerRegistry;
import io.onedev.commons.utils.ExceptionUtils;
import io.onedev.commons.utils.LockUtils;
import io.onedev.server.OneDev;
import io.onedev.server.OneException;
import io.onedev.server.GeneralException;
import io.onedev.server.buildspec.BuildSpec;
import io.onedev.server.buildspec.job.Job;
import io.onedev.server.buildspec.job.JobManager;
@ -859,7 +859,7 @@ public class DefaultPullRequestManager extends AbstractEntityManager<PullRequest
}
}
if (!requiredJobNames.isEmpty())
throw new OneException("No pull request trigger to fire required builds: " + requiredJobNames);
throw new GeneralException("No pull request trigger to fire required builds: " + requiredJobNames);
} finally {
ScriptIdentity.pop();
}
@ -971,7 +971,7 @@ public class DefaultPullRequestManager extends AbstractEntityManager<PullRequest
String errorMessage = String.format("Impossible to provide required number of reviewers "
+ "(candidates: %s, required number of reviewers: %d, pull request: #%d)",
reviewers, missingCount, update.getRequest().getNumber());
throw new OneException(errorMessage);
throw new GeneralException(errorMessage);
}
}

View File

@ -1,8 +1,8 @@
package io.onedev.server.git.exception;
import io.onedev.server.OneException;
import io.onedev.server.GeneralException;
public class GitException extends OneException {
public class GitException extends GeneralException {
private static final long serialVersionUID = 1L;

View File

@ -24,7 +24,7 @@ import com.google.common.base.Splitter;
import com.google.common.collect.Lists;
import io.onedev.commons.utils.StringUtils;
import io.onedev.server.OneException;
import io.onedev.server.GeneralException;
import io.onedev.server.entitymanager.ProjectManager;
import io.onedev.server.git.GitUtils;
import io.onedev.server.model.Project;
@ -161,7 +161,7 @@ public class GitPreReceiveCallback extends HttpServlet {
if (errorMessages.isEmpty() && newObjectId.equals(ObjectId.zeroId())) {
try {
projectManager.onDeleteBranch(project, branchName);
} catch (OneException e) {
} catch (GeneralException e) {
errorMessages.addAll(Splitter.on("\n").splitToList(e.getMessage()));
}
}
@ -183,7 +183,7 @@ public class GitPreReceiveCallback extends HttpServlet {
if (errorMessages.isEmpty() && newObjectId.equals(ObjectId.zeroId())) {
try {
projectManager.onDeleteTag(project, tagName);
} catch (OneException e) {
} catch (GeneralException e) {
errorMessages.addAll(Splitter.on("\n").splitToList(e.getMessage()));
}
}

View File

@ -26,7 +26,7 @@ import com.google.common.base.Preconditions;
import io.onedev.commons.launcher.bootstrap.Bootstrap;
import io.onedev.commons.utils.FileUtils;
import io.onedev.commons.utils.StringUtils;
import io.onedev.server.OneException;
import io.onedev.server.GeneralException;
@Singleton
@SuppressWarnings("unused")
@ -1086,7 +1086,7 @@ public class DataMigrator {
Path target = projectsDir.toPath();
File linkDir = new File(Bootstrap.installDir, "site/projects");
if (linkDir.exists())
throw new OneException("Directory already exists: " + linkDir);
throw new GeneralException("Directory already exists: " + linkDir);
Files.createSymbolicLink(linkDir.toPath(), target);
}
} catch (IOException e) {

View File

@ -39,7 +39,7 @@ import edu.emory.mathcs.backport.java.util.Collections;
import io.onedev.commons.launcher.loader.ImplementationRegistry;
import io.onedev.commons.utils.ClassUtils;
import io.onedev.server.OneDev;
import io.onedev.server.OneException;
import io.onedev.server.GeneralException;
import io.onedev.server.util.BeanUtils;
import io.onedev.server.web.editable.annotation.Editable;
@ -81,7 +81,7 @@ public class VersionedYamlDoc extends MappingNode {
if (keyNode.getValue().equals("version"))
return ((ScalarNode)tuple.getValueNode()).getValue();
}
throw new OneException("Unable to find version");
throw new GeneralException("Unable to find version");
}
private void removeVersion() {

View File

@ -62,7 +62,7 @@ import io.onedev.commons.utils.FileUtils;
import io.onedev.commons.utils.LockUtils;
import io.onedev.commons.utils.StringUtils;
import io.onedev.server.OneDev;
import io.onedev.server.OneException;
import io.onedev.server.GeneralException;
import io.onedev.server.buildspec.BuildSpec;
import io.onedev.server.buildspec.job.Job;
import io.onedev.server.buildspec.job.VariableInterpolator;
@ -718,10 +718,10 @@ public class Build extends AbstractEntity implements Referenceable {
if (isOnBranches(secret.getAuthorizedBranches()))
return secret.getValue();
else
throw new OneException("Job secret not authorized: " + secretName);
throw new GeneralException("Job secret not authorized: " + secretName);
}
}
throw new OneException("No job secret found: " + secretName);
throw new GeneralException("No job secret found: " + secretName);
}
}

View File

@ -15,7 +15,7 @@ import javax.annotation.Nullable;
import com.google.common.collect.Lists;
import edu.emory.mathcs.backport.java.util.Collections;
import io.onedev.server.OneException;
import io.onedev.server.GeneralException;
import io.onedev.server.model.Issue;
import io.onedev.server.model.support.inputspec.choiceinput.choiceprovider.Choice;
import io.onedev.server.model.support.inputspec.choiceinput.choiceprovider.SpecifiedChoices;
@ -576,7 +576,7 @@ public class GlobalIssueSetting implements Serializable {
if (!getStateSpecs().isEmpty())
return getStateSpecs().iterator().next();
else
throw new OneException("No any issue state is defined");
throw new GeneralException("No any issue state is defined");
}
public List<BoardSpec> getBoardSpecs() {

View File

@ -6,7 +6,7 @@ import java.util.List;
import edu.emory.mathcs.backport.java.util.Collections;
import io.onedev.server.OneDev;
import io.onedev.server.OneException;
import io.onedev.server.GeneralException;
import io.onedev.server.buildspec.job.JobContext;
import io.onedev.server.buildspec.job.JobExecutorDiscoverer;
import io.onedev.server.web.editable.EditableUtils;
@ -46,7 +46,7 @@ public class AutoDiscoveredJobExecutor extends JobExecutor {
jobExecutor.setJobMatch(getJobMatch());
jobExecutor.execute(jobToken, context);
} else {
throw new OneException("No job executors discovered");
throw new GeneralException("No job executors discovered");
}
}

View File

@ -8,7 +8,7 @@ import org.hibernate.validator.constraints.NotEmpty;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import io.onedev.server.OneException;
import io.onedev.server.GeneralException;
import io.onedev.server.util.GroovyUtils;
import io.onedev.server.web.editable.annotation.Editable;
import io.onedev.server.web.editable.annotation.OmitName;
@ -54,7 +54,7 @@ public class ScriptingChoices extends ChoiceProvider {
choices.put(item, null);
return choices;
} else {
throw new OneException("Script should return either a Map or a List");
throw new GeneralException("Script should return either a Map or a List");
}
} catch (RuntimeException e) {
if (allPossible) {

View File

@ -8,7 +8,7 @@ import org.eclipse.jgit.revwalk.RevCommit;
import com.google.common.base.Preconditions;
import io.onedev.server.OneException;
import io.onedev.server.GeneralException;
import io.onedev.server.event.RefUpdated;
import io.onedev.server.git.command.RevListCommand;
import io.onedev.server.model.Project;
@ -33,7 +33,7 @@ public class AuthorCriteria extends CommitCriteria {
if (SecurityUtils.getUser() != null)
command.authors().add("<" + SecurityUtils.getUser().getEmail() + ">");
else
throw new OneException("Please login to perform this query");
throw new GeneralException("Please login to perform this query");
} else {
command.authors().add(StringUtils.replace(value, "*", ".*"));
}
@ -47,7 +47,7 @@ public class AuthorCriteria extends CommitCriteria {
for (String value: values) {
if (value == null) { // authored by me
if (User.get() == null)
throw new OneException("Please login to perform this query");
throw new GeneralException("Please login to perform this query");
else if (User.get().getEmail().equals(authorEmail))
return true;
} else {

View File

@ -20,7 +20,7 @@ import org.eclipse.jgit.lib.ObjectId;
import io.onedev.commons.codeassist.FenceAware;
import io.onedev.commons.utils.StringUtils;
import io.onedev.server.OneDev;
import io.onedev.server.OneException;
import io.onedev.server.GeneralException;
import io.onedev.server.entitymanager.BuildManager;
import io.onedev.server.event.RefUpdated;
import io.onedev.server.git.command.RevListCommand;
@ -99,11 +99,11 @@ public class CommitQuery implements Serializable {
if (NumberUtils.isDigits(numberStr)) {
Build build = OneDev.getInstance(BuildManager.class).find(project, Long.parseLong(numberStr));
if (build == null)
throw new OneException("Unable to find build: " + value);
throw new GeneralException("Unable to find build: " + value);
else
value = build.getCommitHash();
} else {
throw new OneException("Invalid build number: " + numberStr);
throw new GeneralException("Invalid build number: " + numberStr);
}
}
if (criteria.revisionCriteria().SINCE() != null)

View File

@ -8,7 +8,7 @@ import org.eclipse.jgit.revwalk.RevCommit;
import com.google.common.base.Preconditions;
import io.onedev.server.OneException;
import io.onedev.server.GeneralException;
import io.onedev.server.event.RefUpdated;
import io.onedev.server.git.command.RevListCommand;
import io.onedev.server.model.Project;
@ -33,7 +33,7 @@ public class CommitterCriteria extends CommitCriteria {
if (SecurityUtils.getUser() != null)
command.committers().add("<" + SecurityUtils.getUser().getEmail() + ">");
else
throw new OneException("Please login to perform this query");
throw new GeneralException("Please login to perform this query");
} else {
command.committers().add(StringUtils.replace(value, "*", ".*"));
}
@ -47,7 +47,7 @@ public class CommitterCriteria extends CommitCriteria {
for (String value: values) {
if (value == null) { // committed by me
if (User.get() == null)
throw new OneException("Please login to perform this query");
throw new GeneralException("Please login to perform this query");
else if (User.get().getEmail().equals(committerEmail))
return true;
} else {

View File

@ -14,7 +14,7 @@ import com.google.common.base.Splitter;
import io.onedev.commons.codeassist.FenceAware;
import io.onedev.commons.utils.StringUtils;
import io.onedev.server.OneDev;
import io.onedev.server.OneException;
import io.onedev.server.GeneralException;
import io.onedev.server.entitymanager.BuildManager;
import io.onedev.server.entitymanager.IssueManager;
import io.onedev.server.entitymanager.MilestoneManager;
@ -51,7 +51,7 @@ public abstract class EntityQuery<T extends AbstractEntity> implements Serializa
try {
return Integer.parseInt(value);
} catch (NumberFormatException e) {
throw new OneException("Invalid number: " + value);
throw new GeneralException("Invalid number: " + value);
}
}
@ -59,21 +59,21 @@ public abstract class EntityQuery<T extends AbstractEntity> implements Serializa
try {
return Long.parseLong(value);
} catch (NumberFormatException e) {
throw new OneException("Invalid number: " + value);
throw new GeneralException("Invalid number: " + value);
}
}
public static User getUser(String loginName) {
User user = OneDev.getInstance(UserManager.class).findByName(loginName);
if (user == null)
throw new OneException("Unable to find user with login: " + loginName);
throw new GeneralException("Unable to find user with login: " + loginName);
return user;
}
public static Project getProject(String projectName) {
Project project = OneDev.getInstance(ProjectManager.class).find(projectName);
if (project == null)
throw new OneException("Unable to find project with name: " + projectName);
throw new GeneralException("Unable to find project with name: " + projectName);
return project;
}
@ -83,13 +83,13 @@ public abstract class EntityQuery<T extends AbstractEntity> implements Serializa
else if (value.equals("false"))
return false;
else
throw new OneException("Invalid boolean: " + value);
throw new GeneralException("Invalid boolean: " + value);
}
public static Date getDateValue(String value) {
Date dateValue = DateUtils.parseRelaxed(value);
if (dateValue == null)
throw new OneException("Unrecognized date: " + value);
throw new GeneralException("Unrecognized date: " + value);
return dateValue;
}
@ -100,7 +100,7 @@ public abstract class EntityQuery<T extends AbstractEntity> implements Serializa
if (commitId != null && commitId.getCommitId() != null)
return commitId;
else
throw new OneException("Unable to find revision: " + value);
throw new GeneralException("Unable to find revision: " + value);
}
public static ProjectScopedRevision getRevision(@Nullable Project project, String value) {
@ -110,7 +110,7 @@ public abstract class EntityQuery<T extends AbstractEntity> implements Serializa
if (revision != null)
return revision;
else
throw new OneException("Unable to find revision: " + value);
throw new GeneralException("Unable to find revision: " + value);
}
public static Issue getIssue(@Nullable Project project, String value) {
@ -124,7 +124,7 @@ public abstract class EntityQuery<T extends AbstractEntity> implements Serializa
if (issue != null)
return issue;
else
throw new OneException("Unable to find issue: " + value);
throw new GeneralException("Unable to find issue: " + value);
}
public static PullRequest getPullRequest(@Nullable Project project, String value) {
@ -138,7 +138,7 @@ public abstract class EntityQuery<T extends AbstractEntity> implements Serializa
if (pullRequest != null)
return pullRequest;
else
throw new OneException("Unable to find pull request: " + value);
throw new GeneralException("Unable to find pull request: " + value);
}
public static Build getBuild(@Nullable Project project, String value) {
@ -152,7 +152,7 @@ public abstract class EntityQuery<T extends AbstractEntity> implements Serializa
if (build != null)
return build;
else
throw new OneException("Unable to find build: " + value);
throw new GeneralException("Unable to find build: " + value);
}
public static ProjectScopedNumber getProjectScopedNumber(@Nullable Project project, String value) {
@ -172,7 +172,7 @@ public abstract class EntityQuery<T extends AbstractEntity> implements Serializa
if (milestone != null)
return milestone;
else
throw new OneException("Unable to find milestone: " + value);
throw new GeneralException("Unable to find milestone: " + value);
}
public boolean matches(T entity) {

View File

@ -28,7 +28,7 @@ import org.antlr.v4.runtime.Recognizer;
import io.onedev.commons.codeassist.AntlrUtils;
import io.onedev.server.OneDev;
import io.onedev.server.OneException;
import io.onedev.server.GeneralException;
import io.onedev.server.entitymanager.BuildParamManager;
import io.onedev.server.model.Build;
import io.onedev.server.model.Project;
@ -111,30 +111,30 @@ public class BuildQuery extends EntityQuery<Build> {
return new TimedOutCriteria();
case BuildQueryLexer.Waiting:
if (!withUnfinishedCriteria)
throw new OneException("Criteria '" + ctx.operator.getText() + "' is not supported here");
throw new GeneralException("Criteria '" + ctx.operator.getText() + "' is not supported here");
return new WaitingCriteria();
case BuildQueryLexer.Pending:
if (!withUnfinishedCriteria)
throw new OneException("Criteria '" + ctx.operator.getText() + "' is not supported here");
throw new GeneralException("Criteria '" + ctx.operator.getText() + "' is not supported here");
return new PendingCriteria();
case BuildQueryLexer.Running:
if (!withUnfinishedCriteria)
throw new OneException("Criteria '" + ctx.operator.getText() + "' is not supported here");
throw new GeneralException("Criteria '" + ctx.operator.getText() + "' is not supported here");
return new RunningCriteria();
case BuildQueryLexer.SubmittedByMe:
if (!withCurrentUserCriteria)
throw new OneException("Criteria '" + ctx.operator.getText() + "' is not supported here");
throw new GeneralException("Criteria '" + ctx.operator.getText() + "' is not supported here");
return new SubmittedByMeCriteria();
case BuildQueryLexer.CancelledByMe:
if (!withCurrentUserCriteria)
throw new OneException("Criteria '" + ctx.operator.getText() + "' is not supported here");
throw new GeneralException("Criteria '" + ctx.operator.getText() + "' is not supported here");
return new CancelledByMeCriteria();
case BuildQueryLexer.AssociatedWithPullRequests:
return new AssociatedWithPullRequestsCriteria();
case BuildQueryLexer.RequiredByPullRequests:
return new RequiredByPullRequestsCriteria();
default:
throw new OneException("Unexpected operator: " + ctx.operator.getText());
throw new GeneralException("Unexpected operator: " + ctx.operator.getText());
}
}
@ -249,7 +249,7 @@ public class BuildQuery extends EntityQuery<Build> {
for (OrderContext order: queryContext.order()) {
String fieldName = getValue(order.Quoted().getText());
if (!ORDER_FIELDS.containsKey(fieldName))
throw new OneException("Can not order by field: " + fieldName);
throw new GeneralException("Can not order by field: " + fieldName);
EntitySort buildSort = new EntitySort();
buildSort.setField(fieldName);
@ -269,7 +269,7 @@ public class BuildQuery extends EntityQuery<Build> {
public static void checkField(Project project, String fieldName, int operator) {
Collection<String> paramNames = OneDev.getInstance(BuildParamManager.class).getBuildParamNames(null);
if (!QUERY_FIELDS.contains(fieldName) && !paramNames.contains(fieldName))
throw new OneException("Field not found: " + fieldName);
throw new GeneralException("Field not found: " + fieldName);
switch (operator) {
case BuildQueryLexer.IsBefore:
case BuildQueryLexer.IsAfter:
@ -298,8 +298,8 @@ public class BuildQuery extends EntityQuery<Build> {
}
}
private static OneException newOperatorException(String fieldName, int operator) {
return new OneException("Field '" + fieldName + "' is not applicable for operator '" + getRuleName(operator) + "'");
private static GeneralException newOperatorException(String fieldName, int operator) {
return new GeneralException("Field '" + fieldName + "' is not applicable for operator '" + getRuleName(operator) + "'");
}
public static String getRuleName(int rule) {

View File

@ -5,7 +5,7 @@ import javax.persistence.criteria.Path;
import javax.persistence.criteria.Predicate;
import javax.persistence.criteria.Root;
import io.onedev.server.OneException;
import io.onedev.server.GeneralException;
import io.onedev.server.model.Build;
import io.onedev.server.model.User;
import io.onedev.server.search.entity.EntityCriteria;
@ -20,7 +20,7 @@ public class CancelledByMeCriteria extends EntityCriteria<Build> {
Path<User> attribute = root.get(Build.PROP_CANCELLER);
return builder.equal(attribute, User.get());
} else {
throw new OneException("Please login to perform this query");
throw new GeneralException("Please login to perform this query");
}
}
@ -29,7 +29,7 @@ public class CancelledByMeCriteria extends EntityCriteria<Build> {
if (User.get() != null)
return User.get().equals(build.getCanceller());
else
throw new OneException("Please login to perform this query");
throw new GeneralException("Please login to perform this query");
}
@Override

View File

@ -5,7 +5,7 @@ import javax.persistence.criteria.Path;
import javax.persistence.criteria.Predicate;
import javax.persistence.criteria.Root;
import io.onedev.server.OneException;
import io.onedev.server.GeneralException;
import io.onedev.server.model.Build;
import io.onedev.server.model.User;
import io.onedev.server.search.entity.EntityCriteria;
@ -20,7 +20,7 @@ public class SubmittedByMeCriteria extends EntityCriteria<Build> {
Path<User> attribute = root.get(Build.PROP_SUBMITTER);
return builder.equal(attribute, User.get());
} else {
throw new OneException("Please login to perform this query");
throw new GeneralException("Please login to perform this query");
}
}
@ -29,7 +29,7 @@ public class SubmittedByMeCriteria extends EntityCriteria<Build> {
if (User.get() != null)
return User.get().equals(build.getSubmitter());
else
throw new OneException("Please login to perform this query");
throw new GeneralException("Please login to perform this query");
}
@Override

View File

@ -24,7 +24,7 @@ import org.antlr.v4.runtime.RecognitionException;
import org.antlr.v4.runtime.Recognizer;
import io.onedev.commons.codeassist.AntlrUtils;
import io.onedev.server.OneException;
import io.onedev.server.GeneralException;
import io.onedev.server.model.CodeComment;
import io.onedev.server.model.Project;
import io.onedev.server.search.entity.AndEntityCriteria;
@ -188,7 +188,7 @@ public class CodeCommentQuery extends EntityQuery<CodeComment> {
for (OrderContext order: queryContext.order()) {
String fieldName = getValue(order.Quoted().getText());
if (!ORDER_FIELDS.containsKey(fieldName))
throw new OneException("Can not order by field: " + fieldName);
throw new GeneralException("Can not order by field: " + fieldName);
EntitySort commentSort = new EntitySort();
commentSort.setField(fieldName);
@ -207,7 +207,7 @@ public class CodeCommentQuery extends EntityQuery<CodeComment> {
public static void checkField(Project project, String fieldName, int operator) {
if (!QUERY_FIELDS.contains(fieldName))
throw new OneException("Field not found: " + fieldName);
throw new GeneralException("Field not found: " + fieldName);
switch (operator) {
case CodeCommentQueryLexer.IsBefore:
case CodeCommentQueryLexer.IsAfter:
@ -230,8 +230,8 @@ public class CodeCommentQuery extends EntityQuery<CodeComment> {
}
}
private static OneException newOperatorException(String fieldName, int operator) {
return new OneException("Field '" + fieldName + "' is not applicable for operator '" + getRuleName(operator) + "'");
private static GeneralException newOperatorException(String fieldName, int operator) {
return new GeneralException("Field '" + fieldName + "' is not applicable for operator '" + getRuleName(operator) + "'");
}
public static String getRuleName(int rule) {

View File

@ -5,7 +5,7 @@ import javax.persistence.criteria.Path;
import javax.persistence.criteria.Predicate;
import javax.persistence.criteria.Root;
import io.onedev.server.OneException;
import io.onedev.server.GeneralException;
import io.onedev.server.model.CodeComment;
import io.onedev.server.model.User;
import io.onedev.server.search.entity.EntityCriteria;
@ -20,7 +20,7 @@ public class CreatedByMeCriteria extends EntityCriteria<CodeComment> {
Path<?> attribute = root.get(CodeComment.PROP_USER);
return builder.equal(attribute, User.get());
} else {
throw new OneException("Please login to perform this query");
throw new GeneralException("Please login to perform this query");
}
}
@ -29,7 +29,7 @@ public class CreatedByMeCriteria extends EntityCriteria<CodeComment> {
if (User.get() != null)
return User.get().equals(comment.getUser());
else
throw new OneException("Please login to perform this query");
throw new GeneralException("Please login to perform this query");
}
@Override

View File

@ -12,7 +12,7 @@ import javax.persistence.criteria.Join;
import javax.persistence.criteria.Path;
import javax.persistence.criteria.Predicate;
import io.onedev.server.OneException;
import io.onedev.server.GeneralException;
import io.onedev.server.model.Build;
import io.onedev.server.model.Issue;
import io.onedev.server.model.IssueField;
@ -49,7 +49,7 @@ public class FieldOperatorCriteria extends FieldCriteria {
if (User.get() != null)
return builder.equal(valueAttribute, User.get().getName());
else
throw new OneException("Please login to perform this query");
throw new GeneralException("Please login to perform this query");
} else if (operator == IssueQueryLexer.IsCurrent) {
if (getFieldSpec() instanceof BuildChoiceField) {
Build build = Build.get();
@ -58,7 +58,7 @@ public class FieldOperatorCriteria extends FieldCriteria {
builder.equal(projectAttribute, build.getProject()),
builder.equal(valueAttribute, String.valueOf(build.getNumber())));
} else {
throw new OneException("No current build in query context");
throw new GeneralException("No current build in query context");
}
} else if (getFieldSpec() instanceof PullRequestChoiceField) {
PullRequest request = PullRequest.get();
@ -67,7 +67,7 @@ public class FieldOperatorCriteria extends FieldCriteria {
builder.equal(projectAttribute, request.getTargetProject()),
builder.equal(valueAttribute, String.valueOf(request.getNumber())));
} else {
throw new OneException("No current pull request in query context");
throw new GeneralException("No current pull request in query context");
}
} else if (getFieldSpec() instanceof CommitField) {
ProjectScopedCommit commit = ProjectScopedCommit.get();
@ -76,7 +76,7 @@ public class FieldOperatorCriteria extends FieldCriteria {
builder.equal(projectAttribute, commit.getProject()),
builder.equal(valueAttribute, commit.getCommitId().name()));
} else {
throw new OneException("No current commit in query context");
throw new GeneralException("No current commit in query context");
}
} else {
throw new IllegalStateException();
@ -94,7 +94,7 @@ public class FieldOperatorCriteria extends FieldCriteria {
return builder.equal(projectAttribute, build.getProject());
}
} else {
throw new OneException("No current build in query context");
throw new GeneralException("No current build in query context");
}
} else {
throw new IllegalStateException();
@ -113,26 +113,26 @@ public class FieldOperatorCriteria extends FieldCriteria {
if (User.get() != null)
return Objects.equals(fieldValue, User.get().getName());
else
throw new OneException("Please login to perform this query");
throw new GeneralException("Please login to perform this query");
} else if (operator == IssueQueryLexer.IsCurrent) {
if (getFieldSpec() instanceof BuildChoiceField) {
Build build = Build.get();
if (build != null)
return build.getProject().equals(issue.getProject()) && build.getId().toString().equals(fieldValue);
else
throw new OneException("No build in query context");
throw new GeneralException("No build in query context");
} else if (getFieldSpec() instanceof PullRequestChoiceField) {
PullRequest request = PullRequest.get();
if (request != null)
return request.getTargetProject().equals(issue.getProject()) && request.getId().toString().equals(fieldValue);
else
throw new OneException("No pull request in query context");
throw new GeneralException("No pull request in query context");
} else if (getFieldSpec() instanceof CommitField) {
ProjectScopedCommit commit = ProjectScopedCommit.get();
if (commit != null)
return commit.getProject().equals(issue.getProject()) && commit.getCommitId().name().equals(fieldValue);
else
throw new OneException("No commit in query context");
throw new GeneralException("No commit in query context");
} else {
throw new IllegalStateException();
}
@ -145,7 +145,7 @@ public class FieldOperatorCriteria extends FieldCriteria {
.stream()
.anyMatch(it->it.equals(fieldValue));
} else {
throw new OneException("No build in query context");
throw new GeneralException("No build in query context");
}
} else {
throw new IllegalStateException();

View File

@ -19,7 +19,7 @@ import org.eclipse.jgit.revwalk.RevCommit;
import org.eclipse.jgit.revwalk.RevWalk;
import io.onedev.server.OneDev;
import io.onedev.server.OneException;
import io.onedev.server.GeneralException;
import io.onedev.server.entitymanager.IssueManager;
import io.onedev.server.git.GitUtils;
import io.onedev.server.model.Build;
@ -61,7 +61,7 @@ public class FixedBetweenCriteria extends IssueCriteria {
if (first.getProject().equals(second.getProject())) {
this.project = first.getProject();
} else {
throw new OneException("'" + getRuleName(IssueQueryLexer.FixedBetween)
throw new GeneralException("'" + getRuleName(IssueQueryLexer.FixedBetween)
+ "' should be used for same projects");
}
}

View File

@ -4,7 +4,7 @@ import javax.persistence.criteria.CriteriaBuilder;
import javax.persistence.criteria.Predicate;
import javax.persistence.criteria.Root;
import io.onedev.server.OneException;
import io.onedev.server.GeneralException;
import io.onedev.server.model.Build;
import io.onedev.server.model.Issue;
@ -17,7 +17,7 @@ public class FixedInCurrentBuildCriteria extends IssueCriteria {
if (Build.get() != null)
return new FixedInBuildCriteria(Build.get()).getPredicate(root, builder);
else
throw new OneException("No build in query context");
throw new GeneralException("No build in query context");
}
@Override
@ -25,7 +25,7 @@ public class FixedInCurrentBuildCriteria extends IssueCriteria {
if (Build.get() != null)
return new FixedInBuildCriteria(Build.get()).matches(issue);
else
throw new OneException("No build in query context");
throw new GeneralException("No build in query context");
}
@Override

View File

@ -4,7 +4,7 @@ import javax.persistence.criteria.CriteriaBuilder;
import javax.persistence.criteria.Predicate;
import javax.persistence.criteria.Root;
import io.onedev.server.OneException;
import io.onedev.server.GeneralException;
import io.onedev.server.model.Issue;
import io.onedev.server.util.ProjectScopedCommit;
@ -17,7 +17,7 @@ public class FixedInCurrentCommitCriteria extends IssueCriteria {
if (ProjectScopedCommit.get() != null)
return new FixedInCommitCriteria(ProjectScopedCommit.get()).getPredicate(root, builder);
else
throw new OneException("No commit id in query context");
throw new GeneralException("No commit id in query context");
}
@Override
@ -25,7 +25,7 @@ public class FixedInCurrentCommitCriteria extends IssueCriteria {
if (ProjectScopedCommit.get() != null)
return new FixedInCommitCriteria(ProjectScopedCommit.get()).matches(issue);
else
throw new OneException("No commit in query context");
throw new GeneralException("No commit in query context");
}
@Override

View File

@ -4,7 +4,7 @@ import javax.persistence.criteria.CriteriaBuilder;
import javax.persistence.criteria.Predicate;
import javax.persistence.criteria.Root;
import io.onedev.server.OneException;
import io.onedev.server.GeneralException;
import io.onedev.server.model.Issue;
import io.onedev.server.model.PullRequest;
@ -17,7 +17,7 @@ public class FixedInCurrentPullRequestCriteria extends IssueCriteria {
if (PullRequest.get() != null)
return new FixedInPullRequestCriteria(PullRequest.get()).getPredicate(root, builder);
else
throw new OneException("No pull request in query context");
throw new GeneralException("No pull request in query context");
}
@Override
@ -25,7 +25,7 @@ public class FixedInCurrentPullRequestCriteria extends IssueCriteria {
if (PullRequest.get() != null)
return new FixedInPullRequestCriteria(PullRequest.get()).matches(issue);
else
throw new OneException("No pull request in query context");
throw new GeneralException("No pull request in query context");
}
@Override

View File

@ -19,7 +19,7 @@ import org.antlr.v4.runtime.Recognizer;
import io.onedev.commons.codeassist.AntlrUtils;
import io.onedev.server.OneDev;
import io.onedev.server.OneException;
import io.onedev.server.GeneralException;
import io.onedev.server.entitymanager.SettingManager;
import io.onedev.server.model.Issue;
import io.onedev.server.model.Project;
@ -126,22 +126,22 @@ public class IssueQuery extends EntityQuery<Issue> {
switch (ctx.operator.getType()) {
case IssueQueryLexer.SubmittedByMe:
if (!withCurrentUserCriteria)
throw new OneException("Criteria '" + ctx.operator.getText() + "' is not supported here");
throw new GeneralException("Criteria '" + ctx.operator.getText() + "' is not supported here");
return new SubmittedByMeCriteria();
case IssueQueryLexer.FixedInCurrentBuild:
if (!withCurrentBuildCriteria)
throw new OneException("Criteria '" + ctx.operator.getText() + "' is not supported here");
throw new GeneralException("Criteria '" + ctx.operator.getText() + "' is not supported here");
return new FixedInCurrentBuildCriteria();
case IssueQueryLexer.FixedInCurrentPullRequest:
if (!withCurrentPullRequestCriteria)
throw new OneException("Criteria '" + ctx.operator.getText() + "' is not supported here");
throw new GeneralException("Criteria '" + ctx.operator.getText() + "' is not supported here");
return new FixedInCurrentPullRequestCriteria();
case IssueQueryLexer.FixedInCurrentCommit:
if (!withCurrentCommitCriteria)
throw new OneException("Criteria '" + ctx.operator.getText() + "' is not supported here");
throw new GeneralException("Criteria '" + ctx.operator.getText() + "' is not supported here");
return new FixedInCurrentCommitCriteria();
default:
throw new OneException("Unexpected operator: " + ctx.operator.getText());
throw new GeneralException("Unexpected operator: " + ctx.operator.getText());
}
}
@ -282,7 +282,7 @@ public class IssueQuery extends EntityQuery<Issue> {
}
}
default:
throw new OneException("Unexpected operator " + getRuleName(operator));
throw new GeneralException("Unexpected operator " + getRuleName(operator));
}
}
@ -319,7 +319,7 @@ public class IssueQuery extends EntityQuery<Issue> {
FieldSpec fieldSpec = getGlobalIssueSetting().getFieldSpec(fieldName);
if (validate && !(fieldSpec instanceof ChoiceField) && !(fieldSpec instanceof DateField)
&& !(fieldSpec instanceof NumberField)) {
throw new OneException("Can not order by field: " + fieldName);
throw new GeneralException("Can not order by field: " + fieldName);
}
}
@ -345,8 +345,8 @@ public class IssueQuery extends EntityQuery<Issue> {
return OneDev.getInstance(SettingManager.class).getIssueSetting();
}
private static OneException newOperatorException(String fieldName, int operator) {
return new OneException("Field '" + fieldName + "' is not applicable for operator '" + getRuleName(operator) + "'");
private static GeneralException newOperatorException(String fieldName, int operator) {
return new GeneralException("Field '" + fieldName + "' is not applicable for operator '" + getRuleName(operator) + "'");
}
public static void checkField(String fieldName, int operator,
@ -354,7 +354,7 @@ public class IssueQuery extends EntityQuery<Issue> {
boolean withCurrentPullRequestCriteria, boolean withCurrentCommitCriteria) {
FieldSpec fieldSpec = getGlobalIssueSetting().getFieldSpec(fieldName);
if (fieldSpec == null && !Issue.QUERY_FIELDS.contains(fieldName))
throw new OneException("Field not found: " + fieldName);
throw new GeneralException("Field not found: " + fieldName);
switch (operator) {
case IssueQueryLexer.IsEmpty:
if (Issue.QUERY_FIELDS.contains(fieldName)

View File

@ -5,7 +5,7 @@ import javax.persistence.criteria.Path;
import javax.persistence.criteria.Predicate;
import javax.persistence.criteria.Root;
import io.onedev.server.OneException;
import io.onedev.server.GeneralException;
import io.onedev.server.model.Issue;
import io.onedev.server.model.User;
@ -19,7 +19,7 @@ public class SubmittedByMeCriteria extends IssueCriteria {
Path<User> attribute = root.get(Issue.PROP_SUBMITTER);
return builder.equal(attribute, User.get());
} else {
throw new OneException("Please login to perform this query");
throw new GeneralException("Please login to perform this query");
}
}
@ -28,7 +28,7 @@ public class SubmittedByMeCriteria extends IssueCriteria {
if (User.get() != null)
return User.get().equals(issue.getSubmitter());
else
throw new OneException("Please login to perform this query");
throw new GeneralException("Please login to perform this query");
}
@Override

View File

@ -4,7 +4,7 @@ import javax.persistence.criteria.CriteriaBuilder;
import javax.persistence.criteria.Predicate;
import javax.persistence.criteria.Root;
import io.onedev.server.OneException;
import io.onedev.server.GeneralException;
import io.onedev.server.model.Project;
import io.onedev.server.model.User;
import io.onedev.server.search.entity.EntityCriteria;
@ -18,7 +18,7 @@ public class OwnedByMeCriteria extends EntityCriteria<Project> {
if (User.get() != null)
return new OwnedByCriteria(User.get()).getPredicate(root, builder);
else
throw new OneException("Please login to perform this query");
throw new GeneralException("Please login to perform this query");
}
@Override
@ -26,7 +26,7 @@ public class OwnedByMeCriteria extends EntityCriteria<Project> {
if (User.get() != null)
return new OwnedByCriteria(User.get()).matches(project);
else
throw new OneException("Please login to perform this query");
throw new GeneralException("Please login to perform this query");
}
@Override

View File

@ -14,7 +14,7 @@ import org.antlr.v4.runtime.RecognitionException;
import org.antlr.v4.runtime.Recognizer;
import io.onedev.commons.codeassist.AntlrUtils;
import io.onedev.server.OneException;
import io.onedev.server.GeneralException;
import io.onedev.server.model.Project;
import io.onedev.server.search.entity.AndEntityCriteria;
import io.onedev.server.search.entity.EntityCriteria;
@ -125,7 +125,7 @@ public class ProjectQuery extends EntityQuery<Project> {
case ProjectQueryLexer.IsAfter:
return new UpdateDateCriteria(value, operator);
default:
throw new OneException("Unexpected operator " + getRuleName(operator));
throw new GeneralException("Unexpected operator " + getRuleName(operator));
}
}
@ -159,7 +159,7 @@ public class ProjectQuery extends EntityQuery<Project> {
for (OrderContext order: queryContext.order()) {
String fieldName = getValue(order.Quoted().getText());
if (!Project.ORDER_FIELDS.containsKey(fieldName))
throw new OneException("Can not order by field: " + fieldName);
throw new GeneralException("Can not order by field: " + fieldName);
EntitySort projectSort = new EntitySort();
projectSort.setField(fieldName);
@ -176,13 +176,13 @@ public class ProjectQuery extends EntityQuery<Project> {
}
}
private static OneException newOperatorException(String fieldName, int operator) {
return new OneException("Field '" + fieldName + "' is not applicable for operator '" + getRuleName(operator) + "'");
private static GeneralException newOperatorException(String fieldName, int operator) {
return new GeneralException("Field '" + fieldName + "' is not applicable for operator '" + getRuleName(operator) + "'");
}
public static void checkField(String fieldName, int operator) {
if (!Project.QUERY_FIELDS.contains(fieldName))
throw new OneException("Field not found: " + fieldName);
throw new GeneralException("Field not found: " + fieldName);
switch (operator) {
case ProjectQueryLexer.Contains:
if (!fieldName.equals(Project.NAME_DESCRIPTION))

View File

@ -7,7 +7,7 @@ import javax.persistence.criteria.Path;
import javax.persistence.criteria.Predicate;
import javax.persistence.criteria.Root;
import io.onedev.server.OneException;
import io.onedev.server.GeneralException;
import io.onedev.server.model.PullRequest;
import io.onedev.server.model.PullRequestReview;
import io.onedev.server.model.User;
@ -30,7 +30,7 @@ public class ApprovedByMeCriteria extends EntityCriteria<PullRequest> {
builder.equal(approvedPath, true)));
return join.isNotNull();
} else {
throw new OneException("Please login to perform this query");
throw new GeneralException("Please login to perform this query");
}
}
@ -40,7 +40,7 @@ public class ApprovedByMeCriteria extends EntityCriteria<PullRequest> {
PullRequestReview review = request.getReview(User.get());
return review != null && review.getResult() != null && review.getResult().isApproved();
} else {
throw new OneException("Please login to perform this query");
throw new GeneralException("Please login to perform this query");
}
}

View File

@ -7,7 +7,7 @@ import javax.persistence.criteria.Path;
import javax.persistence.criteria.Predicate;
import javax.persistence.criteria.Root;
import io.onedev.server.OneException;
import io.onedev.server.GeneralException;
import io.onedev.server.model.PullRequest;
import io.onedev.server.model.PullRequestAssignment;
import io.onedev.server.model.User;
@ -26,7 +26,7 @@ public class AssignedToMeCriteria extends EntityCriteria<PullRequest> {
join.on(builder.equal(userPath, User.get()));
return join.isNotNull();
} else {
throw new OneException("Please login to perform this query");
throw new GeneralException("Please login to perform this query");
}
}
@ -36,7 +36,7 @@ public class AssignedToMeCriteria extends EntityCriteria<PullRequest> {
if (user != null)
return request.getAssignments().stream().anyMatch(it->it.getUser().equals(user));
else
throw new OneException("Please login to perform this query");
throw new GeneralException("Please login to perform this query");
}
@Override

View File

@ -5,7 +5,7 @@ import javax.persistence.criteria.Path;
import javax.persistence.criteria.Predicate;
import javax.persistence.criteria.Root;
import io.onedev.server.OneException;
import io.onedev.server.GeneralException;
import io.onedev.server.model.PullRequest;
import io.onedev.server.model.User;
import io.onedev.server.model.support.pullrequest.CloseInfo;
@ -21,7 +21,7 @@ public class DiscardedByMeCriteria extends EntityCriteria<PullRequest> {
Path<User> attribute = PullRequestQuery.getPath(root, PullRequest.PROP_CLOSE_INFO + "." + CloseInfo.PROP_USER);
return builder.equal(attribute, User.get());
} else {
throw new OneException("Please login to perform this query");
throw new GeneralException("Please login to perform this query");
}
}
@ -30,7 +30,7 @@ public class DiscardedByMeCriteria extends EntityCriteria<PullRequest> {
if (User.get() != null)
return User.get().equals(request.getSubmitter());
else
throw new OneException("Please login to perform this query");
throw new GeneralException("Please login to perform this query");
}
@Override

View File

@ -14,7 +14,7 @@ import org.antlr.v4.runtime.RecognitionException;
import org.antlr.v4.runtime.Recognizer;
import io.onedev.commons.codeassist.AntlrUtils;
import io.onedev.server.OneException;
import io.onedev.server.GeneralException;
import io.onedev.server.model.Project;
import io.onedev.server.model.PullRequest;
import io.onedev.server.model.support.pullrequest.MergeStrategy;
@ -113,7 +113,7 @@ public class PullRequestQuery extends EntityQuery<PullRequest> {
case PullRequestQueryLexer.HasPendingReviews:
return new HasPendingReviewsCriteria();
default:
throw new OneException("Unexpected operator: " + ctx.operator.getText());
throw new GeneralException("Unexpected operator: " + ctx.operator.getText());
}
}
@ -138,7 +138,7 @@ public class PullRequestQuery extends EntityQuery<PullRequest> {
case PullRequestQueryLexer.IncludesIssue:
return new IncludesIssueCriteria(project, value);
default:
throw new OneException("Unexpected operator: " + ctx.operator.getText());
throw new GeneralException("Unexpected operator: " + ctx.operator.getText());
}
}
@ -242,7 +242,7 @@ public class PullRequestQuery extends EntityQuery<PullRequest> {
for (OrderContext order: queryContext.order()) {
String fieldName = getValue(order.Quoted().getText());
if (!PullRequest.ORDER_FIELDS.containsKey(fieldName))
throw new OneException("Can not order by field: " + fieldName);
throw new GeneralException("Can not order by field: " + fieldName);
EntitySort requestSort = new EntitySort();
requestSort.setField(fieldName);
@ -261,7 +261,7 @@ public class PullRequestQuery extends EntityQuery<PullRequest> {
public static void checkField(String fieldName, int operator) {
if (!PullRequest.QUERY_FIELDS.contains(fieldName))
throw new OneException("Field not found: " + fieldName);
throw new GeneralException("Field not found: " + fieldName);
switch (operator) {
case PullRequestQueryLexer.IsBefore:
case PullRequestQueryLexer.IsAfter:
@ -299,8 +299,8 @@ public class PullRequestQuery extends EntityQuery<PullRequest> {
}
}
private static OneException newOperatorException(String fieldName, int operator) {
return new OneException("Field '" + fieldName + "' is not applicable for operator '" + getRuleName(operator) + "'");
private static GeneralException newOperatorException(String fieldName, int operator) {
return new GeneralException("Field '" + fieldName + "' is not applicable for operator '" + getRuleName(operator) + "'");
}
public static String getRuleName(int rule) {

View File

@ -7,7 +7,7 @@ import javax.persistence.criteria.Path;
import javax.persistence.criteria.Predicate;
import javax.persistence.criteria.Root;
import io.onedev.server.OneException;
import io.onedev.server.GeneralException;
import io.onedev.server.model.PullRequest;
import io.onedev.server.model.PullRequestReview;
import io.onedev.server.model.User;
@ -30,7 +30,7 @@ public class RequestedForChangesByMeCriteria extends EntityCriteria<PullRequest>
builder.equal(approvedPath, false)));
return join.isNotNull();
} else {
throw new OneException("Please login to perform this query");
throw new GeneralException("Please login to perform this query");
}
}
@ -40,7 +40,7 @@ public class RequestedForChangesByMeCriteria extends EntityCriteria<PullRequest>
PullRequestReview review = request.getReview(User.get());
return review != null && review.getResult() != null && !review.getResult().isApproved();
} else {
throw new OneException("Please login to perform this query");
throw new GeneralException("Please login to perform this query");
}
}

View File

@ -5,7 +5,7 @@ import javax.persistence.criteria.Path;
import javax.persistence.criteria.Predicate;
import javax.persistence.criteria.Root;
import io.onedev.server.OneException;
import io.onedev.server.GeneralException;
import io.onedev.server.model.PullRequest;
import io.onedev.server.model.User;
import io.onedev.server.search.entity.EntityCriteria;
@ -20,7 +20,7 @@ public class SubmittedByMeCriteria extends EntityCriteria<PullRequest> {
Path<?> attribute = root.get(PullRequest.PROP_SUBMITTER);
return builder.equal(attribute, User.get());
} else {
throw new OneException("Please login to perform this query");
throw new GeneralException("Please login to perform this query");
}
}
@ -29,7 +29,7 @@ public class SubmittedByMeCriteria extends EntityCriteria<PullRequest> {
if (User.get() != null)
return User.get().equals(request.getSubmitter());
else
throw new OneException("Please login to perform this query");
throw new GeneralException("Please login to perform this query");
}
@Override

View File

@ -7,7 +7,7 @@ import javax.persistence.criteria.Path;
import javax.persistence.criteria.Predicate;
import javax.persistence.criteria.Root;
import io.onedev.server.OneException;
import io.onedev.server.GeneralException;
import io.onedev.server.model.PullRequest;
import io.onedev.server.model.PullRequestReview;
import io.onedev.server.model.User;
@ -30,7 +30,7 @@ public class ToBeReviewedByMeCriteria extends EntityCriteria<PullRequest> {
builder.isNull(approvedPath)));
return join.isNotNull();
} else {
throw new OneException("Please login to perform this query");
throw new GeneralException("Please login to perform this query");
}
}
@ -40,7 +40,7 @@ public class ToBeReviewedByMeCriteria extends EntityCriteria<PullRequest> {
PullRequestReview review = request.getReview(User.get());
return review != null && review.getResult() == null;
} else {
throw new OneException("Please login to perform this query");
throw new GeneralException("Please login to perform this query");
}
}

View File

@ -9,10 +9,10 @@ import org.apache.shiro.web.filter.mgt.FilterChainManager;
import org.apache.shiro.web.filter.mgt.PathMatchingFilterChainResolver;
@Singleton
public class OneFilterChainResolver extends PathMatchingFilterChainResolver {
public class DefaultFilterChainResolver extends PathMatchingFilterChainResolver {
@Inject
public OneFilterChainResolver(
public DefaultFilterChainResolver(
Set<FilterChainConfigurator> filterChainConfigurators,
BasicAuthenticationFilter basicAuthenticationFilter,
BearerAuthenticationFilter bearerAuthenticationFilter) {

View File

@ -10,7 +10,7 @@ import io.onedev.commons.utils.StringUtils;
import io.onedev.server.model.User;
@Singleton
public class OnePasswordService implements PasswordService {
public class DefaultPasswordService implements PasswordService {
private static final Pattern BCRYPT_PATTERN = Pattern.compile("\\A\\$2a?\\$\\d\\d\\$[./0-9A-Za-z]{53}");

View File

@ -18,7 +18,7 @@ import io.onedev.server.entitymanager.SettingManager;
import io.onedev.server.entitymanager.UserManager;
@Singleton
public class OneRememberMeManager extends CookieRememberMeManager {
public class DefaultRememberMeManager extends CookieRememberMeManager {
private final UserManager userManager;
@ -27,7 +27,7 @@ public class OneRememberMeManager extends CookieRememberMeManager {
private volatile KeyPair keyPair;
@Inject
public OneRememberMeManager(UserManager userManager, Provider<SettingManager> settingManagerProvider) {
public DefaultRememberMeManager(UserManager userManager, Provider<SettingManager> settingManagerProvider) {
this.userManager = userManager;
this.settingManagerProvider = settingManagerProvider;
}

View File

@ -3,13 +3,12 @@ package io.onedev.server.security;
import org.apache.shiro.ShiroException;
import org.apache.shiro.util.Destroyable;
import org.apache.shiro.util.Initializable;
import org.apache.shiro.web.env.DefaultWebEnvironment;
import org.apache.shiro.web.filter.mgt.FilterChainResolver;
import org.apache.shiro.web.mgt.WebSecurityManager;
import io.onedev.server.OneDev;
public class OneWebEnvironment extends DefaultWebEnvironment implements Initializable, Destroyable {
public class DefaultWebEnvironment extends org.apache.shiro.web.env.DefaultWebEnvironment implements Initializable, Destroyable {
@Override
public void init() throws ShiroException {

View File

@ -24,10 +24,10 @@ import org.apache.shiro.web.subject.WebSubjectContext;
import org.apache.shiro.web.subject.support.WebDelegatingSubject;
@Singleton
public class OneWebSecurityManager extends org.apache.shiro.web.mgt.DefaultWebSecurityManager {
public class DefaultWebSecurityManager extends org.apache.shiro.web.mgt.DefaultWebSecurityManager {
@Inject
public OneWebSecurityManager(Set<Realm> realms, RememberMeManager rememberMeManager) {
public DefaultWebSecurityManager(Set<Realm> realms, RememberMeManager rememberMeManager) {
setSubjectFactory(new DefaultWebSubjectFactory() {
@Override

View File

@ -14,7 +14,7 @@ import groovy.lang.GroovyClassLoader;
import groovy.lang.Script;
import io.onedev.commons.utils.StringUtils;
import io.onedev.server.OneDev;
import io.onedev.server.OneException;
import io.onedev.server.GeneralException;
import io.onedev.server.entitymanager.SettingManager;
import io.onedev.server.model.support.administration.GroovyScript;
import io.onedev.server.util.script.ScriptContribution;
@ -89,13 +89,13 @@ public class GroovyUtils {
try {
return evalScript(StringUtils.join(script.getContent(), "\n"), variables);
} catch (Exception e) {
throw new OneException("Error evaluating groovy script: " + scriptName, e);
throw new GeneralException("Error evaluating groovy script: " + scriptName, e);
}
} else {
throw new OneException("Unauthorized groovy script: " + scriptName);
throw new GeneralException("Unauthorized groovy script: " + scriptName);
}
} else {
throw new OneException("Groovy script not found: " + scriptName);
throw new GeneralException("Groovy script not found: " + scriptName);
}
}

View File

@ -5,7 +5,7 @@ import org.apache.commons.lang3.builder.HashCodeBuilder;
import io.onedev.commons.utils.StringUtils;
import io.onedev.server.OneDev;
import io.onedev.server.OneException;
import io.onedev.server.GeneralException;
import io.onedev.server.entitymanager.ProjectManager;
import io.onedev.server.model.Project;
@ -30,14 +30,14 @@ public class ProjectScopedNumber {
try {
return new ProjectScopedNumber(project, Long.valueOf(numberStr));
} catch (NumberFormatException e) {
throw new OneException("Invalid number: " + numberStr);
throw new GeneralException("Invalid number: " + numberStr);
}
} else {
throw new OneException("Unable to find project: " + projectName);
throw new GeneralException("Unable to find project: " + projectName);
}
}
}
throw new OneException("Project is not specified");
throw new GeneralException("Project is not specified");
}
public Project getProject() {

View File

@ -1,8 +1,8 @@
package io.onedev.server.util;
import io.onedev.server.OneException;
import io.onedev.server.GeneralException;
public class ScriptException extends OneException {
public class ScriptException extends GeneralException {
private static final long serialVersionUID = 1L;

View File

@ -14,7 +14,7 @@ import org.antlr.v4.runtime.Recognizer;
import io.onedev.commons.codeassist.AntlrUtils;
import io.onedev.commons.codeassist.FenceAware;
import io.onedev.commons.utils.StringUtils;
import io.onedev.server.OneException;
import io.onedev.server.GeneralException;
import io.onedev.server.model.Build;
import io.onedev.server.util.criteria.AndCriteria;
import io.onedev.server.util.criteria.Criteria;
@ -130,12 +130,12 @@ public class JobMatch extends Criteria<Build> {
if (operator != JobMatchLexer.Is)
throw newOperatorException(fieldName, operator);
} else {
throw new OneException("Invalid field: " + fieldName);
throw new GeneralException("Invalid field: " + fieldName);
}
}
private static OneException newOperatorException(String fieldName, int operator) {
return new OneException("Field '" + fieldName + "' is not applicable for operator '"
private static GeneralException newOperatorException(String fieldName, int operator) {
return new GeneralException("Field '" + fieldName + "' is not applicable for operator '"
+ AntlrUtils.getLexerRuleName(JobMatchLexer.ruleNames, operator) + "'");
}

View File

@ -19,7 +19,7 @@ import org.antlr.v4.runtime.tree.TerminalNode;
import io.onedev.commons.codeassist.FenceAware;
import io.onedev.commons.utils.StringUtils;
import io.onedev.server.OneDev;
import io.onedev.server.OneException;
import io.onedev.server.GeneralException;
import io.onedev.server.entitymanager.GroupManager;
import io.onedev.server.entitymanager.UserManager;
import io.onedev.server.model.Group;
@ -71,9 +71,9 @@ public class ReviewRequirement {
if (!users.contains(user))
users.add(user);
else if (validate)
throw new OneException("User '" + userName + "' is included multiple times");
throw new GeneralException("User '" + userName + "' is included multiple times");
} else if (validate) {
throw new OneException("Unable to find user '" + userName + "'");
throw new GeneralException("Unable to find user '" + userName + "'");
}
} else if (criteria.groupCriteria() != null) {
String groupName = getValue(criteria.groupCriteria().Value());
@ -90,10 +90,10 @@ public class ReviewRequirement {
groups.put(group, 1);
}
} else if (validate) {
throw new OneException("Group '" + groupName + "' is included multiple times");
throw new GeneralException("Group '" + groupName + "' is included multiple times");
}
} else if (validate) {
throw new OneException("Unable to find group '" + groupName + "'");
throw new GeneralException("Unable to find group '" + groupName + "'");
}
}
}

View File

@ -1,8 +1,8 @@
package io.onedev.server.util.usage;
import io.onedev.server.OneException;
import io.onedev.server.GeneralException;
public class InUseException extends OneException {
public class InUseException extends GeneralException {
private static final long serialVersionUID = 1L;

View File

@ -18,7 +18,7 @@ import org.antlr.v4.runtime.tree.TerminalNode;
import io.onedev.commons.codeassist.FenceAware;
import io.onedev.commons.utils.StringUtils;
import io.onedev.server.OneException;
import io.onedev.server.GeneralException;
import io.onedev.server.model.Project;
import io.onedev.server.model.User;
import io.onedev.server.util.usermatch.UserMatchParser.CriteriaContext;
@ -72,7 +72,7 @@ public class UserMatch implements Serializable {
specifiedGroup.setGroupName(groupName);
return specifiedGroup;
} else {
throw new OneException("Unrecognized user match criteria");
throw new GeneralException("Unrecognized user match criteria");
}
}

View File

@ -0,0 +1,260 @@
package io.onedev.server.web;
import org.apache.wicket.core.request.mapper.ResourceMapper;
import org.apache.wicket.markup.html.pages.BrowserInfoPage;
import org.apache.wicket.protocol.http.WebApplication;
import org.apache.wicket.request.mapper.CompoundRequestMapper;
import io.onedev.server.web.download.ArchiveDownloadResourceReference;
import io.onedev.server.web.download.ArtifactDownloadResourceReference;
import io.onedev.server.web.download.AttachmentDownloadResourceReference;
import io.onedev.server.web.download.BuildLogDownloadResourceReference;
import io.onedev.server.web.download.RawBlobDownloadResourceReference;
import io.onedev.server.web.download.ServerLogDownloadResourceReference;
import io.onedev.server.web.mapper.GeneralPageMapper;
import io.onedev.server.web.mapper.GeneralResourceMapper;
import io.onedev.server.web.page.admin.authenticator.AuthenticatorPage;
import io.onedev.server.web.page.admin.databasebackup.DatabaseBackupPage;
import io.onedev.server.web.page.admin.groovyscript.GroovyScriptListPage;
import io.onedev.server.web.page.admin.group.GroupListPage;
import io.onedev.server.web.page.admin.group.authorization.GroupAuthorizationsPage;
import io.onedev.server.web.page.admin.group.create.NewGroupPage;
import io.onedev.server.web.page.admin.group.membership.GroupMembershipsPage;
import io.onedev.server.web.page.admin.group.profile.GroupProfilePage;
import io.onedev.server.web.page.admin.issuesetting.defaultboard.DefaultBoardListPage;
import io.onedev.server.web.page.admin.issuesetting.fieldspec.IssueFieldListPage;
import io.onedev.server.web.page.admin.issuesetting.issuetemplate.IssueTemplateListPage;
import io.onedev.server.web.page.admin.issuesetting.statespec.IssueStateListPage;
import io.onedev.server.web.page.admin.issuesetting.transitionspec.StateTransitionsPage;
import io.onedev.server.web.page.admin.jobexecutor.JobExecutorsPage;
import io.onedev.server.web.page.admin.mailsetting.MailSettingPage;
import io.onedev.server.web.page.admin.role.NewRolePage;
import io.onedev.server.web.page.admin.role.RoleDetailPage;
import io.onedev.server.web.page.admin.role.RoleListPage;
import io.onedev.server.web.page.admin.securitysetting.SecuritySettingPage;
import io.onedev.server.web.page.admin.serverinformation.ServerInformationPage;
import io.onedev.server.web.page.admin.serverlog.ServerLogPage;
import io.onedev.server.web.page.admin.ssh.SshSettingPage;
import io.onedev.server.web.page.admin.sso.SsoConnectorListPage;
import io.onedev.server.web.page.admin.sso.SsoProcessPage;
import io.onedev.server.web.page.admin.systemsetting.SystemSettingPage;
import io.onedev.server.web.page.admin.user.UserListPage;
import io.onedev.server.web.page.admin.user.accesstoken.UserAccessTokenPage;
import io.onedev.server.web.page.admin.user.authorization.UserAuthorizationsPage;
import io.onedev.server.web.page.admin.user.avatar.UserAvatarPage;
import io.onedev.server.web.page.admin.user.create.NewUserPage;
import io.onedev.server.web.page.admin.user.membership.UserMembershipsPage;
import io.onedev.server.web.page.admin.user.password.UserPasswordPage;
import io.onedev.server.web.page.admin.user.profile.UserProfilePage;
import io.onedev.server.web.page.admin.user.ssh.UserSshKeysPage;
import io.onedev.server.web.page.builds.BuildListPage;
import io.onedev.server.web.page.init.ServerInitPage;
import io.onedev.server.web.page.issues.IssueListPage;
import io.onedev.server.web.page.my.accesstoken.MyAccessTokenPage;
import io.onedev.server.web.page.my.avatar.MyAvatarPage;
import io.onedev.server.web.page.my.password.MyPasswordPage;
import io.onedev.server.web.page.my.profile.MyProfilePage;
import io.onedev.server.web.page.my.sshkeys.MySshKeysPage;
import io.onedev.server.web.page.project.NewProjectPage;
import io.onedev.server.web.page.project.ProjectListPage;
import io.onedev.server.web.page.project.blob.ProjectBlobPage;
import io.onedev.server.web.page.project.branches.ProjectBranchesPage;
import io.onedev.server.web.page.project.builds.ProjectBuildsPage;
import io.onedev.server.web.page.project.builds.detail.InvalidBuildPage;
import io.onedev.server.web.page.project.builds.detail.artifacts.BuildArtifactsPage;
import io.onedev.server.web.page.project.builds.detail.changes.BuildChangesPage;
import io.onedev.server.web.page.project.builds.detail.dashboard.BuildDashboardPage;
import io.onedev.server.web.page.project.builds.detail.issues.FixedIssuesPage;
import io.onedev.server.web.page.project.builds.detail.log.BuildLogPage;
import io.onedev.server.web.page.project.codecomments.InvalidCodeCommentPage;
import io.onedev.server.web.page.project.codecomments.ProjectCodeCommentsPage;
import io.onedev.server.web.page.project.commits.CommitDetailPage;
import io.onedev.server.web.page.project.commits.ProjectCommitsPage;
import io.onedev.server.web.page.project.compare.RevisionComparePage;
import io.onedev.server.web.page.project.dashboard.ProjectDashboardPage;
import io.onedev.server.web.page.project.issues.boards.IssueBoardsPage;
import io.onedev.server.web.page.project.issues.create.NewIssuePage;
import io.onedev.server.web.page.project.issues.detail.IssueActivitiesPage;
import io.onedev.server.web.page.project.issues.detail.IssueBuildsPage;
import io.onedev.server.web.page.project.issues.detail.IssueCommitsPage;
import io.onedev.server.web.page.project.issues.detail.IssuePullRequestsPage;
import io.onedev.server.web.page.project.issues.list.ProjectIssueListPage;
import io.onedev.server.web.page.project.issues.milestones.MilestoneDetailPage;
import io.onedev.server.web.page.project.issues.milestones.MilestoneEditPage;
import io.onedev.server.web.page.project.issues.milestones.MilestoneListPage;
import io.onedev.server.web.page.project.issues.milestones.NewMilestonePage;
import io.onedev.server.web.page.project.pullrequests.InvalidPullRequestPage;
import io.onedev.server.web.page.project.pullrequests.ProjectPullRequestsPage;
import io.onedev.server.web.page.project.pullrequests.create.NewPullRequestPage;
import io.onedev.server.web.page.project.pullrequests.detail.activities.PullRequestActivitiesPage;
import io.onedev.server.web.page.project.pullrequests.detail.changes.PullRequestChangesPage;
import io.onedev.server.web.page.project.pullrequests.detail.codecomments.PullRequestCodeCommentsPage;
import io.onedev.server.web.page.project.pullrequests.detail.mergepreview.MergePreviewPage;
import io.onedev.server.web.page.project.setting.authorization.ProjectAuthorizationsPage;
import io.onedev.server.web.page.project.setting.avatar.AvatarEditPage;
import io.onedev.server.web.page.project.setting.branchprotection.BranchProtectionsPage;
import io.onedev.server.web.page.project.setting.build.ActionAuthorizationsPage;
import io.onedev.server.web.page.project.setting.build.BuildPreservationsPage;
import io.onedev.server.web.page.project.setting.build.JobSecretsPage;
import io.onedev.server.web.page.project.setting.general.GeneralSettingPage;
import io.onedev.server.web.page.project.setting.tagprotection.TagProtectionsPage;
import io.onedev.server.web.page.project.setting.webhook.WebHooksPage;
import io.onedev.server.web.page.project.stats.ProjectContribsPage;
import io.onedev.server.web.page.project.stats.SourceLinesPage;
import io.onedev.server.web.page.project.tags.ProjectTagsPage;
import io.onedev.server.web.page.pullrequests.PullRequestListPage;
import io.onedev.server.web.page.security.ForgetPage;
import io.onedev.server.web.page.security.LoginPage;
import io.onedev.server.web.page.security.LogoutPage;
import io.onedev.server.web.page.security.RegisterPage;
public class BaseUrlMapper extends CompoundRequestMapper {
public BaseUrlMapper(WebApplication app) {
add(new GeneralPageMapper("init", ServerInitPage.class));
add(new GeneralPageMapper("loading", BrowserInfoPage.class));
add(new GeneralPageMapper("issues", IssueListPage.class));
add(new GeneralPageMapper("pull-requests", PullRequestListPage.class));
add(new GeneralPageMapper("builds", BuildListPage.class));
addProjectPages();
addMyPages();
addAdministrationPages();
addSecurityPages();
addResources();
}
private void addMyPages() {
add(new GeneralPageMapper("my/profile", MyProfilePage.class));
add(new GeneralPageMapper("my/avatar", MyAvatarPage.class));
add(new GeneralPageMapper("my/password", MyPasswordPage.class));
add(new GeneralPageMapper("my/ssh-keys", MySshKeysPage.class));
add(new GeneralPageMapper("my/access-token", MyAccessTokenPage.class));
}
private void addResources() {
add(new ResourceMapper("downloads/server-log", new ServerLogDownloadResourceReference()));
add(new ResourceMapper("downloads/projects/${project}/builds/${build}/log", new BuildLogDownloadResourceReference()));
add(new ResourceMapper("projects/${project}/archive/${revision}", new ArchiveDownloadResourceReference()));
add(new GeneralResourceMapper("projects/${project}/raw/${revision}/${path}", new RawBlobDownloadResourceReference()));
add(new ResourceMapper("projects/${project}/attachment/${uuid}/${attachment}", new AttachmentDownloadResourceReference()));
add(new GeneralResourceMapper("downloads/projects/${project}/builds/${build}/artifacts/${path}",
new ArtifactDownloadResourceReference()));
}
private void addSecurityPages() {
add(new GeneralPageMapper("login", LoginPage.class));
add(new GeneralPageMapper("logout", LogoutPage.class));
add(new GeneralPageMapper("register", RegisterPage.class));
add(new GeneralPageMapper("forget", ForgetPage.class));
add(new GeneralPageMapper(SsoProcessPage.MOUNTED_PATH + "/${stage}/${connector}", SsoProcessPage.class));
}
private void addAdministrationPages() {
add(new GeneralPageMapper("administration", UserListPage.class));
add(new GeneralPageMapper("administration/users", UserListPage.class));
add(new GeneralPageMapper("administration/users/new", NewUserPage.class));
add(new GeneralPageMapper("administration/users/${user}", UserProfilePage.class));
add(new GeneralPageMapper("administration/users/${user}/profile", UserProfilePage.class));
add(new GeneralPageMapper("administration/users/${user}/groups", UserMembershipsPage.class));
add(new GeneralPageMapper("administration/users/${user}/authorizations", UserAuthorizationsPage.class));
add(new GeneralPageMapper("administration/users/${user}/avatar", UserAvatarPage.class));
add(new GeneralPageMapper("administration/users/${user}/password", UserPasswordPage.class));
add(new GeneralPageMapper("administration/users/${user}/ssh-keys", UserSshKeysPage.class));
add(new GeneralPageMapper("administration/users/${user}/access-token", UserAccessTokenPage.class));
add(new GeneralPageMapper("administration/roles", RoleListPage.class));
add(new GeneralPageMapper("administration/roles/new", NewRolePage.class));
add(new GeneralPageMapper("administration/roles/${role}", RoleDetailPage.class));
add(new GeneralPageMapper("administration/groups", GroupListPage.class));
add(new GeneralPageMapper("administration/groups/new", NewGroupPage.class));
add(new GeneralPageMapper("administration/groups/${group}", GroupProfilePage.class));
add(new GeneralPageMapper("administration/groups/${group}/profile", GroupProfilePage.class));
add(new GeneralPageMapper("administration/groups/${group}/members", GroupMembershipsPage.class));
add(new GeneralPageMapper("administration/groups/${group}/authorizations", GroupAuthorizationsPage.class));
add(new GeneralPageMapper("administration/settings", SystemSettingPage.class));
add(new GeneralPageMapper("administration/settings/system", SystemSettingPage.class));
add(new GeneralPageMapper("administration/settings/mail", MailSettingPage.class));
add(new GeneralPageMapper("administration/settings/backup", DatabaseBackupPage.class));
add(new GeneralPageMapper("administration/settings/security", SecuritySettingPage.class));
add(new GeneralPageMapper("administration/settings/authenticator", AuthenticatorPage.class));
add(new GeneralPageMapper("administration/settings/sso-connectors", SsoConnectorListPage.class));
add(new GeneralPageMapper("administration/settings/ssh", SshSettingPage.class));
add(new GeneralPageMapper("administration/settings/job-executors", JobExecutorsPage.class));
add(new GeneralPageMapper("administration/settings/groovy-scripts", GroovyScriptListPage.class));
add(new GeneralPageMapper("administration/settings/issue-fields", IssueFieldListPage.class));
add(new GeneralPageMapper("administration/settings/issue-states", IssueStateListPage.class));
add(new GeneralPageMapper("administration/settings/state-transitions", StateTransitionsPage.class));
add(new GeneralPageMapper("administration/settings/issue-boards", DefaultBoardListPage.class));
add(new GeneralPageMapper("administration/settings/issue-templates", IssueTemplateListPage.class));
add(new GeneralPageMapper("administration/server-log", ServerLogPage.class));
add(new GeneralPageMapper("administration/server-information", ServerInformationPage.class));
}
private void addProjectPages() {
add(new GeneralPageMapper("projects", ProjectListPage.class));
add(new GeneralPageMapper("projects/new", NewProjectPage.class));
add(new GeneralPageMapper("projects/${project}", ProjectDashboardPage.class));
add(new GeneralPageMapper("projects/${project}/blob/#{revision}/#{path}", ProjectBlobPage.class));
add(new GeneralPageMapper("projects/${project}/commits", ProjectCommitsPage.class));
add(new GeneralPageMapper("projects/${project}/commits/${revision}", CommitDetailPage.class));
add(new GeneralPageMapper("projects/${project}/compare", RevisionComparePage.class));
add(new GeneralPageMapper("projects/${project}/stats", ProjectContribsPage.class));
add(new GeneralPageMapper("projects/${project}/stats/contribs", ProjectContribsPage.class));
add(new GeneralPageMapper("projects/${project}/stats/lines", SourceLinesPage.class));
add(new GeneralPageMapper("projects/${project}/branches", ProjectBranchesPage.class));
add(new GeneralPageMapper("projects/${project}/tags", ProjectTagsPage.class));
add(new GeneralPageMapper("projects/${project}/code-comments", ProjectCodeCommentsPage.class));
add(new GeneralPageMapper("projects/${project}/code-comments/${code-comment}/invalid", InvalidCodeCommentPage.class));
add(new GeneralPageMapper("projects/${project}/pulls", ProjectPullRequestsPage.class));
add(new GeneralPageMapper("projects/${project}/pulls/new", NewPullRequestPage.class));
add(new GeneralPageMapper("projects/${project}/pulls/${request}", PullRequestActivitiesPage.class));
add(new GeneralPageMapper("projects/${project}/pulls/${request}/activities", PullRequestActivitiesPage.class));
add(new GeneralPageMapper("projects/${project}/pulls/${request}/code-comments", PullRequestCodeCommentsPage.class));
add(new GeneralPageMapper("projects/${project}/pulls/${request}/changes", PullRequestChangesPage.class));
add(new GeneralPageMapper("projects/${project}/pulls/${request}/merge-preview", MergePreviewPage.class));
add(new GeneralPageMapper("projects/${project}/pulls/${request}/invalid", InvalidPullRequestPage.class));
add(new GeneralPageMapper("projects/${project}/boards", IssueBoardsPage.class));
add(new GeneralPageMapper("projects/${project}/boards/${board}", IssueBoardsPage.class));
add(new GeneralPageMapper("projects/${project}/issues", ProjectIssueListPage.class));
add(new GeneralPageMapper("projects/${project}/issues/${issue}", IssueActivitiesPage.class));
add(new GeneralPageMapper("projects/${project}/issues/${issue}/activities", IssueActivitiesPage.class));
add(new GeneralPageMapper("projects/${project}/issues/${issue}/commits", IssueCommitsPage.class));
add(new GeneralPageMapper("projects/${project}/issues/${issue}/pull-requests", IssuePullRequestsPage.class));
add(new GeneralPageMapper("projects/${project}/issues/${issue}/builds", IssueBuildsPage.class));
add(new GeneralPageMapper("projects/${project}/issues/new", NewIssuePage.class));
add(new GeneralPageMapper("projects/${project}/milestones", MilestoneListPage.class));
add(new GeneralPageMapper("projects/${project}/milestones/${milestone}", MilestoneDetailPage.class));
add(new GeneralPageMapper("projects/${project}/milestones/${milestone}/edit", MilestoneEditPage.class));
add(new GeneralPageMapper("projects/${project}/milestones/new", NewMilestonePage.class));
add(new GeneralPageMapper("projects/${project}/builds", ProjectBuildsPage.class));
add(new GeneralPageMapper("projects/${project}/builds/${build}", BuildDashboardPage.class));
add(new GeneralPageMapper("projects/${project}/builds/${build}/log", BuildLogPage.class));
add(new GeneralPageMapper("projects/${project}/builds/${build}/changes", BuildChangesPage.class));
add(new GeneralPageMapper("projects/${project}/builds/${build}/fixed-issues", FixedIssuesPage.class));
add(new GeneralPageMapper("projects/${project}/builds/${build}/artifacts", BuildArtifactsPage.class));
add(new GeneralPageMapper("projects/${project}/builds/${build}/invalid", InvalidBuildPage.class));
add(new GeneralPageMapper("projects/${project}/settings", GeneralSettingPage.class));
add(new GeneralPageMapper("projects/${project}/settings/general", GeneralSettingPage.class));
add(new GeneralPageMapper("projects/${project}/settings/authorizations", ProjectAuthorizationsPage.class));
add(new GeneralPageMapper("projects/${project}/settings/avatar-edit", AvatarEditPage.class));
add(new GeneralPageMapper("projects/${project}/settings/branch-protection", BranchProtectionsPage.class));
add(new GeneralPageMapper("projects/${project}/settings/tag-protection", TagProtectionsPage.class));
add(new GeneralPageMapper("projects/${project}/settings/build/job-secrets", JobSecretsPage.class));
add(new GeneralPageMapper("projects/${project}/settings/build/action-authorizations", ActionAuthorizationsPage.class));
add(new GeneralPageMapper("projects/${project}/settings/build/build-preserve-rules", BuildPreservationsPage.class));
add(new GeneralPageMapper("projects/${project}/settings/web-hooks", WebHooksPage.class));
}
}

View File

@ -1,260 +0,0 @@
package io.onedev.server.web;
import org.apache.wicket.core.request.mapper.ResourceMapper;
import org.apache.wicket.markup.html.pages.BrowserInfoPage;
import org.apache.wicket.protocol.http.WebApplication;
import org.apache.wicket.request.mapper.CompoundRequestMapper;
import io.onedev.server.web.download.ArchiveDownloadResourceReference;
import io.onedev.server.web.download.ArtifactDownloadResourceReference;
import io.onedev.server.web.download.AttachmentDownloadResourceReference;
import io.onedev.server.web.download.BuildLogDownloadResourceReference;
import io.onedev.server.web.download.RawBlobDownloadResourceReference;
import io.onedev.server.web.download.ServerLogDownloadResourceReference;
import io.onedev.server.web.mapper.OnePageMapper;
import io.onedev.server.web.mapper.OneResourceMapper;
import io.onedev.server.web.page.admin.authenticator.AuthenticatorPage;
import io.onedev.server.web.page.admin.databasebackup.DatabaseBackupPage;
import io.onedev.server.web.page.admin.groovyscript.GroovyScriptListPage;
import io.onedev.server.web.page.admin.group.GroupListPage;
import io.onedev.server.web.page.admin.group.authorization.GroupAuthorizationsPage;
import io.onedev.server.web.page.admin.group.create.NewGroupPage;
import io.onedev.server.web.page.admin.group.membership.GroupMembershipsPage;
import io.onedev.server.web.page.admin.group.profile.GroupProfilePage;
import io.onedev.server.web.page.admin.issuesetting.defaultboard.DefaultBoardListPage;
import io.onedev.server.web.page.admin.issuesetting.fieldspec.IssueFieldListPage;
import io.onedev.server.web.page.admin.issuesetting.issuetemplate.IssueTemplateListPage;
import io.onedev.server.web.page.admin.issuesetting.statespec.IssueStateListPage;
import io.onedev.server.web.page.admin.issuesetting.transitionspec.StateTransitionsPage;
import io.onedev.server.web.page.admin.jobexecutor.JobExecutorsPage;
import io.onedev.server.web.page.admin.mailsetting.MailSettingPage;
import io.onedev.server.web.page.admin.role.NewRolePage;
import io.onedev.server.web.page.admin.role.RoleDetailPage;
import io.onedev.server.web.page.admin.role.RoleListPage;
import io.onedev.server.web.page.admin.securitysetting.SecuritySettingPage;
import io.onedev.server.web.page.admin.serverinformation.ServerInformationPage;
import io.onedev.server.web.page.admin.serverlog.ServerLogPage;
import io.onedev.server.web.page.admin.ssh.SshSettingPage;
import io.onedev.server.web.page.admin.sso.SsoConnectorListPage;
import io.onedev.server.web.page.admin.sso.SsoProcessPage;
import io.onedev.server.web.page.admin.systemsetting.SystemSettingPage;
import io.onedev.server.web.page.admin.user.UserListPage;
import io.onedev.server.web.page.admin.user.accesstoken.UserAccessTokenPage;
import io.onedev.server.web.page.admin.user.authorization.UserAuthorizationsPage;
import io.onedev.server.web.page.admin.user.avatar.UserAvatarPage;
import io.onedev.server.web.page.admin.user.create.NewUserPage;
import io.onedev.server.web.page.admin.user.membership.UserMembershipsPage;
import io.onedev.server.web.page.admin.user.password.UserPasswordPage;
import io.onedev.server.web.page.admin.user.profile.UserProfilePage;
import io.onedev.server.web.page.admin.user.ssh.UserSshKeysPage;
import io.onedev.server.web.page.builds.BuildListPage;
import io.onedev.server.web.page.init.ServerInitPage;
import io.onedev.server.web.page.issues.IssueListPage;
import io.onedev.server.web.page.my.accesstoken.MyAccessTokenPage;
import io.onedev.server.web.page.my.avatar.MyAvatarPage;
import io.onedev.server.web.page.my.password.MyPasswordPage;
import io.onedev.server.web.page.my.profile.MyProfilePage;
import io.onedev.server.web.page.my.sshkeys.MySshKeysPage;
import io.onedev.server.web.page.project.NewProjectPage;
import io.onedev.server.web.page.project.ProjectListPage;
import io.onedev.server.web.page.project.blob.ProjectBlobPage;
import io.onedev.server.web.page.project.branches.ProjectBranchesPage;
import io.onedev.server.web.page.project.builds.ProjectBuildsPage;
import io.onedev.server.web.page.project.builds.detail.InvalidBuildPage;
import io.onedev.server.web.page.project.builds.detail.artifacts.BuildArtifactsPage;
import io.onedev.server.web.page.project.builds.detail.changes.BuildChangesPage;
import io.onedev.server.web.page.project.builds.detail.dashboard.BuildDashboardPage;
import io.onedev.server.web.page.project.builds.detail.issues.FixedIssuesPage;
import io.onedev.server.web.page.project.builds.detail.log.BuildLogPage;
import io.onedev.server.web.page.project.codecomments.InvalidCodeCommentPage;
import io.onedev.server.web.page.project.codecomments.ProjectCodeCommentsPage;
import io.onedev.server.web.page.project.commits.CommitDetailPage;
import io.onedev.server.web.page.project.commits.ProjectCommitsPage;
import io.onedev.server.web.page.project.compare.RevisionComparePage;
import io.onedev.server.web.page.project.dashboard.ProjectDashboardPage;
import io.onedev.server.web.page.project.issues.boards.IssueBoardsPage;
import io.onedev.server.web.page.project.issues.create.NewIssuePage;
import io.onedev.server.web.page.project.issues.detail.IssueActivitiesPage;
import io.onedev.server.web.page.project.issues.detail.IssueBuildsPage;
import io.onedev.server.web.page.project.issues.detail.IssueCommitsPage;
import io.onedev.server.web.page.project.issues.detail.IssuePullRequestsPage;
import io.onedev.server.web.page.project.issues.list.ProjectIssueListPage;
import io.onedev.server.web.page.project.issues.milestones.MilestoneDetailPage;
import io.onedev.server.web.page.project.issues.milestones.MilestoneEditPage;
import io.onedev.server.web.page.project.issues.milestones.MilestoneListPage;
import io.onedev.server.web.page.project.issues.milestones.NewMilestonePage;
import io.onedev.server.web.page.project.pullrequests.InvalidPullRequestPage;
import io.onedev.server.web.page.project.pullrequests.ProjectPullRequestsPage;
import io.onedev.server.web.page.project.pullrequests.create.NewPullRequestPage;
import io.onedev.server.web.page.project.pullrequests.detail.activities.PullRequestActivitiesPage;
import io.onedev.server.web.page.project.pullrequests.detail.changes.PullRequestChangesPage;
import io.onedev.server.web.page.project.pullrequests.detail.codecomments.PullRequestCodeCommentsPage;
import io.onedev.server.web.page.project.pullrequests.detail.mergepreview.MergePreviewPage;
import io.onedev.server.web.page.project.setting.authorization.ProjectAuthorizationsPage;
import io.onedev.server.web.page.project.setting.avatar.AvatarEditPage;
import io.onedev.server.web.page.project.setting.branchprotection.BranchProtectionsPage;
import io.onedev.server.web.page.project.setting.build.ActionAuthorizationsPage;
import io.onedev.server.web.page.project.setting.build.BuildPreservationsPage;
import io.onedev.server.web.page.project.setting.build.JobSecretsPage;
import io.onedev.server.web.page.project.setting.general.GeneralSettingPage;
import io.onedev.server.web.page.project.setting.tagprotection.TagProtectionsPage;
import io.onedev.server.web.page.project.setting.webhook.WebHooksPage;
import io.onedev.server.web.page.project.stats.ProjectContribsPage;
import io.onedev.server.web.page.project.stats.SourceLinesPage;
import io.onedev.server.web.page.project.tags.ProjectTagsPage;
import io.onedev.server.web.page.pullrequests.PullRequestListPage;
import io.onedev.server.web.page.security.ForgetPage;
import io.onedev.server.web.page.security.LoginPage;
import io.onedev.server.web.page.security.LogoutPage;
import io.onedev.server.web.page.security.RegisterPage;
public class OneUrlMapper extends CompoundRequestMapper {
public OneUrlMapper(WebApplication app) {
add(new OnePageMapper("init", ServerInitPage.class));
add(new OnePageMapper("loading", BrowserInfoPage.class));
add(new OnePageMapper("issues", IssueListPage.class));
add(new OnePageMapper("pull-requests", PullRequestListPage.class));
add(new OnePageMapper("builds", BuildListPage.class));
addProjectPages();
addMyPages();
addAdministrationPages();
addSecurityPages();
addResources();
}
private void addMyPages() {
add(new OnePageMapper("my/profile", MyProfilePage.class));
add(new OnePageMapper("my/avatar", MyAvatarPage.class));
add(new OnePageMapper("my/password", MyPasswordPage.class));
add(new OnePageMapper("my/ssh-keys", MySshKeysPage.class));
add(new OnePageMapper("my/access-token", MyAccessTokenPage.class));
}
private void addResources() {
add(new ResourceMapper("downloads/server-log", new ServerLogDownloadResourceReference()));
add(new ResourceMapper("downloads/projects/${project}/builds/${build}/log", new BuildLogDownloadResourceReference()));
add(new ResourceMapper("projects/${project}/archive/${revision}", new ArchiveDownloadResourceReference()));
add(new OneResourceMapper("projects/${project}/raw/${revision}/${path}", new RawBlobDownloadResourceReference()));
add(new ResourceMapper("projects/${project}/attachment/${uuid}/${attachment}", new AttachmentDownloadResourceReference()));
add(new OneResourceMapper("downloads/projects/${project}/builds/${build}/artifacts/${path}",
new ArtifactDownloadResourceReference()));
}
private void addSecurityPages() {
add(new OnePageMapper("login", LoginPage.class));
add(new OnePageMapper("logout", LogoutPage.class));
add(new OnePageMapper("register", RegisterPage.class));
add(new OnePageMapper("forget", ForgetPage.class));
add(new OnePageMapper(SsoProcessPage.MOUNTED_PATH + "/${stage}/${connector}", SsoProcessPage.class));
}
private void addAdministrationPages() {
add(new OnePageMapper("administration", UserListPage.class));
add(new OnePageMapper("administration/users", UserListPage.class));
add(new OnePageMapper("administration/users/new", NewUserPage.class));
add(new OnePageMapper("administration/users/${user}", UserProfilePage.class));
add(new OnePageMapper("administration/users/${user}/profile", UserProfilePage.class));
add(new OnePageMapper("administration/users/${user}/groups", UserMembershipsPage.class));
add(new OnePageMapper("administration/users/${user}/authorizations", UserAuthorizationsPage.class));
add(new OnePageMapper("administration/users/${user}/avatar", UserAvatarPage.class));
add(new OnePageMapper("administration/users/${user}/password", UserPasswordPage.class));
add(new OnePageMapper("administration/users/${user}/ssh-keys", UserSshKeysPage.class));
add(new OnePageMapper("administration/users/${user}/access-token", UserAccessTokenPage.class));
add(new OnePageMapper("administration/roles", RoleListPage.class));
add(new OnePageMapper("administration/roles/new", NewRolePage.class));
add(new OnePageMapper("administration/roles/${role}", RoleDetailPage.class));
add(new OnePageMapper("administration/groups", GroupListPage.class));
add(new OnePageMapper("administration/groups/new", NewGroupPage.class));
add(new OnePageMapper("administration/groups/${group}", GroupProfilePage.class));
add(new OnePageMapper("administration/groups/${group}/profile", GroupProfilePage.class));
add(new OnePageMapper("administration/groups/${group}/members", GroupMembershipsPage.class));
add(new OnePageMapper("administration/groups/${group}/authorizations", GroupAuthorizationsPage.class));
add(new OnePageMapper("administration/settings", SystemSettingPage.class));
add(new OnePageMapper("administration/settings/system", SystemSettingPage.class));
add(new OnePageMapper("administration/settings/mail", MailSettingPage.class));
add(new OnePageMapper("administration/settings/backup", DatabaseBackupPage.class));
add(new OnePageMapper("administration/settings/security", SecuritySettingPage.class));
add(new OnePageMapper("administration/settings/authenticator", AuthenticatorPage.class));
add(new OnePageMapper("administration/settings/sso-connectors", SsoConnectorListPage.class));
add(new OnePageMapper("administration/settings/ssh", SshSettingPage.class));
add(new OnePageMapper("administration/settings/job-executors", JobExecutorsPage.class));
add(new OnePageMapper("administration/settings/groovy-scripts", GroovyScriptListPage.class));
add(new OnePageMapper("administration/settings/issue-fields", IssueFieldListPage.class));
add(new OnePageMapper("administration/settings/issue-states", IssueStateListPage.class));
add(new OnePageMapper("administration/settings/state-transitions", StateTransitionsPage.class));
add(new OnePageMapper("administration/settings/issue-boards", DefaultBoardListPage.class));
add(new OnePageMapper("administration/settings/issue-templates", IssueTemplateListPage.class));
add(new OnePageMapper("administration/server-log", ServerLogPage.class));
add(new OnePageMapper("administration/server-information", ServerInformationPage.class));
}
private void addProjectPages() {
add(new OnePageMapper("projects", ProjectListPage.class));
add(new OnePageMapper("projects/new", NewProjectPage.class));
add(new OnePageMapper("projects/${project}", ProjectDashboardPage.class));
add(new OnePageMapper("projects/${project}/blob/#{revision}/#{path}", ProjectBlobPage.class));
add(new OnePageMapper("projects/${project}/commits", ProjectCommitsPage.class));
add(new OnePageMapper("projects/${project}/commits/${revision}", CommitDetailPage.class));
add(new OnePageMapper("projects/${project}/compare", RevisionComparePage.class));
add(new OnePageMapper("projects/${project}/stats", ProjectContribsPage.class));
add(new OnePageMapper("projects/${project}/stats/contribs", ProjectContribsPage.class));
add(new OnePageMapper("projects/${project}/stats/lines", SourceLinesPage.class));
add(new OnePageMapper("projects/${project}/branches", ProjectBranchesPage.class));
add(new OnePageMapper("projects/${project}/tags", ProjectTagsPage.class));
add(new OnePageMapper("projects/${project}/code-comments", ProjectCodeCommentsPage.class));
add(new OnePageMapper("projects/${project}/code-comments/${code-comment}/invalid", InvalidCodeCommentPage.class));
add(new OnePageMapper("projects/${project}/pulls", ProjectPullRequestsPage.class));
add(new OnePageMapper("projects/${project}/pulls/new", NewPullRequestPage.class));
add(new OnePageMapper("projects/${project}/pulls/${request}", PullRequestActivitiesPage.class));
add(new OnePageMapper("projects/${project}/pulls/${request}/activities", PullRequestActivitiesPage.class));
add(new OnePageMapper("projects/${project}/pulls/${request}/code-comments", PullRequestCodeCommentsPage.class));
add(new OnePageMapper("projects/${project}/pulls/${request}/changes", PullRequestChangesPage.class));
add(new OnePageMapper("projects/${project}/pulls/${request}/merge-preview", MergePreviewPage.class));
add(new OnePageMapper("projects/${project}/pulls/${request}/invalid", InvalidPullRequestPage.class));
add(new OnePageMapper("projects/${project}/boards", IssueBoardsPage.class));
add(new OnePageMapper("projects/${project}/boards/${board}", IssueBoardsPage.class));
add(new OnePageMapper("projects/${project}/issues", ProjectIssueListPage.class));
add(new OnePageMapper("projects/${project}/issues/${issue}", IssueActivitiesPage.class));
add(new OnePageMapper("projects/${project}/issues/${issue}/activities", IssueActivitiesPage.class));
add(new OnePageMapper("projects/${project}/issues/${issue}/commits", IssueCommitsPage.class));
add(new OnePageMapper("projects/${project}/issues/${issue}/pull-requests", IssuePullRequestsPage.class));
add(new OnePageMapper("projects/${project}/issues/${issue}/builds", IssueBuildsPage.class));
add(new OnePageMapper("projects/${project}/issues/new", NewIssuePage.class));
add(new OnePageMapper("projects/${project}/milestones", MilestoneListPage.class));
add(new OnePageMapper("projects/${project}/milestones/${milestone}", MilestoneDetailPage.class));
add(new OnePageMapper("projects/${project}/milestones/${milestone}/edit", MilestoneEditPage.class));
add(new OnePageMapper("projects/${project}/milestones/new", NewMilestonePage.class));
add(new OnePageMapper("projects/${project}/builds", ProjectBuildsPage.class));
add(new OnePageMapper("projects/${project}/builds/${build}", BuildDashboardPage.class));
add(new OnePageMapper("projects/${project}/builds/${build}/log", BuildLogPage.class));
add(new OnePageMapper("projects/${project}/builds/${build}/changes", BuildChangesPage.class));
add(new OnePageMapper("projects/${project}/builds/${build}/fixed-issues", FixedIssuesPage.class));
add(new OnePageMapper("projects/${project}/builds/${build}/artifacts", BuildArtifactsPage.class));
add(new OnePageMapper("projects/${project}/builds/${build}/invalid", InvalidBuildPage.class));
add(new OnePageMapper("projects/${project}/settings", GeneralSettingPage.class));
add(new OnePageMapper("projects/${project}/settings/general", GeneralSettingPage.class));
add(new OnePageMapper("projects/${project}/settings/authorizations", ProjectAuthorizationsPage.class));
add(new OnePageMapper("projects/${project}/settings/avatar-edit", AvatarEditPage.class));
add(new OnePageMapper("projects/${project}/settings/branch-protection", BranchProtectionsPage.class));
add(new OnePageMapper("projects/${project}/settings/tag-protection", TagProtectionsPage.class));
add(new OnePageMapper("projects/${project}/settings/build/job-secrets", JobSecretsPage.class));
add(new OnePageMapper("projects/${project}/settings/build/action-authorizations", ActionAuthorizationsPage.class));
add(new OnePageMapper("projects/${project}/settings/build/build-preserve-rules", BuildPreservationsPage.class));
add(new OnePageMapper("projects/${project}/settings/web-hooks", WebHooksPage.class));
}
}

View File

@ -31,7 +31,6 @@ import org.apache.wicket.core.request.handler.RenderPageRequestHandler;
import org.apache.wicket.core.request.mapper.HomePageMapper;
import org.apache.wicket.markup.html.pages.AbstractErrorPage;
import org.apache.wicket.markup.html.pages.BrowserInfoPage;
import org.apache.wicket.protocol.http.WebApplication;
import org.apache.wicket.protocol.http.servlet.ServletWebRequest;
import org.apache.wicket.protocol.ws.WebSocketSettings;
import org.apache.wicket.protocol.ws.api.IWebSocketConnection;
@ -49,10 +48,11 @@ import org.apache.wicket.request.handler.resource.ResourceReferenceRequestHandle
import org.apache.wicket.request.http.WebRequest;
import org.apache.wicket.request.http.WebResponse;
import org.apache.wicket.request.mapper.info.PageComponentInfo;
import org.apache.wicket.request.resource.JavaScriptResourceReference;
import org.apache.wicket.resource.JQueryResourceReference;
import org.apache.wicket.util.IProvider;
import org.apache.wicket.util.time.Duration;
import de.agilecoders.wicket.core.settings.BootstrapSettings;
import io.onedev.commons.launcher.bootstrap.Bootstrap;
import io.onedev.commons.launcher.loader.AppLoader;
import io.onedev.commons.utils.ExceptionUtils;
@ -67,14 +67,14 @@ import io.onedev.server.web.util.AbsoluteUrlRenderer;
import io.onedev.server.web.websocket.WebSocketManager;
@Singleton
public class OneWebApplication extends WebApplication {
public class WebApplication extends org.apache.wicket.protocol.http.WebApplication {
private final Set<WebApplicationConfigurator> applicationConfigurators;
private final UICustomization uiCustomization;
@Inject
public OneWebApplication(Set<WebApplicationConfigurator> applicationConfigurators,
public WebApplication(Set<WebApplicationConfigurator> applicationConfigurators,
UICustomization uiCustomization) {
this.applicationConfigurators = applicationConfigurators;
this.uiCustomization = uiCustomization;
@ -96,6 +96,9 @@ public class OneWebApplication extends WebApplication {
getMarkupSettings().setStripComments(true);
getMarkupSettings().setStripWicketTags(true);
getJavaScriptLibrarySettings().setJQueryReference(new JavaScriptResourceReference(
JQueryResourceReference.class, "jquery/jquery-3.5.1.min.js"));
getStoreSettings().setFileStoreFolder(Bootstrap.getTempDir());
/*
@ -109,10 +112,6 @@ public class OneWebApplication extends WebApplication {
getRequestCycleSettings().setTimeout(Duration.minutes(30));
BootstrapSettings bootstrapSettings = new BootstrapSettings();
bootstrapSettings.setAutoAppendResources(false);
de.agilecoders.wicket.core.Bootstrap.install(this, bootstrapSettings);
getComponentInstantiationListeners().add(new IComponentInstantiationListener() {
@Override
@ -208,7 +207,7 @@ public class OneWebApplication extends WebApplication {
});
mount(new OneUrlMapper(this));
mount(new BaseUrlMapper(this));
for (WebApplicationConfigurator configurator: applicationConfigurators)
configurator.configure(this);
@ -251,8 +250,8 @@ public class OneWebApplication extends WebApplication {
};
}
public static OneWebApplication get() {
return (OneWebApplication) Application.get();
public static WebApplication get() {
return (WebApplication) Application.get();
}
@Override

View File

@ -0,0 +1,13 @@
package io.onedev.server.web.asset.bootstrap;
import org.apache.wicket.request.resource.CssResourceReference;
public class BootstrapCssResourceReference extends CssResourceReference {
private static final long serialVersionUID = 1L;
public BootstrapCssResourceReference() {
super(BootstrapCssResourceReference.class, "css/bootstrap.min.css");
}
}

View File

@ -0,0 +1,28 @@
package io.onedev.server.web.asset.bootstrap;
import java.util.ArrayList;
import java.util.List;
import org.apache.wicket.Application;
import org.apache.wicket.markup.head.CssHeaderItem;
import org.apache.wicket.markup.head.HeaderItem;
import org.apache.wicket.markup.head.JavaScriptHeaderItem;
import org.apache.wicket.request.resource.JavaScriptResourceReference;
public class BootstrapResourceReference extends JavaScriptResourceReference {
private static final long serialVersionUID = 1L;
public BootstrapResourceReference() {
super(BootstrapResourceReference.class, "js/bootstrap.bundle.min.js");
}
@Override
public List<HeaderItem> getDependencies() {
List<HeaderItem> dependencies = new ArrayList<>();
dependencies.add(JavaScriptHeaderItem.forReference(Application.get().getJavaScriptLibrarySettings().getJQueryReference()));
dependencies.add(CssHeaderItem.forReference(new BootstrapCssResourceReference()));
return dependencies;
}
}

File diff suppressed because it is too large Load Diff

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,325 @@
/*!
* Bootstrap Reboot v4.5.2 (https://getbootstrap.com/)
* Copyright 2011-2020 The Bootstrap Authors
* Copyright 2011-2020 Twitter, Inc.
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
* Forked from Normalize.css, licensed MIT (https://github.com/necolas/normalize.css/blob/master/LICENSE.md)
*/
*,
*::before,
*::after {
box-sizing: border-box;
}
html {
font-family: sans-serif;
line-height: 1.15;
-webkit-text-size-adjust: 100%;
-webkit-tap-highlight-color: rgba(0, 0, 0, 0);
}
article, aside, figcaption, figure, footer, header, hgroup, main, nav, section {
display: block;
}
body {
margin: 0;
font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";
font-size: 1rem;
font-weight: 400;
line-height: 1.5;
color: #212529;
text-align: left;
background-color: #fff;
}
[tabindex="-1"]:focus:not(:focus-visible) {
outline: 0 !important;
}
hr {
box-sizing: content-box;
height: 0;
overflow: visible;
}
h1, h2, h3, h4, h5, h6 {
margin-top: 0;
margin-bottom: 0.5rem;
}
p {
margin-top: 0;
margin-bottom: 1rem;
}
abbr[title],
abbr[data-original-title] {
text-decoration: underline;
-webkit-text-decoration: underline dotted;
text-decoration: underline dotted;
cursor: help;
border-bottom: 0;
-webkit-text-decoration-skip-ink: none;
text-decoration-skip-ink: none;
}
address {
margin-bottom: 1rem;
font-style: normal;
line-height: inherit;
}
ol,
ul,
dl {
margin-top: 0;
margin-bottom: 1rem;
}
ol ol,
ul ul,
ol ul,
ul ol {
margin-bottom: 0;
}
dt {
font-weight: 700;
}
dd {
margin-bottom: .5rem;
margin-left: 0;
}
blockquote {
margin: 0 0 1rem;
}
b,
strong {
font-weight: bolder;
}
small {
font-size: 80%;
}
sub,
sup {
position: relative;
font-size: 75%;
line-height: 0;
vertical-align: baseline;
}
sub {
bottom: -.25em;
}
sup {
top: -.5em;
}
a {
color: #007bff;
text-decoration: none;
background-color: transparent;
}
a:hover {
color: #0056b3;
text-decoration: underline;
}
a:not([href]):not([class]) {
color: inherit;
text-decoration: none;
}
a:not([href]):not([class]):hover {
color: inherit;
text-decoration: none;
}
pre,
code,
kbd,
samp {
font-family: SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;
font-size: 1em;
}
pre {
margin-top: 0;
margin-bottom: 1rem;
overflow: auto;
-ms-overflow-style: scrollbar;
}
figure {
margin: 0 0 1rem;
}
img {
vertical-align: middle;
border-style: none;
}
svg {
overflow: hidden;
vertical-align: middle;
}
table {
border-collapse: collapse;
}
caption {
padding-top: 0.75rem;
padding-bottom: 0.75rem;
color: #6c757d;
text-align: left;
caption-side: bottom;
}
th {
text-align: inherit;
}
label {
display: inline-block;
margin-bottom: 0.5rem;
}
button {
border-radius: 0;
}
button:focus {
outline: 1px dotted;
outline: 5px auto -webkit-focus-ring-color;
}
input,
button,
select,
optgroup,
textarea {
margin: 0;
font-family: inherit;
font-size: inherit;
line-height: inherit;
}
button,
input {
overflow: visible;
}
button,
select {
text-transform: none;
}
[role="button"] {
cursor: pointer;
}
select {
word-wrap: normal;
}
button,
[type="button"],
[type="reset"],
[type="submit"] {
-webkit-appearance: button;
}
button:not(:disabled),
[type="button"]:not(:disabled),
[type="reset"]:not(:disabled),
[type="submit"]:not(:disabled) {
cursor: pointer;
}
button::-moz-focus-inner,
[type="button"]::-moz-focus-inner,
[type="reset"]::-moz-focus-inner,
[type="submit"]::-moz-focus-inner {
padding: 0;
border-style: none;
}
input[type="radio"],
input[type="checkbox"] {
box-sizing: border-box;
padding: 0;
}
textarea {
overflow: auto;
resize: vertical;
}
fieldset {
min-width: 0;
padding: 0;
margin: 0;
border: 0;
}
legend {
display: block;
width: 100%;
max-width: 100%;
padding: 0;
margin-bottom: .5rem;
font-size: 1.5rem;
line-height: inherit;
color: inherit;
white-space: normal;
}
progress {
vertical-align: baseline;
}
[type="number"]::-webkit-inner-spin-button,
[type="number"]::-webkit-outer-spin-button {
height: auto;
}
[type="search"] {
outline-offset: -2px;
-webkit-appearance: none;
}
[type="search"]::-webkit-search-decoration {
-webkit-appearance: none;
}
::-webkit-file-upload-button {
font: inherit;
-webkit-appearance: button;
}
output {
display: inline-block;
}
summary {
display: list-item;
cursor: pointer;
}
template {
display: none;
}
[hidden] {
display: none !important;
}
/*# sourceMappingURL=bootstrap-reboot.css.map */

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,8 @@
/*!
* Bootstrap Reboot v4.5.2 (https://getbootstrap.com/)
* Copyright 2011-2020 The Bootstrap Authors
* Copyright 2011-2020 Twitter, Inc.
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
* Forked from Normalize.css, licensed MIT (https://github.com/necolas/normalize.css/blob/master/LICENSE.md)
*/*,::after,::before{box-sizing:border-box}html{font-family:sans-serif;line-height:1.15;-webkit-text-size-adjust:100%;-webkit-tap-highlight-color:transparent}article,aside,figcaption,figure,footer,header,hgroup,main,nav,section{display:block}body{margin:0;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,"Noto Sans",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";font-size:1rem;font-weight:400;line-height:1.5;color:#212529;text-align:left;background-color:#fff}[tabindex="-1"]:focus:not(:focus-visible){outline:0!important}hr{box-sizing:content-box;height:0;overflow:visible}h1,h2,h3,h4,h5,h6{margin-top:0;margin-bottom:.5rem}p{margin-top:0;margin-bottom:1rem}abbr[data-original-title],abbr[title]{text-decoration:underline;-webkit-text-decoration:underline dotted;text-decoration:underline dotted;cursor:help;border-bottom:0;-webkit-text-decoration-skip-ink:none;text-decoration-skip-ink:none}address{margin-bottom:1rem;font-style:normal;line-height:inherit}dl,ol,ul{margin-top:0;margin-bottom:1rem}ol ol,ol ul,ul ol,ul ul{margin-bottom:0}dt{font-weight:700}dd{margin-bottom:.5rem;margin-left:0}blockquote{margin:0 0 1rem}b,strong{font-weight:bolder}small{font-size:80%}sub,sup{position:relative;font-size:75%;line-height:0;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}a{color:#007bff;text-decoration:none;background-color:transparent}a:hover{color:#0056b3;text-decoration:underline}a:not([href]):not([class]){color:inherit;text-decoration:none}a:not([href]):not([class]):hover{color:inherit;text-decoration:none}code,kbd,pre,samp{font-family:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;font-size:1em}pre{margin-top:0;margin-bottom:1rem;overflow:auto;-ms-overflow-style:scrollbar}figure{margin:0 0 1rem}img{vertical-align:middle;border-style:none}svg{overflow:hidden;vertical-align:middle}table{border-collapse:collapse}caption{padding-top:.75rem;padding-bottom:.75rem;color:#6c757d;text-align:left;caption-side:bottom}th{text-align:inherit}label{display:inline-block;margin-bottom:.5rem}button{border-radius:0}button:focus{outline:1px dotted;outline:5px auto -webkit-focus-ring-color}button,input,optgroup,select,textarea{margin:0;font-family:inherit;font-size:inherit;line-height:inherit}button,input{overflow:visible}button,select{text-transform:none}[role=button]{cursor:pointer}select{word-wrap:normal}[type=button],[type=reset],[type=submit],button{-webkit-appearance:button}[type=button]:not(:disabled),[type=reset]:not(:disabled),[type=submit]:not(:disabled),button:not(:disabled){cursor:pointer}[type=button]::-moz-focus-inner,[type=reset]::-moz-focus-inner,[type=submit]::-moz-focus-inner,button::-moz-focus-inner{padding:0;border-style:none}input[type=checkbox],input[type=radio]{box-sizing:border-box;padding:0}textarea{overflow:auto;resize:vertical}fieldset{min-width:0;padding:0;margin:0;border:0}legend{display:block;width:100%;max-width:100%;padding:0;margin-bottom:.5rem;font-size:1.5rem;line-height:inherit;color:inherit;white-space:normal}progress{vertical-align:baseline}[type=number]::-webkit-inner-spin-button,[type=number]::-webkit-outer-spin-button{height:auto}[type=search]{outline-offset:-2px;-webkit-appearance:none}[type=search]::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{font:inherit;-webkit-appearance:button}output{display:inline-block}summary{display:list-item;cursor:pointer}template{display:none}[hidden]{display:none!important}
/*# sourceMappingURL=bootstrap-reboot.min.css.map */

File diff suppressed because one or more lines are too long

File diff suppressed because it is too large Load Diff

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because it is too large Load Diff

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because it is too large Load Diff

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -5,9 +5,9 @@ import java.util.List;
import org.apache.wicket.markup.head.CssHeaderItem;
import org.apache.wicket.markup.head.HeaderItem;
import org.apache.wicket.markup.head.JavaScriptHeaderItem;
import org.apache.wicket.request.resource.CssResourceReference;
import org.apache.wicket.request.resource.JavaScriptResourceReference;
import de.agilecoders.wicket.webjars.request.resource.WebjarsCssResourceReference;
import de.agilecoders.wicket.webjars.request.resource.WebjarsJavaScriptResourceReference;
import io.onedev.server.web.asset.hotkeys.HotkeysResourceReference;
import io.onedev.server.web.page.base.BaseDependentCssResourceReference;
import io.onedev.server.web.page.base.BaseDependentResourceReference;
@ -19,52 +19,52 @@ public class CodeMirrorResourceReference extends BaseDependentResourceReference
private static final long serialVersionUID = 1L;
public CodeMirrorResourceReference() {
super(CodeMirrorResourceReference.class, "codemirror.js");
super(CodeMirrorResourceReference.class, "codemirror-int.js");
}
@Override
public List<HeaderItem> getDependencies() {
List<HeaderItem> dependencies = super.getDependencies();
dependencies.add(JavaScriptHeaderItem.forReference(new WebjarsJavaScriptResourceReference("codemirror/current/lib/codemirror.js")));
dependencies.add(JavaScriptHeaderItem.forReference(new WebjarsJavaScriptResourceReference("codemirror/current/addon/mode/overlay.js")));
dependencies.add(JavaScriptHeaderItem.forReference(new WebjarsJavaScriptResourceReference("codemirror/current/addon/mode/simple.js")));
dependencies.add(JavaScriptHeaderItem.forReference(new WebjarsJavaScriptResourceReference("codemirror/current/addon/mode/multiplex.js")));
dependencies.add(JavaScriptHeaderItem.forReference(new WebjarsJavaScriptResourceReference("codemirror/current/addon/edit/matchbrackets.js")));
dependencies.add(JavaScriptHeaderItem.forReference(new WebjarsJavaScriptResourceReference("codemirror/current/addon/dialog/dialog.js")));
dependencies.add(JavaScriptHeaderItem.forReference(new WebjarsJavaScriptResourceReference("codemirror/current/addon/fold/foldcode.js")));
dependencies.add(JavaScriptHeaderItem.forReference(new WebjarsJavaScriptResourceReference("codemirror/current/addon/fold/foldgutter.js")));
dependencies.add(JavaScriptHeaderItem.forReference(new WebjarsJavaScriptResourceReference("codemirror/current/addon/fold/brace-fold.js")));
dependencies.add(JavaScriptHeaderItem.forReference(new WebjarsJavaScriptResourceReference("codemirror/current/addon/fold/xml-fold.js")));
dependencies.add(JavaScriptHeaderItem.forReference(new WebjarsJavaScriptResourceReference("codemirror/current/addon/fold/markdown-fold.js")));
dependencies.add(JavaScriptHeaderItem.forReference(new WebjarsJavaScriptResourceReference("codemirror/current/addon/fold/comment-fold.js")));
dependencies.add(JavaScriptHeaderItem.forReference(new WebjarsJavaScriptResourceReference("codemirror/current/addon/search/searchcursor.js")));
dependencies.add(JavaScriptHeaderItem.forReference(new WebjarsJavaScriptResourceReference("codemirror/current/addon/search/search.js")));
dependencies.add(JavaScriptHeaderItem.forReference(new WebjarsJavaScriptResourceReference("codemirror/current/addon/search/matchesonscrollbar.js")));
dependencies.add(JavaScriptHeaderItem.forReference(new JavaScriptResourceReference(CodeMirrorResourceReference.class, "lib/codemirror.js")));
dependencies.add(JavaScriptHeaderItem.forReference(new JavaScriptResourceReference(CodeMirrorResourceReference.class, "addon/mode/overlay.js")));
dependencies.add(JavaScriptHeaderItem.forReference(new JavaScriptResourceReference(CodeMirrorResourceReference.class, "addon/mode/simple.js")));
dependencies.add(JavaScriptHeaderItem.forReference(new JavaScriptResourceReference(CodeMirrorResourceReference.class, "addon/mode/multiplex.js")));
dependencies.add(JavaScriptHeaderItem.forReference(new JavaScriptResourceReference(CodeMirrorResourceReference.class, "addon/edit/matchbrackets.js")));
dependencies.add(JavaScriptHeaderItem.forReference(new JavaScriptResourceReference(CodeMirrorResourceReference.class, "addon/dialog/dialog.js")));
dependencies.add(JavaScriptHeaderItem.forReference(new JavaScriptResourceReference(CodeMirrorResourceReference.class, "addon/fold/foldcode.js")));
dependencies.add(JavaScriptHeaderItem.forReference(new JavaScriptResourceReference(CodeMirrorResourceReference.class, "addon/fold/foldgutter.js")));
dependencies.add(JavaScriptHeaderItem.forReference(new JavaScriptResourceReference(CodeMirrorResourceReference.class, "addon/fold/brace-fold.js")));
dependencies.add(JavaScriptHeaderItem.forReference(new JavaScriptResourceReference(CodeMirrorResourceReference.class, "addon/fold/xml-fold.js")));
dependencies.add(JavaScriptHeaderItem.forReference(new JavaScriptResourceReference(CodeMirrorResourceReference.class, "addon/fold/markdown-fold.js")));
dependencies.add(JavaScriptHeaderItem.forReference(new JavaScriptResourceReference(CodeMirrorResourceReference.class, "addon/fold/comment-fold.js")));
dependencies.add(JavaScriptHeaderItem.forReference(new JavaScriptResourceReference(CodeMirrorResourceReference.class, "addon/search/searchcursor.js")));
dependencies.add(JavaScriptHeaderItem.forReference(new JavaScriptResourceReference(CodeMirrorResourceReference.class, "addon/search/search.js")));
dependencies.add(JavaScriptHeaderItem.forReference(new JavaScriptResourceReference(CodeMirrorResourceReference.class, "addon/search/matchesonscrollbar.js")));
dependencies.add(JavaScriptHeaderItem.forReference(new BaseDependentResourceReference(CodeMirrorResourceReference.class, "matchesonscrollbar2.js")));
dependencies.add(JavaScriptHeaderItem.forReference(new WebjarsJavaScriptResourceReference("codemirror/current/addon/selection/active-line.js")));
dependencies.add(JavaScriptHeaderItem.forReference(new WebjarsJavaScriptResourceReference("codemirror/current/addon/scroll/annotatescrollbar.js")));
dependencies.add(JavaScriptHeaderItem.forReference(new WebjarsJavaScriptResourceReference("codemirror/current/addon/display/fullscreen.js")));
dependencies.add(JavaScriptHeaderItem.forReference(new WebjarsJavaScriptResourceReference("codemirror/current/addon/selection/mark-selection.js")));
dependencies.add(JavaScriptHeaderItem.forReference(new WebjarsJavaScriptResourceReference("codemirror/current/addon/hint/show-hint.js")));
dependencies.add(JavaScriptHeaderItem.forReference(new JavaScriptResourceReference(CodeMirrorResourceReference.class, "addon/selection/active-line.js")));
dependencies.add(JavaScriptHeaderItem.forReference(new JavaScriptResourceReference(CodeMirrorResourceReference.class, "addon/scroll/annotatescrollbar.js")));
dependencies.add(JavaScriptHeaderItem.forReference(new JavaScriptResourceReference(CodeMirrorResourceReference.class, "addon/display/fullscreen.js")));
dependencies.add(JavaScriptHeaderItem.forReference(new JavaScriptResourceReference(CodeMirrorResourceReference.class, "addon/selection/mark-selection.js")));
dependencies.add(JavaScriptHeaderItem.forReference(new JavaScriptResourceReference(CodeMirrorResourceReference.class, "addon/hint/show-hint.js")));
dependencies.add(JavaScriptHeaderItem.forReference(new BaseDependentResourceReference(CodeMirrorResourceReference.class, "annotatescrollbar2.js")));
dependencies.add(JavaScriptHeaderItem.forReference(new BaseDependentResourceReference(CodeMirrorResourceReference.class, "simplescrollbars.js")));
dependencies.add(JavaScriptHeaderItem.forReference(new BaseDependentResourceReference(CodeMirrorResourceReference.class, "gotoline.js")));
dependencies.add(JavaScriptHeaderItem.forReference(new BaseDependentResourceReference(CodeMirrorResourceReference.class, "identifier-highlighter.js")));
dependencies.add(JavaScriptHeaderItem.forReference(new BaseDependentResourceReference(CodeMirrorResourceReference.class, "loadmode.js")));
dependencies.add(JavaScriptHeaderItem.forReference(new WebjarsJavaScriptResourceReference("codemirror/current/mode/meta.js")));
dependencies.add(JavaScriptHeaderItem.forReference(new JavaScriptResourceReference(CodeMirrorResourceReference.class, "mode/meta.js")));
dependencies.add(JavaScriptHeaderItem.forReference(new ModeUrlResourceReference()));
dependencies.add(JavaScriptHeaderItem.forReference(new HotkeysResourceReference()));
dependencies.add(CssHeaderItem.forReference(new WebjarsCssResourceReference("codemirror/current/lib/codemirror.css")));
dependencies.add(CssHeaderItem.forReference(new WebjarsCssResourceReference("codemirror/current/theme/eclipse.css")));
dependencies.add(CssHeaderItem.forReference(new WebjarsCssResourceReference("codemirror/current/addon/dialog/dialog.css")));
dependencies.add(CssHeaderItem.forReference(new WebjarsCssResourceReference("codemirror/current/addon/fold/foldgutter.css")));
dependencies.add(CssHeaderItem.forReference(new WebjarsCssResourceReference("codemirror/current/addon/scroll/simplescrollbars.css")));
dependencies.add(CssHeaderItem.forReference(new WebjarsCssResourceReference("codemirror/current/addon/search/matchesonscrollbar.css")));
dependencies.add(CssHeaderItem.forReference(new WebjarsCssResourceReference("codemirror/current/addon/display/fullscreen.css")));
dependencies.add(CssHeaderItem.forReference(new WebjarsCssResourceReference("codemirror/current/addon/hint/show-hint.css")));
dependencies.add(CssHeaderItem.forReference(new BaseDependentCssResourceReference(CodeMirrorResourceReference.class, "codemirror.css")));
dependencies.add(CssHeaderItem.forReference(new CssResourceReference(CodeMirrorResourceReference.class, "lib/codemirror.css")));
dependencies.add(CssHeaderItem.forReference(new CssResourceReference(CodeMirrorResourceReference.class, "theme/eclipse.css")));
dependencies.add(CssHeaderItem.forReference(new CssResourceReference(CodeMirrorResourceReference.class, "addon/dialog/dialog.css")));
dependencies.add(CssHeaderItem.forReference(new CssResourceReference(CodeMirrorResourceReference.class, "addon/fold/foldgutter.css")));
dependencies.add(CssHeaderItem.forReference(new CssResourceReference(CodeMirrorResourceReference.class, "addon/scroll/simplescrollbars.css")));
dependencies.add(CssHeaderItem.forReference(new CssResourceReference(CodeMirrorResourceReference.class, "addon/search/matchesonscrollbar.css")));
dependencies.add(CssHeaderItem.forReference(new CssResourceReference(CodeMirrorResourceReference.class, "addon/display/fullscreen.css")));
dependencies.add(CssHeaderItem.forReference(new CssResourceReference(CodeMirrorResourceReference.class, "addon/hint/show-hint.css")));
dependencies.add(CssHeaderItem.forReference(new BaseDependentCssResourceReference(CodeMirrorResourceReference.class, "codemirror-custom.css")));
return dependencies;
}

View File

@ -0,0 +1,25 @@
package io.onedev.server.web.asset.codemirror;
import java.util.List;
import org.apache.wicket.markup.head.CssHeaderItem;
import org.apache.wicket.markup.head.HeaderItem;
import org.apache.wicket.request.resource.CssResourceReference;
public class CodeThemeCssResourceReference extends CssResourceReference {
private static final long serialVersionUID = 1L;
public CodeThemeCssResourceReference() {
super(CodeThemeCssResourceReference.class, "theme-custom.css");
}
@Override
public List<HeaderItem> getDependencies() {
List<HeaderItem> dependencies = super.getDependencies();
dependencies.add(CssHeaderItem.forReference(new CssResourceReference(
CodeThemeCssResourceReference.class, "theme/eclipse.css")));
return dependencies;
}
}

View File

@ -8,7 +8,6 @@ import org.apache.wicket.request.cycle.RequestCycle;
import org.apache.wicket.request.mapper.parameter.PageParameters;
import org.apache.wicket.request.resource.JavaScriptResourceReference;
import de.agilecoders.wicket.webjars.request.resource.WebjarsJavaScriptResourceReference;
import io.onedev.commons.utils.StringUtils;
public class ModeUrlResourceReference extends JavaScriptResourceReference {
@ -31,7 +30,7 @@ public class ModeUrlResourceReference extends JavaScriptResourceReference {
@Override
public List<HeaderItem> getDependencies() {
List<HeaderItem> dependencies = super.getDependencies();
WebjarsJavaScriptResourceReference metaReference = new WebjarsJavaScriptResourceReference("codemirror/current/mode/meta.js");
JavaScriptResourceReference metaReference = new JavaScriptResourceReference(ModeUrlResourceReference.class, "mode/meta.js");
String modeBase = StringUtils.substringBeforeLast(RequestCycle.get().urlFor(metaReference, new PageParameters()).toString(), "/");
dependencies.add(OnDomReadyHeaderItem.forScript("CodeMirror.modeURL = '" + modeBase + "/%N/%N.js';"));
return dependencies;

View File

@ -0,0 +1,206 @@
// CodeMirror, copyright (c) by Marijn Haverbeke and others
// Distributed under an MIT license: http://codemirror.net/LICENSE
(function(mod) {
if (typeof exports == "object" && typeof module == "object") // CommonJS
mod(require("../../lib/codemirror"));
else if (typeof define == "function" && define.amd) // AMD
define(["../../lib/codemirror"], mod);
else // Plain browser env
mod(CodeMirror);
})(function(CodeMirror) {
"use strict";
var noOptions = {};
var nonWS = /[^\s\u00a0]/;
var Pos = CodeMirror.Pos;
function firstNonWS(str) {
var found = str.search(nonWS);
return found == -1 ? 0 : found;
}
CodeMirror.commands.toggleComment = function(cm) {
cm.toggleComment();
};
CodeMirror.defineExtension("toggleComment", function(options) {
if (!options) options = noOptions;
var cm = this;
var minLine = Infinity, ranges = this.listSelections(), mode = null;
for (var i = ranges.length - 1; i >= 0; i--) {
var from = ranges[i].from(), to = ranges[i].to();
if (from.line >= minLine) continue;
if (to.line >= minLine) to = Pos(minLine, 0);
minLine = from.line;
if (mode == null) {
if (cm.uncomment(from, to, options)) mode = "un";
else { cm.lineComment(from, to, options); mode = "line"; }
} else if (mode == "un") {
cm.uncomment(from, to, options);
} else {
cm.lineComment(from, to, options);
}
}
});
// Rough heuristic to try and detect lines that are part of multi-line string
function probablyInsideString(cm, pos, line) {
return /\bstring\b/.test(cm.getTokenTypeAt(Pos(pos.line, 0))) && !/^[\'\"`]/.test(line)
}
CodeMirror.defineExtension("lineComment", function(from, to, options) {
if (!options) options = noOptions;
var self = this, mode = self.getModeAt(from);
var firstLine = self.getLine(from.line);
if (firstLine == null || probablyInsideString(self, from, firstLine)) return;
var commentString = options.lineComment || mode.lineComment;
if (!commentString) {
if (options.blockCommentStart || mode.blockCommentStart) {
options.fullLines = true;
self.blockComment(from, to, options);
}
return;
}
var end = Math.min(to.ch != 0 || to.line == from.line ? to.line + 1 : to.line, self.lastLine() + 1);
var pad = options.padding == null ? " " : options.padding;
var blankLines = options.commentBlankLines || from.line == to.line;
self.operation(function() {
if (options.indent) {
var baseString = null;
for (var i = from.line; i < end; ++i) {
var line = self.getLine(i);
var whitespace = line.slice(0, firstNonWS(line));
if (baseString == null || baseString.length > whitespace.length) {
baseString = whitespace;
}
}
for (var i = from.line; i < end; ++i) {
var line = self.getLine(i), cut = baseString.length;
if (!blankLines && !nonWS.test(line)) continue;
if (line.slice(0, cut) != baseString) cut = firstNonWS(line);
self.replaceRange(baseString + commentString + pad, Pos(i, 0), Pos(i, cut));
}
} else {
for (var i = from.line; i < end; ++i) {
if (blankLines || nonWS.test(self.getLine(i)))
self.replaceRange(commentString + pad, Pos(i, 0));
}
}
});
});
CodeMirror.defineExtension("blockComment", function(from, to, options) {
if (!options) options = noOptions;
var self = this, mode = self.getModeAt(from);
var startString = options.blockCommentStart || mode.blockCommentStart;
var endString = options.blockCommentEnd || mode.blockCommentEnd;
if (!startString || !endString) {
if ((options.lineComment || mode.lineComment) && options.fullLines != false)
self.lineComment(from, to, options);
return;
}
if (/\bcomment\b/.test(self.getTokenTypeAt(Pos(from.line, 0)))) return
var end = Math.min(to.line, self.lastLine());
if (end != from.line && to.ch == 0 && nonWS.test(self.getLine(end))) --end;
var pad = options.padding == null ? " " : options.padding;
if (from.line > end) return;
self.operation(function() {
if (options.fullLines != false) {
var lastLineHasText = nonWS.test(self.getLine(end));
self.replaceRange(pad + endString, Pos(end));
self.replaceRange(startString + pad, Pos(from.line, 0));
var lead = options.blockCommentLead || mode.blockCommentLead;
if (lead != null) for (var i = from.line + 1; i <= end; ++i)
if (i != end || lastLineHasText)
self.replaceRange(lead + pad, Pos(i, 0));
} else {
self.replaceRange(endString, to);
self.replaceRange(startString, from);
}
});
});
CodeMirror.defineExtension("uncomment", function(from, to, options) {
if (!options) options = noOptions;
var self = this, mode = self.getModeAt(from);
var end = Math.min(to.ch != 0 || to.line == from.line ? to.line : to.line - 1, self.lastLine()), start = Math.min(from.line, end);
// Try finding line comments
var lineString = options.lineComment || mode.lineComment, lines = [];
var pad = options.padding == null ? " " : options.padding, didSomething;
lineComment: {
if (!lineString) break lineComment;
for (var i = start; i <= end; ++i) {
var line = self.getLine(i);
var found = line.indexOf(lineString);
if (found > -1 && !/comment/.test(self.getTokenTypeAt(Pos(i, found + 1)))) found = -1;
if (found == -1 && nonWS.test(line)) break lineComment;
if (found > -1 && nonWS.test(line.slice(0, found))) break lineComment;
lines.push(line);
}
self.operation(function() {
for (var i = start; i <= end; ++i) {
var line = lines[i - start];
var pos = line.indexOf(lineString), endPos = pos + lineString.length;
if (pos < 0) continue;
if (line.slice(endPos, endPos + pad.length) == pad) endPos += pad.length;
didSomething = true;
self.replaceRange("", Pos(i, pos), Pos(i, endPos));
}
});
if (didSomething) return true;
}
// Try block comments
var startString = options.blockCommentStart || mode.blockCommentStart;
var endString = options.blockCommentEnd || mode.blockCommentEnd;
if (!startString || !endString) return false;
var lead = options.blockCommentLead || mode.blockCommentLead;
var startLine = self.getLine(start), open = startLine.indexOf(startString)
if (open == -1) return false
var endLine = end == start ? startLine : self.getLine(end)
var close = endLine.indexOf(endString, end == start ? open + startString.length : 0);
if (close == -1 && start != end) {
endLine = self.getLine(--end);
close = endLine.indexOf(endString);
}
if (close == -1 ||
!/comment/.test(self.getTokenTypeAt(Pos(start, open + 1))) ||
!/comment/.test(self.getTokenTypeAt(Pos(end, close + 1))))
return false;
// Avoid killing block comments completely outside the selection.
// Positions of the last startString before the start of the selection, and the first endString after it.
var lastStart = startLine.lastIndexOf(startString, from.ch);
var firstEnd = lastStart == -1 ? -1 : startLine.slice(0, from.ch).indexOf(endString, lastStart + startString.length);
if (lastStart != -1 && firstEnd != -1 && firstEnd + endString.length != from.ch) return false;
// Positions of the first endString after the end of the selection, and the last startString before it.
firstEnd = endLine.indexOf(endString, to.ch);
var almostLastStart = endLine.slice(to.ch).lastIndexOf(startString, firstEnd - to.ch);
lastStart = (firstEnd == -1 || almostLastStart == -1) ? -1 : to.ch + almostLastStart;
if (firstEnd != -1 && lastStart != -1 && lastStart != to.ch) return false;
self.operation(function() {
self.replaceRange("", Pos(end, close - (pad && endLine.slice(close - pad.length, close) == pad ? pad.length : 0)),
Pos(end, close + endString.length));
var openEnd = open + startString.length;
if (pad && startLine.slice(openEnd, openEnd + pad.length) == pad) openEnd += pad.length;
self.replaceRange("", Pos(start, open), Pos(start, openEnd));
if (lead) for (var i = start + 1; i <= end; ++i) {
var line = self.getLine(i), found = line.indexOf(lead);
if (found == -1 || nonWS.test(line.slice(0, found))) continue;
var foundEnd = found + lead.length;
if (pad && line.slice(foundEnd, foundEnd + pad.length) == pad) foundEnd += pad.length;
self.replaceRange("", Pos(i, found), Pos(i, foundEnd));
}
});
return true;
});
});

View File

@ -0,0 +1,85 @@
// CodeMirror, copyright (c) by Marijn Haverbeke and others
// Distributed under an MIT license: http://codemirror.net/LICENSE
(function(mod) {
if (typeof exports == "object" && typeof module == "object") // CommonJS
mod(require("../../lib/codemirror"));
else if (typeof define == "function" && define.amd) // AMD
define(["../../lib/codemirror"], mod);
else // Plain browser env
mod(CodeMirror);
})(function(CodeMirror) {
var modes = ["clike", "css", "javascript"];
for (var i = 0; i < modes.length; ++i)
CodeMirror.extendMode(modes[i], {blockCommentContinue: " * "});
function continueComment(cm) {
if (cm.getOption("disableInput")) return CodeMirror.Pass;
var ranges = cm.listSelections(), mode, inserts = [];
for (var i = 0; i < ranges.length; i++) {
var pos = ranges[i].head, token = cm.getTokenAt(pos);
if (token.type != "comment") return CodeMirror.Pass;
var modeHere = CodeMirror.innerMode(cm.getMode(), token.state).mode;
if (!mode) mode = modeHere;
else if (mode != modeHere) return CodeMirror.Pass;
var insert = null;
if (mode.blockCommentStart && mode.blockCommentContinue) {
var end = token.string.indexOf(mode.blockCommentEnd);
var full = cm.getRange(CodeMirror.Pos(pos.line, 0), CodeMirror.Pos(pos.line, token.end)), found;
if (end != -1 && end == token.string.length - mode.blockCommentEnd.length && pos.ch >= end) {
// Comment ended, don't continue it
} else if (token.string.indexOf(mode.blockCommentStart) == 0) {
insert = full.slice(0, token.start);
if (!/^\s*$/.test(insert)) {
insert = "";
for (var j = 0; j < token.start; ++j) insert += " ";
}
} else if ((found = full.indexOf(mode.blockCommentContinue)) != -1 &&
found + mode.blockCommentContinue.length > token.start &&
/^\s*$/.test(full.slice(0, found))) {
insert = full.slice(0, found);
}
if (insert != null) insert += mode.blockCommentContinue;
}
if (insert == null && mode.lineComment && continueLineCommentEnabled(cm)) {
var line = cm.getLine(pos.line), found = line.indexOf(mode.lineComment);
if (found > -1) {
insert = line.slice(0, found);
if (/\S/.test(insert)) insert = null;
else insert += mode.lineComment + line.slice(found + mode.lineComment.length).match(/^\s*/)[0];
}
}
if (insert == null) return CodeMirror.Pass;
inserts[i] = "\n" + insert;
}
cm.operation(function() {
for (var i = ranges.length - 1; i >= 0; i--)
cm.replaceRange(inserts[i], ranges[i].from(), ranges[i].to(), "+insert");
});
}
function continueLineCommentEnabled(cm) {
var opt = cm.getOption("continueComments");
if (opt && typeof opt == "object")
return opt.continueLineComment !== false;
return true;
}
CodeMirror.defineOption("continueComments", null, function(cm, val, prev) {
if (prev && prev != CodeMirror.Init)
cm.removeKeyMap("continueComment");
if (val) {
var key = "Enter";
if (typeof val == "string")
key = val;
else if (typeof val == "object" && val.key)
key = val.key;
var map = {name: "continueComment"};
map[key] = continueComment;
cm.addKeyMap(map);
}
});
});

View File

@ -0,0 +1,32 @@
.CodeMirror-dialog {
position: absolute;
left: 0; right: 0;
background: inherit;
z-index: 15;
padding: .1em .8em;
overflow: hidden;
color: inherit;
}
.CodeMirror-dialog-top {
border-bottom: 1px solid #eee;
top: 0;
}
.CodeMirror-dialog-bottom {
border-top: 1px solid #eee;
bottom: 0;
}
.CodeMirror-dialog input {
border: none;
outline: none;
background: transparent;
width: 20em;
color: inherit;
font-family: monospace;
}
.CodeMirror-dialog button {
font-size: 70%;
}

View File

@ -0,0 +1,157 @@
// CodeMirror, copyright (c) by Marijn Haverbeke and others
// Distributed under an MIT license: http://codemirror.net/LICENSE
// Open simple dialogs on top of an editor. Relies on dialog.css.
(function(mod) {
if (typeof exports == "object" && typeof module == "object") // CommonJS
mod(require("../../lib/codemirror"));
else if (typeof define == "function" && define.amd) // AMD
define(["../../lib/codemirror"], mod);
else // Plain browser env
mod(CodeMirror);
})(function(CodeMirror) {
function dialogDiv(cm, template, bottom) {
var wrap = cm.getWrapperElement();
var dialog;
dialog = wrap.appendChild(document.createElement("div"));
if (bottom)
dialog.className = "CodeMirror-dialog CodeMirror-dialog-bottom";
else
dialog.className = "CodeMirror-dialog CodeMirror-dialog-top";
if (typeof template == "string") {
dialog.innerHTML = template;
} else { // Assuming it's a detached DOM element.
dialog.appendChild(template);
}
return dialog;
}
function closeNotification(cm, newVal) {
if (cm.state.currentNotificationClose)
cm.state.currentNotificationClose();
cm.state.currentNotificationClose = newVal;
}
CodeMirror.defineExtension("openDialog", function(template, callback, options) {
if (!options) options = {};
closeNotification(this, null);
var dialog = dialogDiv(this, template, options.bottom);
var closed = false, me = this;
function close(newVal) {
if (typeof newVal == 'string') {
inp.value = newVal;
} else {
if (closed) return;
closed = true;
dialog.parentNode.removeChild(dialog);
me.focus();
if (options.onClose) options.onClose(dialog);
}
}
var inp = dialog.getElementsByTagName("input")[0], button;
if (inp) {
inp.focus();
if (options.value) {
inp.value = options.value;
if (options.selectValueOnOpen !== false) {
inp.select();
}
}
if (options.onInput)
CodeMirror.on(inp, "input", function(e) { options.onInput(e, inp.value, close);});
if (options.onKeyUp)
CodeMirror.on(inp, "keyup", function(e) {options.onKeyUp(e, inp.value, close);});
CodeMirror.on(inp, "keydown", function(e) {
if (options && options.onKeyDown && options.onKeyDown(e, inp.value, close)) { return; }
if (e.keyCode == 27 || (options.closeOnEnter !== false && e.keyCode == 13)) {
inp.blur();
CodeMirror.e_stop(e);
close();
}
if (e.keyCode == 13) callback(inp.value, e);
});
if (options.closeOnBlur !== false) CodeMirror.on(inp, "blur", close);
} else if (button = dialog.getElementsByTagName("button")[0]) {
CodeMirror.on(button, "click", function() {
close();
me.focus();
});
if (options.closeOnBlur !== false) CodeMirror.on(button, "blur", close);
button.focus();
}
return close;
});
CodeMirror.defineExtension("openConfirm", function(template, callbacks, options) {
closeNotification(this, null);
var dialog = dialogDiv(this, template, options && options.bottom);
var buttons = dialog.getElementsByTagName("button");
var closed = false, me = this, blurring = 1;
function close() {
if (closed) return;
closed = true;
dialog.parentNode.removeChild(dialog);
me.focus();
}
buttons[0].focus();
for (var i = 0; i < buttons.length; ++i) {
var b = buttons[i];
(function(callback) {
CodeMirror.on(b, "click", function(e) {
CodeMirror.e_preventDefault(e);
close();
if (callback) callback(me);
});
})(callbacks[i]);
CodeMirror.on(b, "blur", function() {
--blurring;
setTimeout(function() { if (blurring <= 0) close(); }, 200);
});
CodeMirror.on(b, "focus", function() { ++blurring; });
}
});
/*
* openNotification
* Opens a notification, that can be closed with an optional timer
* (default 5000ms timer) and always closes on click.
*
* If a notification is opened while another is opened, it will close the
* currently opened one and open the new one immediately.
*/
CodeMirror.defineExtension("openNotification", function(template, options) {
closeNotification(this, close);
var dialog = dialogDiv(this, template, options && options.bottom);
var closed = false, doneTimer;
var duration = options && typeof options.duration !== "undefined" ? options.duration : 5000;
function close() {
if (closed) return;
closed = true;
clearTimeout(doneTimer);
dialog.parentNode.removeChild(dialog);
}
CodeMirror.on(dialog, 'click', function(e) {
CodeMirror.e_preventDefault(e);
close();
});
if (duration)
doneTimer = setTimeout(close, duration);
return close;
});
});

View File

@ -0,0 +1,47 @@
// CodeMirror, copyright (c) by Marijn Haverbeke and others
// Distributed under an MIT license: http://codemirror.net/LICENSE
(function(mod) {
if (typeof exports == "object" && typeof module == "object") // CommonJS
mod(require("../../lib/codemirror"))
else if (typeof define == "function" && define.amd) // AMD
define(["../../lib/codemirror"], mod)
else // Plain browser env
mod(CodeMirror)
})(function(CodeMirror) {
"use strict"
CodeMirror.defineOption("autoRefresh", false, function(cm, val) {
if (cm.state.autoRefresh) {
stopListening(cm, cm.state.autoRefresh)
cm.state.autoRefresh = null
}
if (val && cm.display.wrapper.offsetHeight == 0)
startListening(cm, cm.state.autoRefresh = {delay: val.delay || 250})
})
function startListening(cm, state) {
function check() {
if (cm.display.wrapper.offsetHeight) {
stopListening(cm, state)
if (cm.display.lastWrapHeight != cm.display.wrapper.clientHeight)
cm.refresh()
} else {
state.timeout = setTimeout(check, state.delay)
}
}
state.timeout = setTimeout(check, state.delay)
state.hurry = function() {
clearTimeout(state.timeout)
state.timeout = setTimeout(check, 50)
}
CodeMirror.on(window, "mouseup", state.hurry)
CodeMirror.on(window, "keyup", state.hurry)
}
function stopListening(_cm, state) {
clearTimeout(state.timeout)
CodeMirror.off(window, "mouseup", state.hurry)
CodeMirror.off(window, "keyup", state.hurry)
}
});

View File

@ -0,0 +1,6 @@
.CodeMirror-fullscreen {
position: fixed;
top: 0; left: 0; right: 0; bottom: 0;
height: auto;
z-index: 9;
}

Some files were not shown because too many files have changed in this diff Show More