Skip to content

Commit

Permalink
[frontend/backend] file markings added on content tab, file markings …
Browse files Browse the repository at this point in the history
…required remove from upload forms (Ã#5823)
  • Loading branch information
ValentinBouzinFiligran committed Apr 24, 2024
1 parent 8dc115b commit f40f982
Show file tree
Hide file tree
Showing 8 changed files with 34 additions and 27 deletions.
Original file line number Diff line number Diff line change
@@ -1,4 +1,3 @@
import * as Yup from 'yup';
import { Formik } from 'formik';
import Dialog from '@mui/material/Dialog';
import DialogTitle from '@mui/material/DialogTitle';
Expand All @@ -21,10 +20,6 @@ export type SubmittedMarkingsType = {
fileMarkings: Option[];
};

const fileImportMarkingSelectionFormValidation = (t: (arg: string) => string) => Yup.object().shape({
fileMarkings: Yup.array().min(1, t('This field is required')).required(t('This field is required')),
});

const FileImportMarkingSelectionPopup = ({ closePopup, handleUpload, isOpen }: FileImportMarkingSelectionPopupProps) => {
const { t_i18n } = useFormatter();

Expand All @@ -42,7 +37,6 @@ const FileImportMarkingSelectionPopup = ({ closePopup, handleUpload, isOpen }: F
fileMarkings: [],
}}
onSubmit={handleSubmit}
validationSchema={fileImportMarkingSelectionFormValidation(t_i18n)}
>
{({ resetForm, submitForm }) => (
<Dialog open={isOpen} fullWidth={true} PaperProps={{ elevation: 1 }} onClose={() => {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ import { FileUploaderGlobalMutation$data } from './__generated__/FileUploaderGlo
import FileImportMarkingSelectionPopup from './FileImportMarkingSelectionPopup';

const fileUploaderGlobalMutation = graphql`
mutation FileUploaderGlobalMutation($file: Upload!, $fileMarkings: [String]!) {
mutation FileUploaderGlobalMutation($file: Upload!, $fileMarkings: [String]) {
uploadImport(file: $file, fileMarkings: $fileMarkings) {
id
...FileLine_file
Expand All @@ -21,7 +21,7 @@ const fileUploaderGlobalMutation = graphql`
`;

const fileUploaderEntityMutation = graphql`
mutation FileUploaderEntityMutation($id: ID!, $file: Upload!, $fileMarkings: [String]!) {
mutation FileUploaderEntityMutation($id: ID!, $file: Upload!, $fileMarkings: [String]) {
stixCoreObjectEdit(id: $id) {
importPush(file: $file, fileMarkings: $fileMarkings) {
id
Expand Down Expand Up @@ -57,7 +57,6 @@ const FileUploader: FunctionComponent<FileUploaderProps> = ({
nameInCallback,
}) => {
const { t_i18n } = useFormatter();

const uploadRef = useRef<HTMLInputElement | null>(null);
const [upload, setUpload] = useState<string | null>(null);
const [selectedFile, setSelectedFile] = useState<File>();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,15 +20,15 @@ import { now } from '../../../../utils/Time';
import { isValidStixBundle } from '../../../../utils/String';

const freeTextUploaderGlobalMutation = graphql`
mutation FreeTextUploaderGlobalMutation($file: Upload!, $fileMarkings: [String]!) {
mutation FreeTextUploaderGlobalMutation($file: Upload!, $fileMarkings: [String]) {
uploadImport(file: $file, fileMarkings: $fileMarkings) {
...FileLine_file
}
}
`;

const freeTextUploaderEntityMutation = graphql`
mutation FreeTextUploaderEntityMutation($id: ID!, $file: Upload!, $fileMarkings: [String]!) {
mutation FreeTextUploaderEntityMutation($id: ID!, $file: Upload!, $fileMarkings: [String]) {
stixCoreObjectEdit(id: $id) {
importPush(file: $file, fileMarkings: $fileMarkings) {
...FileLine_file
Expand All @@ -39,7 +39,6 @@ const freeTextUploaderEntityMutation = graphql`

const freeTextValidation = (t: (arg: string) => string) => Yup.object().shape({
content: Yup.string().required(t('This field is required')),
fileMarkings: Yup.array().min(1, t('This field is required')).required(t('This field is required')),
});

type FreeTextUploaderType = {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@ import ListItemButton from '@mui/material/ListItemButton';
import Typography from '@mui/material/Typography';
import MenuItem from '@mui/material/MenuItem';
import ListItemSecondaryAction from '@mui/material/ListItemSecondaryAction';
import ObjectMarkingField from '@components/common/form/ObjectMarkingField';
import inject18n from '../../../../components/i18n';
import FileUploader from '../files/FileUploader';
import { FileLineDeleteMutation } from '../files/FileLine';
Expand Down Expand Up @@ -52,10 +53,11 @@ export const stixDomainObjectContentFilesUploadStixDomainObjectMutation = graphq
mutation StixDomainObjectContentFilesUploadStixDomainObjectMutation(
$id: ID!
$file: Upload!
$fileMarkings: [String]
$noTriggerImport: Boolean
) {
stixDomainObjectEdit(id: $id) {
importPush(file: $file, noTriggerImport: $noTriggerImport) {
importPush(file: $file, noTriggerImport: $noTriggerImport, fileMarkings: $fileMarkings) {
id
name
uploadStatus
Expand Down Expand Up @@ -154,9 +156,12 @@ class StixDomainObjectContentFiles extends Component {
const file = new File([blob], name, {
type,
});

const fileMarkings = values.fileMarkings.map(({ value }) => value);

commitMutation({
mutation: stixDomainObjectContentFilesUploadStixDomainObjectMutation,
variables: { file, id: stixDomainObjectId },
variables: { file, id: stixDomainObjectId, fileMarkings },
setSubmitting,
onCompleted: (result) => {
setSubmitting(false);
Expand Down Expand Up @@ -184,6 +189,7 @@ class StixDomainObjectContentFiles extends Component {
}

render() {
console.log('StixDomainObjectContentFiles');
const {
classes,
t,
Expand Down Expand Up @@ -289,12 +295,12 @@ class StixDomainObjectContentFiles extends Component {
</List>
<Formik
enableReinitialize={true}
initialValues={{ name: '', type: 'text/html' }}
initialValues={{ name: '', type: 'text/html', fileMarkings: [] }}
validationSchema={fileValidation(t)}
onSubmit={this.onSubmit.bind(this)}
onReset={this.onReset.bind(this)}
>
{({ submitForm, handleReset, isSubmitting }) => (
{({ submitForm, handleReset, isSubmitting, setFieldValue }) => (
<Form>
<Dialog
PaperProps={{ elevation: 1 }}
Expand Down Expand Up @@ -323,6 +329,13 @@ class StixDomainObjectContentFiles extends Component {
<MenuItem value="text/markdown">{t('Markdown')}</MenuItem>
<MenuItem value="text/plain">{t('Text')}</MenuItem>
</Field>
<ObjectMarkingField
label={t('File marking definition levels')}
name="fileMarkings"
style={fieldSpacingContainerStyle}
onChange={() => {}}
setFieldValue={setFieldValue}
/>
</DialogContent>
<DialogActions>
<Button onClick={handleReset} disabled={isSubmitting}>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7730,7 +7730,7 @@ type StixCoreObjectEditMutations {
restrictionOrganizationAdd(organizationId: ID!): StixCoreObject
restrictionOrganizationDelete(organizationId: ID!): StixCoreObject
askEnrichment(connectorId: ID!): Work
importPush(file: Upload!, fileMarkings: [String]!, version: DateTime, noTriggerImport: Boolean): File
importPush(file: Upload!, fileMarkings: [String], version: DateTime, noTriggerImport: Boolean): File
exportAsk(input: ExportAskInput!): [File!]
exportPush(file: Upload!): Boolean
}
Expand All @@ -7751,7 +7751,7 @@ type StixDomainObjectEditMutations {
relationAdd(input: StixRefRelationshipAddInput!): StixRefRelationship
relationsAdd(input: StixRefRelationshipsAddInput!): StixDomainObject
relationDelete(toId: StixRef!, relationship_type: String): StixDomainObject
importPush(file: Upload!, version: DateTime, noTriggerImport: Boolean): File
importPush(file: Upload!, fileMarkings: [String], version: DateTime, noTriggerImport: Boolean): File
exportAsk(input: ExportAskInput!): [File!]
exportPush(file: Upload!, file_markings: [String]!): Boolean
stixDomainObjectFileEdit(input: StixDomainObjectFileEditInput): StixDomainObject
Expand Down Expand Up @@ -8025,7 +8025,7 @@ type StixRefRelationshipEditMutations {

type Mutation {
deleteImport(fileName: String): ID
uploadImport(file: Upload!, fileMarkings: [String]!): File
uploadImport(file: Upload!, fileMarkings: [String]): File
uploadPending(file: Upload!, entityId: String, labels: [String], errorOnExisting: Boolean): File
askJobImport(fileName: ID!, connectorId: String, configuration: String, bypassEntityId: String, bypassValidation: Boolean): File
resetFileIndexing: Boolean
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12344,7 +12344,7 @@ type StixCoreObjectEditMutations {
restrictionOrganizationAdd(organizationId: ID!): StixCoreObject @auth(for: [KNOWLEDGE_KNUPDATE_KNORGARESTRICT])
restrictionOrganizationDelete(organizationId: ID!): StixCoreObject @auth(for: [KNOWLEDGE_KNUPDATE_KNORGARESTRICT])
askEnrichment(connectorId: ID!): Work @auth(for: [KNOWLEDGE_KNENRICHMENT])
importPush(file: Upload!, fileMarkings: [String]!, version: DateTime, noTriggerImport: Boolean): File @auth(for: [KNOWLEDGE_KNUPLOAD])
importPush(file: Upload!, fileMarkings: [String], version: DateTime, noTriggerImport: Boolean): File @auth(for: [KNOWLEDGE_KNUPLOAD])
exportAsk(input: ExportAskInput!): [File!] @auth(for: [KNOWLEDGE_KNGETEXPORT_KNASKEXPORT])
exportPush(file: Upload!): Boolean @auth(for: [CONNECTORAPI])
}
Expand All @@ -12368,7 +12368,7 @@ type StixDomainObjectEditMutations {
relationAdd(input: StixRefRelationshipAddInput!): StixRefRelationship @auth(for: [KNOWLEDGE_KNUPDATE])
relationsAdd(input: StixRefRelationshipsAddInput!): StixDomainObject @auth(for: [KNOWLEDGE_KNUPDATE])
relationDelete(toId: StixRef!, relationship_type: String): StixDomainObject @auth(for: [KNOWLEDGE_KNUPDATE])
importPush(file: Upload!, version: DateTime, noTriggerImport: Boolean): File @auth(for: [KNOWLEDGE_KNUPLOAD])
importPush(file: Upload!, fileMarkings: [String], version: DateTime, noTriggerImport: Boolean): File @auth(for: [KNOWLEDGE_KNUPLOAD])
exportAsk(input: ExportAskInput!): [File!]
@auth(for: [KNOWLEDGE_KNGETEXPORT_KNASKEXPORT])
exportPush(file: Upload!, file_markings: [String]!): Boolean @auth(for: [CONNECTORAPI])
Expand Down Expand Up @@ -12651,7 +12651,7 @@ type StixRefRelationshipEditMutations {
type Mutation {
###### INTERNAL
deleteImport(fileName: String): ID @auth(for: [KNOWLEDGE_KNASKIMPORT])
uploadImport(file: Upload!, fileMarkings: [String]!): File @auth(for: [KNOWLEDGE_KNASKIMPORT])
uploadImport(file: Upload!, fileMarkings: [String]): File @auth(for: [KNOWLEDGE_KNASKIMPORT])
uploadPending(file: Upload!, entityId: String, labels: [String], errorOnExisting: Boolean): File @auth(for: [KNOWLEDGE_KNASKIMPORT])
askJobImport(fileName: ID!, connectorId: String, configuration: String, bypassEntityId: String, bypassValidation: Boolean): File
@auth(for: [KNOWLEDGE_KNASKIMPORT])
Expand Down
3 changes: 2 additions & 1 deletion opencti-platform/opencti-graphql/src/database/middleware.js
Original file line number Diff line number Diff line change
Expand Up @@ -3117,7 +3117,8 @@ const buildEntityData = async (context, user, input, type, opts = {}) => {
// If file directly attached
if (!isEmptyField(input.file)) {
const path = `import/${type}/${internalId}`;
const { upload: file } = await upload(context, user, path, input.file, { entity: data });
const file_markings = input.objectMarking.map(({ id }) => id);
const { upload: file } = await upload(context, user, path, input.file, { entity: data, file_markings });
data.x_opencti_files = [storeFileConverter(user, file)];
// Add external references from files if necessary
const entitySetting = await getEntitySettingFromCache(context, type);
Expand Down
9 changes: 5 additions & 4 deletions opencti-platform/opencti-graphql/src/generated/graphql.ts
Original file line number Diff line number Diff line change
Expand Up @@ -14499,7 +14499,7 @@ export type MutationTriggerKnowledgeLiveAddArgs = {

export type MutationUploadImportArgs = {
file: Scalars['Upload']['input'];
fileMarkings: Array<InputMaybe<Scalars['String']['input']>>;
fileMarkings?: InputMaybe<Array<InputMaybe<Scalars['String']['input']>>>;
};


Expand Down Expand Up @@ -22147,7 +22147,7 @@ export type StixCoreObjectEditMutationsExportPushArgs = {

export type StixCoreObjectEditMutationsImportPushArgs = {
file: Scalars['Upload']['input'];
fileMarkings: Array<InputMaybe<Scalars['String']['input']>>;
fileMarkings?: InputMaybe<Array<InputMaybe<Scalars['String']['input']>>>;
noTriggerImport?: InputMaybe<Scalars['Boolean']['input']>;
version?: InputMaybe<Scalars['DateTime']['input']>;
};
Expand Down Expand Up @@ -23060,6 +23060,7 @@ export type StixDomainObjectEditMutationsFieldPatchArgs = {

export type StixDomainObjectEditMutationsImportPushArgs = {
file: Scalars['Upload']['input'];
fileMarkings?: InputMaybe<Array<InputMaybe<Scalars['String']['input']>>>;
noTriggerImport?: InputMaybe<Scalars['Boolean']['input']>;
version?: InputMaybe<Scalars['DateTime']['input']>;
};
Expand Down Expand Up @@ -34391,7 +34392,7 @@ export type MutationResolvers<ContextType = any, ParentType extends ResolversPar
triggerKnowledgeDigestAdd?: Resolver<Maybe<ResolversTypes['Trigger']>, ParentType, ContextType, RequireFields<MutationTriggerKnowledgeDigestAddArgs, 'input'>>;
triggerKnowledgeFieldPatch?: Resolver<Maybe<ResolversTypes['Trigger']>, ParentType, ContextType, RequireFields<MutationTriggerKnowledgeFieldPatchArgs, 'id' | 'input'>>;
triggerKnowledgeLiveAdd?: Resolver<Maybe<ResolversTypes['Trigger']>, ParentType, ContextType, RequireFields<MutationTriggerKnowledgeLiveAddArgs, 'input'>>;
uploadImport?: Resolver<Maybe<ResolversTypes['File']>, ParentType, ContextType, RequireFields<MutationUploadImportArgs, 'file' | 'fileMarkings'>>;
uploadImport?: Resolver<Maybe<ResolversTypes['File']>, ParentType, ContextType, RequireFields<MutationUploadImportArgs, 'file'>>;
uploadPending?: Resolver<Maybe<ResolversTypes['File']>, ParentType, ContextType, RequireFields<MutationUploadPendingArgs, 'file'>>;
userAdd?: Resolver<Maybe<ResolversTypes['User']>, ParentType, ContextType, RequireFields<MutationUserAddArgs, 'input'>>;
userEdit?: Resolver<Maybe<ResolversTypes['UserEditMutations']>, ParentType, ContextType, RequireFields<MutationUserEditArgs, 'id'>>;
Expand Down Expand Up @@ -36458,7 +36459,7 @@ export type StixCoreObjectEditMutationsResolvers<ContextType = any, ParentType e
delete?: Resolver<Maybe<ResolversTypes['ID']>, ParentType, ContextType>;
exportAsk?: Resolver<Maybe<Array<ResolversTypes['File']>>, ParentType, ContextType, RequireFields<StixCoreObjectEditMutationsExportAskArgs, 'input'>>;
exportPush?: Resolver<Maybe<ResolversTypes['Boolean']>, ParentType, ContextType, RequireFields<StixCoreObjectEditMutationsExportPushArgs, 'file'>>;
importPush?: Resolver<Maybe<ResolversTypes['File']>, ParentType, ContextType, RequireFields<StixCoreObjectEditMutationsImportPushArgs, 'file' | 'fileMarkings'>>;
importPush?: Resolver<Maybe<ResolversTypes['File']>, ParentType, ContextType, RequireFields<StixCoreObjectEditMutationsImportPushArgs, 'file'>>;
relationAdd?: Resolver<Maybe<ResolversTypes['StixRefRelationship']>, ParentType, ContextType, RequireFields<StixCoreObjectEditMutationsRelationAddArgs, 'input'>>;
relationDelete?: Resolver<Maybe<ResolversTypes['StixCoreObject']>, ParentType, ContextType, RequireFields<StixCoreObjectEditMutationsRelationDeleteArgs, 'relationship_type' | 'toId'>>;
relationsAdd?: Resolver<Maybe<ResolversTypes['StixCoreObject']>, ParentType, ContextType, RequireFields<StixCoreObjectEditMutationsRelationsAddArgs, 'input'>>;
Expand Down

0 comments on commit f40f982

Please sign in to comment.