Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,8 @@

import org.zstack.header.message.MessageReply;

import java.util.Map;

public class GetFileDownloadProgressReply extends MessageReply {
private boolean completed;
private int progress;
Expand All @@ -13,6 +15,8 @@ public class GetFileDownloadProgressReply extends MessageReply {
private long lastOpTime;
private boolean supportSuspend;
private String md5sum;
private String unzipInstallPath;
private Map<String, Long> unzipFiles;

public boolean isCompleted() {
return completed;
Expand Down Expand Up @@ -85,4 +89,20 @@ public String getMd5sum() {
public void setMd5sum(String md5sum) {
this.md5sum = md5sum;
}

public String getUnzipInstallPath() {
return unzipInstallPath;
}

public void setUnzipInstallPath(String unzipInstallPath) {
this.unzipInstallPath = unzipInstallPath;
}

public Map<String, Long> getUnzipFiles() {
return unzipFiles;
}

public void setUnzipFiles(Map<String, Long> unzipFiles) {
this.unzipFiles = unzipFiles;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
package org.zstack.header.image;

import org.zstack.header.message.NeedReplyMessage;
import org.zstack.header.storage.backup.BackupStorageMessage;

import java.util.List;

public class DeleteFilesOnBackupStorageHostMsg extends NeedReplyMessage implements BackupStorageMessage {
private String backupStorageUuid;
private List<String> filesPath;

@Override
public String getBackupStorageUuid() {
return backupStorageUuid;
}

public void setBackupStorageUuid(String backupStorageUuid) {
this.backupStorageUuid = backupStorageUuid;
}

public List<String> getFilesPath() {
return filesPath;
}

public void setFilesPath(List<String> filesPath) {
this.filesPath = filesPath;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,55 @@
package org.zstack.header.image;

import org.zstack.header.log.NoLogging;
import org.zstack.header.message.MessageReply;

import java.util.Map;

public class DeleteFilesOnBackupStorageHostReply extends MessageReply {
private String md5sum;
private long size;
@NoLogging(type = NoLogging.Type.Uri)
private String directUploadUrl;
private String unzipInstallPath;
private Map<String, Long> filesSize;

public String getMd5sum() {
return md5sum;
}

public void setMd5sum(String md5sum) {
this.md5sum = md5sum;
}

public long getSize() {
return size;
}

public void setSize(long size) {
this.size = size;
}

public String getDirectUploadUrl() {
return directUploadUrl;
}

public void setDirectUploadUrl(String directUploadUrl) {
this.directUploadUrl = directUploadUrl;
}

public String getUnzipInstallPath() {
return unzipInstallPath;
}

public void setUnzipInstallPath(String unzipInstallPath) {
this.unzipInstallPath = unzipInstallPath;
}

public Map<String, Long> getFilesSize() {
return filesSize;
}

public void setFilesSize(Map<String, Long> filesSize) {
this.filesSize = filesSize;
}
}
Comment on lines +8 to +55
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟠 Major

Reply 类字段设计与删除操作语义不符。

DeleteFilesOnBackupStorageHostReply 包含 md5sumsizedirectUploadUrlunzipInstallPathfilesSize 等字段,这些通常用于上传/下载操作的响应,与删除操作的语义不匹配。

结合 CephBackupStorageBase 中的处理器使用了错误的类型(UploadFileToBackupStorageHostReply),建议重新审视此类的设计:

  • 如果删除操作确实需要返回这些信息,请在代码中添加注释说明原因
  • 如果是误用,建议简化为仅包含删除结果相关的字段
简化后的删除响应类示例
public class DeleteFilesOnBackupStorageHostReply extends MessageReply {
    // 删除操作通常只需要知道是否成功,错误信息由父类 MessageReply 处理
    // 如有必要,可添加已删除文件列表等信息
    private List<String> deletedFiles;

    public List<String> getDeletedFiles() {
        return deletedFiles;
    }

    public void setDeletedFiles(List<String> deletedFiles) {
        this.deletedFiles = deletedFiles;
    }
}

Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
package org.zstack.header.image;

import org.zstack.header.log.NoLogging;
import org.zstack.header.message.NeedReplyMessage;
import org.zstack.header.storage.backup.BackupStorageMessage;

public class UploadFileToBackupStorageHostMsg extends NeedReplyMessage implements BackupStorageMessage {
private String backupStorageUuid;
private String taskUuid;
@NoLogging(type = NoLogging.Type.Uri)
private String url;
private String installPath;

@Override
public String getBackupStorageUuid() {
return backupStorageUuid;
}

public void setBackupStorageUuid(String backupStorageUuid) {
this.backupStorageUuid = backupStorageUuid;
}

public String getTaskUuid() {
return taskUuid;
}

public void setTaskUuid(String taskUuid) {
this.taskUuid = taskUuid;
}

public String getUrl() {
return url;
}

public void setUrl(String url) {
this.url = url;
}

public String getInstallPath() {
return installPath;
}

public void setInstallPath(String installPath) {
this.installPath = installPath;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,93 @@
package org.zstack.header.image;

import org.zstack.header.log.NoLogging;
import org.zstack.header.message.MessageReply;

import java.util.Map;

public class UploadFileToBackupStorageHostReply extends MessageReply {
private String md5sum;
private long size;
@NoLogging(type = NoLogging.Type.Uri)
private String directUploadUrl;
private String unzipInstallPath;
private Map<String, Long> filesSize;

private String hostname;
private String sshUsername;
@NoLogging
private String sshPassword;
private Integer sshPort;
Comment on lines +16 to +20
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟡 Minor

🧩 Analysis chain

🏁 Script executed:

#!/bin/bash
# First, find and examine the UploadFileToBackupStorageHostReply.java file
fd -n "UploadFileToBackupStorageHostReply.java" --type f

Repository: MatheMatrix/zstack

Length of output: 292


🏁 Script executed:

#!/bin/bash
# Examine the file content
cat -n "header/src/main/java/org/zstack/header/image/UploadFileToBackupStorageHostReply.java"

Repository: MatheMatrix/zstack

Length of output: 2770


🏁 Script executed:

#!/bin/bash
# Search for other Reply classes that contain SSH credentials
rg -n "sshPassword|sshUsername" --type=java -g '*Reply.java' -C2

Repository: MatheMatrix/zstack

Length of output: 2660


🏁 Script executed:

#!/bin/bash
# Search for where UploadFileToBackupStorageHostReply is used/instantiated
rg -n "UploadFileToBackupStorageHostReply" --type=java -C2

Repository: MatheMatrix/zstack

Length of output: 2018


🏁 Script executed:

#!/bin/bash
# Check if other sensitive credentials appear in Reply classes
rg -n "@NoLogging" --type=java -g '*Reply.java' -B2 -A2 | head -100

Repository: MatheMatrix/zstack

Length of output: 5979


sshUsername 字段添加 @NoLogging 注解

sshUsername 字段是敏感凭证信息,与已标注 @NoLoggingsshPassword 字段一致,应该同样添加注解以防止用户名被记录到日志中。

建议的修改:

private String sshUsername;

改为:

`@NoLogging`
private String sshUsername;
🤖 Prompt for AI Agents
In
`@header/src/main/java/org/zstack/header/image/UploadFileToBackupStorageHostReply.java`
around lines 16 - 20, The field sshUsername in
UploadFileToBackupStorageHostReply is missing the `@NoLogging` annotation like
sshPassword; add the `@NoLogging` annotation to the sshUsername field declaration
so the username is treated as sensitive and omitted from logs, ensuring
consistency with the existing `@NoLogging` on sshPassword.


public String getMd5sum() {
return md5sum;
}

public void setMd5sum(String md5sum) {
this.md5sum = md5sum;
}

public long getSize() {
return size;
}

public void setSize(long size) {
this.size = size;
}

public String getDirectUploadUrl() {
return directUploadUrl;
}

public void setDirectUploadUrl(String directUploadUrl) {
this.directUploadUrl = directUploadUrl;
}

public String getUnzipInstallPath() {
return unzipInstallPath;
}

public void setUnzipInstallPath(String unzipInstallPath) {
this.unzipInstallPath = unzipInstallPath;
}

public Map<String, Long> getFilesSize() {
return filesSize;
}

public void setFilesSize(Map<String, Long> filesSize) {
this.filesSize = filesSize;
}

public String getHostname() {
return hostname;
}

public void setHostname(String hostname) {
this.hostname = hostname;
}

public String getSshUsername() {
return sshUsername;
}

public void setSshUsername(String sshUsername) {
this.sshUsername = sshUsername;
}

public String getSshPassword() {
return sshPassword;
}

public void setSshPassword(String sshPassword) {
this.sshPassword = sshPassword;
}

public Integer getSshPort() {
return sshPort;
}

public void setSshPort(Integer sshPort) {
this.sshPort = sshPort;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
package org.zstack.header.storage.backup;

import org.zstack.header.message.NeedReplyMessage;

public class GetFileDownloadProgressMsg extends NeedReplyMessage implements BackupStorageMessage {
private String backupStorageUuid;
private String taskUuid;
private String hostname;

@Override
public String getBackupStorageUuid() {
return backupStorageUuid;
}

public void setBackupStorageUuid(String backupStorageUuid) {
this.backupStorageUuid = backupStorageUuid;
}

public String getTaskUuid() {
return taskUuid;
}

public void setTaskUuid(String taskUuid) {
this.taskUuid = taskUuid;
}

public String getHostname() {
return hostname;
}

public void setHostname(String hostname) {
this.hostname = hostname;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,92 @@
package org.zstack.header.storage.backup;

import org.zstack.header.message.MessageReply;

public class GetFileDownloadProgressReply extends MessageReply {
private boolean completed;
private int progress;

private long size;
private long actualSize;
private long downloadSize;
private String installPath;
private String format;
private long lastOpTime;
private boolean supportSuspend;
Comment on lines +5 to +15
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🔴 Critical

缺少 md5sum 字段。

CephBackupStorageBase.java 第 2171 行调用了 reply.setMd5sum(rsp.md5sum),但此类未定义 md5sum 字段,会导致编译错误。

🔎 建议添加 md5sum 字段
 public class GetFileDownloadProgressReply extends MessageReply {
     private boolean completed;
     private int progress;
 
     private long size;
     private long actualSize;
     private long downloadSize;
     private String installPath;
     private String format;
     private long lastOpTime;
     private boolean supportSuspend;
+    private String md5sum;
+
+    public String getMd5sum() {
+        return md5sum;
+    }
+
+    public void setMd5sum(String md5sum) {
+        this.md5sum = md5sum;
+    }
🤖 Prompt for AI Agents
In
header/src/main/java/org/zstack/header/storage/backup/GetFileDownloadProgressReply.java
around lines 5 to 15, the class is missing the md5sum field referenced by
CephBackupStorageBase at line 2171; add a private String md5sum field and
provide its public getter and setter (getMd5sum and setMd5sum) so the
reply.setMd5sum(...) call compiles correctly and follows existing Java bean
style used in this class.


public boolean isCompleted() {
return completed;
}

public void setCompleted(boolean completed) {
this.completed = completed;
}

public int getProgress() {
return progress;
}

public void setProgress(int progress) {
this.progress = progress;
}

public long getSize() {
return size;
}

public void setSize(long size) {
this.size = size;
}

public long getActualSize() {
return actualSize;
}

public void setActualSize(long actualSize) {
this.actualSize = actualSize;
}

public boolean isDownloadComplete() {
return actualSize > 0 && actualSize == downloadSize;
}

public String getInstallPath() {
return installPath;
}

public void setInstallPath(String installPath) {
this.installPath = installPath;
}

public String getFormat() {
return format;
}

public void setFormat(String format) {
this.format = format;
}

public long getLastOpTime() {
return lastOpTime;
}

public void setLastOpTime(long lastOpTime) {
this.lastOpTime = lastOpTime;
}

public long getDownloadSize() {
return downloadSize;
}

public void setDownloadSize(long downloadSize) {
this.downloadSize = downloadSize;
}

public boolean isSupportSuspend() {
return supportSuspend;
}

public void setSupportSuspend(boolean supportSuspend) {
this.supportSuspend = supportSuspend;
}
}
Loading