zzz / frontend /src /state /security-analyzer-slice.ts
ar08's picture
Upload 1040 files
246d201 verified
import { createSlice } from "@reduxjs/toolkit";
export enum ActionSecurityRisk {
UNKNOWN = -1,
LOW = 0,
MEDIUM = 1,
HIGH = 2,
}
export type SecurityAnalyzerLog = {
id: number;
content: string;
security_risk: ActionSecurityRisk;
confirmation_state?: "awaiting_confirmation" | "confirmed" | "rejected";
confirmed_changed: boolean;
};
const initialLogs: SecurityAnalyzerLog[] = [];
export const securityAnalyzerSlice = createSlice({
name: "securityAnalyzer",
initialState: {
logs: initialLogs,
},
reducers: {
appendSecurityAnalyzerInput: (state, action) => {
const log = {
id: action.payload.id,
content:
action.payload.args.command ||
action.payload.args.code ||
action.payload.args.content ||
action.payload.message,
security_risk: action.payload.args.security_risk as ActionSecurityRisk,
confirmation_state: action.payload.args.confirmation_state,
confirmed_changed: false,
};
const existingLog = state.logs.find(
(stateLog) =>
stateLog.id === log.id ||
(stateLog.confirmation_state === "awaiting_confirmation" &&
stateLog.content === log.content),
);
if (existingLog) {
if (existingLog.confirmation_state !== log.confirmation_state) {
existingLog.confirmation_state = log.confirmation_state;
existingLog.confirmed_changed = true;
}
} else {
state.logs.push(log);
}
},
},
});
export const { appendSecurityAnalyzerInput } = securityAnalyzerSlice.actions;
export default securityAnalyzerSlice.reducer;