Branch name validation
This commit is contained in:
parent
84e39af7c7
commit
36743eb5af
@ -53,6 +53,7 @@ import org.thingsboard.server.common.data.sms.config.TestSmsRequest;
|
||||
import org.thingsboard.server.common.data.sync.vc.AutoCommitSettings;
|
||||
import org.thingsboard.server.common.data.sync.vc.RepositorySettings;
|
||||
import org.thingsboard.server.common.data.sync.vc.RepositorySettingsInfo;
|
||||
import org.thingsboard.server.common.data.sync.vc.VcUtils;
|
||||
import org.thingsboard.server.dao.settings.AdminSettingsService;
|
||||
import org.thingsboard.server.queue.util.TbCoreComponent;
|
||||
import org.thingsboard.server.service.security.auth.jwt.settings.JwtSettingsService;
|
||||
@ -307,6 +308,7 @@ public class AdminController extends BaseController {
|
||||
@PreAuthorize("hasAuthority('TENANT_ADMIN')")
|
||||
@PostMapping("/autoCommitSettings")
|
||||
public AutoCommitSettings saveAutoCommitSettings(@RequestBody AutoCommitSettings settings) throws ThingsboardException {
|
||||
settings.values().forEach(config -> VcUtils.checkBranchName(config.getBranch()));
|
||||
accessControlService.checkPermission(getCurrentUser(), Resource.VERSION_CONTROL, Operation.WRITE);
|
||||
return autoCommitSettingsService.save(getTenantId(), settings);
|
||||
}
|
||||
|
||||
@ -22,6 +22,7 @@ import com.google.common.util.concurrent.MoreExecutors;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import lombok.SneakyThrows;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.springframework.beans.factory.annotation.Value;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.transaction.support.TransactionTemplate;
|
||||
@ -32,7 +33,6 @@ import org.thingsboard.common.util.ThingsBoardExecutors;
|
||||
import org.thingsboard.server.cache.TbTransactionalCache;
|
||||
import org.thingsboard.server.common.data.EntityType;
|
||||
import org.thingsboard.server.common.data.ExportableEntity;
|
||||
import org.thingsboard.server.common.data.StringUtils;
|
||||
import org.thingsboard.server.common.data.User;
|
||||
import org.thingsboard.server.common.data.audit.ActionType;
|
||||
import org.thingsboard.server.common.data.exception.ThingsboardErrorCode;
|
||||
@ -101,6 +101,7 @@ import java.util.function.Function;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
import static com.google.common.util.concurrent.Futures.transform;
|
||||
import static org.thingsboard.server.common.data.sync.vc.VcUtils.checkBranchName;
|
||||
|
||||
@Service
|
||||
@TbCoreComponent
|
||||
@ -138,6 +139,7 @@ public class DefaultEntitiesVersionControlService implements EntitiesVersionCont
|
||||
@SuppressWarnings("UnstableApiUsage")
|
||||
@Override
|
||||
public ListenableFuture<UUID> saveEntitiesVersion(User user, VersionCreateRequest request) throws Exception {
|
||||
checkBranchName(request.getBranch());
|
||||
var pendingCommit = gitServiceQueue.prepareCommit(user, request);
|
||||
DonAsynchron.withCallback(pendingCommit, commit -> {
|
||||
cachePut(commit.getTxId(), new VersionCreationResult());
|
||||
@ -504,6 +506,7 @@ public class DefaultEntitiesVersionControlService implements EntitiesVersionCont
|
||||
|
||||
@Override
|
||||
public ListenableFuture<RepositorySettings> saveVersionControlSettings(TenantId tenantId, RepositorySettings versionControlSettings) {
|
||||
checkBranchName(versionControlSettings.getDefaultBranch());
|
||||
var restoredSettings = this.repositorySettingsService.restore(tenantId, versionControlSettings);
|
||||
try {
|
||||
var future = gitServiceQueue.initRepository(tenantId, restoredSettings);
|
||||
@ -525,6 +528,7 @@ public class DefaultEntitiesVersionControlService implements EntitiesVersionCont
|
||||
|
||||
@Override
|
||||
public ListenableFuture<Void> checkVersionControlAccess(TenantId tenantId, RepositorySettings settings) throws ThingsboardException {
|
||||
checkBranchName(settings.getDefaultBranch());
|
||||
settings = this.repositorySettingsService.restore(tenantId, settings);
|
||||
try {
|
||||
return gitServiceQueue.testRepository(tenantId, settings);
|
||||
|
||||
@ -0,0 +1,35 @@
|
||||
/**
|
||||
* Copyright © 2016-2023 The Thingsboard Authors
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package org.thingsboard.server.common.data.sync.vc;
|
||||
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
|
||||
public class VcUtils {
|
||||
|
||||
private VcUtils() {}
|
||||
|
||||
public static void checkBranchName(String branch) {
|
||||
if (StringUtils.isEmpty(branch)) return;
|
||||
|
||||
boolean invalid = StringUtils.containsWhitespace(branch) ||
|
||||
StringUtils.containsAny(branch, "..", "~", "^", ":", "\\") ||
|
||||
StringUtils.endsWithAny(branch, "/", ".lock");
|
||||
if (invalid) {
|
||||
throw new IllegalArgumentException("Branch name is invalid");
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
Loading…
x
Reference in New Issue
Block a user