├── .dockerignore
├── .editorconfig
├── .envs
└── .local
│ ├── .django
│ ├── .keycloak
│ └── .postgres
├── .gitattributes
├── .github
├── CODE_OF_CONDUCT.md
├── CONTRIBUTORS.txt
├── FUNDING.yml
├── SECURITY.md
├── codeql
│ └── codeql-config.yml
├── dependabot.yml
└── workflows
│ ├── ci.yml
│ └── codeql.yml
├── .gitignore
├── .pre-commit-config.yaml
├── .pylintrc
├── .readthedocs.yml
├── COPYING.md
├── LICENSE.md
├── README.md
├── colander
├── __init__.py
├── conftest.py
├── contrib
│ ├── __init__.py
│ └── sites
│ │ ├── __init__.py
│ │ └── migrations
│ │ ├── 0001_initial.py
│ │ ├── 0002_alter_domain_unique.py
│ │ ├── 0003_set_site_domain_and_name.py
│ │ ├── 0004_alter_options_ordering_domain.py
│ │ └── __init__.py
├── core
│ ├── __init__.py
│ ├── admin.py
│ ├── api
│ │ ├── __init__.py
│ │ ├── security.py
│ │ ├── serializers.py
│ │ └── views.py
│ ├── apps.py
│ ├── artifact_utils.py
│ ├── crons.py
│ ├── datasets.py
│ ├── es_utils.py
│ ├── exporters
│ │ ├── __init__.py
│ │ ├── csv.py
│ │ ├── json.py
│ │ └── stix2.py
│ ├── forms
│ │ ├── __init__.py
│ │ └── widgets.py
│ ├── graph
│ │ ├── __init__.py
│ │ ├── serializers.py
│ │ └── views.py
│ ├── management
│ │ ├── __init__.py
│ │ └── commands
│ │ │ ├── __init__.py
│ │ │ ├── data
│ │ │ ├── actor_types.json
│ │ │ ├── artifact_types.json
│ │ │ ├── data_fragment_types.json
│ │ │ ├── detection_rule_types.json
│ │ │ ├── device_types.json
│ │ │ ├── event_types.json
│ │ │ ├── observable_types.json
│ │ │ └── threat_types.json
│ │ │ ├── fix_contributor_id.py
│ │ │ ├── fix_entity_relations.py
│ │ │ └── insert_default_data.py
│ ├── middlewares.py
│ ├── migrations
│ │ ├── 0001_initial.py
│ │ ├── 0002_auto_20230217_1713.py
│ │ ├── 0003_auto_20230217_1727.py
│ │ ├── 0004_auto_20230217_1728.py
│ │ ├── 0005_auto_20230217_1747.py
│ │ ├── 0006_auto_20230221_1301.py
│ │ ├── 0007_alter_entityrelation_updated_at.py
│ │ ├── 0008_pirogueexperiment_aes_trace.py
│ │ ├── 0009_entityrelation_attributes.py
│ │ ├── 0010_backendcredentials.py
│ │ ├── 0011_auto_20230409_1113.py
│ │ ├── 0012_alter_detectionrule_targeted_observables.py
│ │ ├── 0013_alter_case_documentation.py
│ │ ├── 0014_uploadrequest.py
│ │ ├── 0015_alter_artifact_file.py
│ │ ├── 0016_uploadrequest_target_artifact_id.py
│ │ ├── 0017_auto_20230420_0859.py
│ │ ├── 0018_auto_20230420_1134.py
│ │ ├── 0019_auto_20230421_1311.py
│ │ ├── 0020_colanderteam_name.py
│ │ ├── 0021_auto_20230502_1339.py
│ │ ├── 0022_case_shared_with.py
│ │ ├── 0023_auto_20230502_1401.py
│ │ ├── 0024_alter_colanderteam_name.py
│ │ ├── 0025_auto_20230601_0823.py
│ │ ├── 0026_alter_detectionruleoutgoingfeed_content_type.py
│ │ ├── 0027_alter_detectionruleoutgoingfeed_content_type.py
│ │ ├── 0028_alter_entityoutgoingfeed_content_type.py
│ │ ├── 0029_alter_entityoutgoingfeed_content_type.py
│ │ ├── 0030_auto_20230601_0919.py
│ │ ├── 0031_auto_20230601_0929.py
│ │ ├── 0032_alter_detectionruleoutgoingfeed_content_type.py
│ │ ├── 0033_alter_detectionruleoutgoingfeed_content_type.py
│ │ ├── 0034_auto_20230602_0857.py
│ │ ├── 0035_auto_20230603_0729.py
│ │ ├── 0036_datafragment_datafragmenttype.py
│ │ ├── 0037_case_overrides.py
│ │ ├── 0038_alter_case_description.py
│ │ ├── 0039_auto_20230918_1354.py
│ │ ├── 0040_auto_20230918_1357.py
│ │ ├── 0041_alter_event_involved_observables.py
│ │ ├── 0042_alter_artifact_attributes_alter_device_attributes_and_more.py
│ │ ├── 0043_actortype_default_attributes_and_more.py
│ │ ├── 0044_droppedfile.py
│ │ ├── 0045_droppedfile_filename_droppedfile_name.py
│ │ ├── 0046_actortype_type_hints_artifacttype_type_hints_and_more.py
│ │ ├── 0047_alter_actortype_type_hints_and_more.py
│ │ ├── 0048_droppedfile_target_artifact_id.py
│ │ ├── 0049_droppedfile_mime_type.py
│ │ ├── 0050_alter_entity_source_url.py
│ │ ├── 0051_subgraph.py
│ │ ├── 0052_entity_thumbnail.py
│ │ ├── 0053_alter_entity_thumbnail.py
│ │ ├── 0054_alter_case_parent_case_alter_entity_thumbnail_and_more.py
│ │ └── __init__.py
│ ├── models.py
│ ├── observable_enrichment.py
│ ├── observable_tasks.py
│ ├── rest
│ │ ├── __init__.py
│ │ ├── commons.py
│ │ ├── serializers.py
│ │ └── views.py
│ ├── scarlet_utils.py
│ ├── serializers
│ │ ├── __init__.py
│ │ ├── generic.py
│ │ └── upload_request_serializers.py
│ ├── signals.py
│ ├── tasks
│ │ ├── __init__.py
│ │ ├── artifact_tasks.py
│ │ ├── experiment_tasks.py
│ │ └── experiment_to_har.py
│ ├── templatetags
│ │ ├── __init__.py
│ │ └── colander_tags.py
│ ├── tests
│ │ ├── __init__.py
│ │ └── security
│ │ │ ├── __init__.py
│ │ │ ├── test_collect.py
│ │ │ └── test_teams.py
│ ├── threatr.py
│ ├── utils.py
│ └── views
│ │ ├── __init__.py
│ │ ├── actor_views.py
│ │ ├── artifact_views.py
│ │ ├── collaborate_views.py
│ │ ├── comment_views.py
│ │ ├── data_fragment_views.py
│ │ ├── detection_rule_views.py
│ │ ├── device_views.py
│ │ ├── documentation_views.py
│ │ ├── dropped_files_views.py
│ │ ├── enrich_view.py
│ │ ├── event_views.py
│ │ ├── experiment_views.py
│ │ ├── graph_views.py
│ │ ├── investigate_views.py
│ │ ├── obversable_views.py
│ │ ├── outgoing_feeds_views.py
│ │ ├── relation_views.py
│ │ ├── status_views.py
│ │ ├── subgraphs_views.py
│ │ ├── threat_views.py
│ │ ├── threatr_proxy.py
│ │ ├── upload_views.py
│ │ └── views.py
├── frontend
│ ├── README.md
│ ├── colander-dgraph
│ │ ├── default-settings.js
│ │ └── utils.js
│ ├── colander-vue-components
│ │ ├── ArtifactUploader.vue
│ │ ├── ConfirmButton.vue
│ │ ├── DocumentationPane.vue
│ │ ├── DropfileTriage.vue
│ │ ├── DynamicTypeSelector.vue
│ │ ├── GeoMap.vue
│ │ ├── GraphEditor.vue
│ │ ├── HStoreTable.vue
│ │ ├── InvestigateView.vue
│ │ ├── Suggester.vue
│ │ ├── ThumbnailInputField.vue
│ │ ├── ToolbarSearch.vue
│ │ ├── graph-editor
│ │ │ ├── EntitiesTablePane.vue
│ │ │ ├── EntityEditPane.vue
│ │ │ ├── EntityOverviewPane.vue
│ │ │ ├── RelationEditPane.vue
│ │ │ ├── SubgraphCreationPane.vue
│ │ │ ├── engine.js
│ │ │ └── refs
│ │ │ │ ├── default-style.js
│ │ │ │ ├── functional-styles.js
│ │ │ │ └── graph-templates.js
│ │ ├── importers
│ │ │ └── CsvImporter.vue
│ │ └── legacy
│ │ │ └── file_upload.js
│ ├── colander-widgets
│ │ ├── cache.js
│ │ └── index.js
│ ├── colander
│ │ ├── index.js
│ │ ├── legacy
│ │ │ ├── async-codemirror.js
│ │ │ ├── colander-text-editor.js
│ │ │ └── project.js
│ │ ├── plugins
│ │ │ ├── Cache.js
│ │ │ ├── EventBus.js
│ │ │ ├── Logger.js
│ │ │ └── i18n.js
│ │ └── theme-preset.js
│ └── scss
│ │ ├── _custom_bootstrap_variables.scss
│ │ ├── _graph-context-menu.scss
│ │ ├── graph.scss
│ │ ├── primevue
│ │ └── _primevue_variables.scss
│ │ └── project.scss
├── static
│ ├── css
│ │ ├── flag-icons.min.css
│ │ ├── fork-awesome.min.css
│ │ └── nf.min.css
│ ├── flags
│ │ ├── 1x1
│ │ │ ├── ac.svg
│ │ │ ├── ad.svg
│ │ │ ├── ae.svg
│ │ │ ├── af.svg
│ │ │ ├── ag.svg
│ │ │ ├── ai.svg
│ │ │ ├── al.svg
│ │ │ ├── am.svg
│ │ │ ├── ao.svg
│ │ │ ├── aq.svg
│ │ │ ├── ar.svg
│ │ │ ├── as.svg
│ │ │ ├── at.svg
│ │ │ ├── au.svg
│ │ │ ├── aw.svg
│ │ │ ├── ax.svg
│ │ │ ├── az.svg
│ │ │ ├── ba.svg
│ │ │ ├── bb.svg
│ │ │ ├── bd.svg
│ │ │ ├── be.svg
│ │ │ ├── bf.svg
│ │ │ ├── bg.svg
│ │ │ ├── bh.svg
│ │ │ ├── bi.svg
│ │ │ ├── bj.svg
│ │ │ ├── bl.svg
│ │ │ ├── bm.svg
│ │ │ ├── bn.svg
│ │ │ ├── bo.svg
│ │ │ ├── bq.svg
│ │ │ ├── br.svg
│ │ │ ├── bs.svg
│ │ │ ├── bt.svg
│ │ │ ├── bv.svg
│ │ │ ├── bw.svg
│ │ │ ├── by.svg
│ │ │ ├── bz.svg
│ │ │ ├── ca.svg
│ │ │ ├── cc.svg
│ │ │ ├── cd.svg
│ │ │ ├── cefta.svg
│ │ │ ├── cf.svg
│ │ │ ├── cg.svg
│ │ │ ├── ch.svg
│ │ │ ├── ci.svg
│ │ │ ├── ck.svg
│ │ │ ├── cl.svg
│ │ │ ├── cm.svg
│ │ │ ├── cn.svg
│ │ │ ├── co.svg
│ │ │ ├── cp.svg
│ │ │ ├── cr.svg
│ │ │ ├── cu.svg
│ │ │ ├── cv.svg
│ │ │ ├── cw.svg
│ │ │ ├── cx.svg
│ │ │ ├── cy.svg
│ │ │ ├── cz.svg
│ │ │ ├── de.svg
│ │ │ ├── dg.svg
│ │ │ ├── dj.svg
│ │ │ ├── dk.svg
│ │ │ ├── dm.svg
│ │ │ ├── do.svg
│ │ │ ├── dz.svg
│ │ │ ├── ea.svg
│ │ │ ├── ec.svg
│ │ │ ├── ee.svg
│ │ │ ├── eg.svg
│ │ │ ├── eh.svg
│ │ │ ├── er.svg
│ │ │ ├── es-ct.svg
│ │ │ ├── es-ga.svg
│ │ │ ├── es-pv.svg
│ │ │ ├── es.svg
│ │ │ ├── et.svg
│ │ │ ├── eu.svg
│ │ │ ├── fi.svg
│ │ │ ├── fj.svg
│ │ │ ├── fk.svg
│ │ │ ├── fm.svg
│ │ │ ├── fo.svg
│ │ │ ├── fr.svg
│ │ │ ├── ga.svg
│ │ │ ├── gb-eng.svg
│ │ │ ├── gb-nir.svg
│ │ │ ├── gb-sct.svg
│ │ │ ├── gb-wls.svg
│ │ │ ├── gb.svg
│ │ │ ├── gd.svg
│ │ │ ├── ge.svg
│ │ │ ├── gf.svg
│ │ │ ├── gg.svg
│ │ │ ├── gh.svg
│ │ │ ├── gi.svg
│ │ │ ├── gl.svg
│ │ │ ├── gm.svg
│ │ │ ├── gn.svg
│ │ │ ├── gp.svg
│ │ │ ├── gq.svg
│ │ │ ├── gr.svg
│ │ │ ├── gs.svg
│ │ │ ├── gt.svg
│ │ │ ├── gu.svg
│ │ │ ├── gw.svg
│ │ │ ├── gy.svg
│ │ │ ├── hk.svg
│ │ │ ├── hm.svg
│ │ │ ├── hn.svg
│ │ │ ├── hr.svg
│ │ │ ├── ht.svg
│ │ │ ├── hu.svg
│ │ │ ├── ic.svg
│ │ │ ├── id.svg
│ │ │ ├── ie.svg
│ │ │ ├── il.svg
│ │ │ ├── im.svg
│ │ │ ├── in.svg
│ │ │ ├── io.svg
│ │ │ ├── iq.svg
│ │ │ ├── ir.svg
│ │ │ ├── is.svg
│ │ │ ├── it.svg
│ │ │ ├── je.svg
│ │ │ ├── jm.svg
│ │ │ ├── jo.svg
│ │ │ ├── jp.svg
│ │ │ ├── ke.svg
│ │ │ ├── kg.svg
│ │ │ ├── kh.svg
│ │ │ ├── ki.svg
│ │ │ ├── km.svg
│ │ │ ├── kn.svg
│ │ │ ├── kp.svg
│ │ │ ├── kr.svg
│ │ │ ├── kw.svg
│ │ │ ├── ky.svg
│ │ │ ├── kz.svg
│ │ │ ├── la.svg
│ │ │ ├── lb.svg
│ │ │ ├── lc.svg
│ │ │ ├── li.svg
│ │ │ ├── lk.svg
│ │ │ ├── lr.svg
│ │ │ ├── ls.svg
│ │ │ ├── lt.svg
│ │ │ ├── lu.svg
│ │ │ ├── lv.svg
│ │ │ ├── ly.svg
│ │ │ ├── ma.svg
│ │ │ ├── mc.svg
│ │ │ ├── md.svg
│ │ │ ├── me.svg
│ │ │ ├── mf.svg
│ │ │ ├── mg.svg
│ │ │ ├── mh.svg
│ │ │ ├── mk.svg
│ │ │ ├── ml.svg
│ │ │ ├── mm.svg
│ │ │ ├── mn.svg
│ │ │ ├── mo.svg
│ │ │ ├── mp.svg
│ │ │ ├── mq.svg
│ │ │ ├── mr.svg
│ │ │ ├── ms.svg
│ │ │ ├── mt.svg
│ │ │ ├── mu.svg
│ │ │ ├── mv.svg
│ │ │ ├── mw.svg
│ │ │ ├── mx.svg
│ │ │ ├── my.svg
│ │ │ ├── mz.svg
│ │ │ ├── na.svg
│ │ │ ├── nc.svg
│ │ │ ├── ne.svg
│ │ │ ├── nf.svg
│ │ │ ├── ng.svg
│ │ │ ├── ni.svg
│ │ │ ├── nl.svg
│ │ │ ├── no.svg
│ │ │ ├── np.svg
│ │ │ ├── nr.svg
│ │ │ ├── nu.svg
│ │ │ ├── nz.svg
│ │ │ ├── om.svg
│ │ │ ├── pa.svg
│ │ │ ├── pe.svg
│ │ │ ├── pf.svg
│ │ │ ├── pg.svg
│ │ │ ├── ph.svg
│ │ │ ├── pk.svg
│ │ │ ├── pl.svg
│ │ │ ├── pm.svg
│ │ │ ├── pn.svg
│ │ │ ├── pr.svg
│ │ │ ├── ps.svg
│ │ │ ├── pt.svg
│ │ │ ├── pw.svg
│ │ │ ├── py.svg
│ │ │ ├── qa.svg
│ │ │ ├── re.svg
│ │ │ ├── ro.svg
│ │ │ ├── rs.svg
│ │ │ ├── ru.svg
│ │ │ ├── rw.svg
│ │ │ ├── sa.svg
│ │ │ ├── sb.svg
│ │ │ ├── sc.svg
│ │ │ ├── sd.svg
│ │ │ ├── se.svg
│ │ │ ├── sg.svg
│ │ │ ├── sh.svg
│ │ │ ├── si.svg
│ │ │ ├── sj.svg
│ │ │ ├── sk.svg
│ │ │ ├── sl.svg
│ │ │ ├── sm.svg
│ │ │ ├── sn.svg
│ │ │ ├── so.svg
│ │ │ ├── sr.svg
│ │ │ ├── ss.svg
│ │ │ ├── st.svg
│ │ │ ├── sv.svg
│ │ │ ├── sx.svg
│ │ │ ├── sy.svg
│ │ │ ├── sz.svg
│ │ │ ├── ta.svg
│ │ │ ├── tc.svg
│ │ │ ├── td.svg
│ │ │ ├── tf.svg
│ │ │ ├── tg.svg
│ │ │ ├── th.svg
│ │ │ ├── tj.svg
│ │ │ ├── tk.svg
│ │ │ ├── tl.svg
│ │ │ ├── tm.svg
│ │ │ ├── tn.svg
│ │ │ ├── to.svg
│ │ │ ├── tr.svg
│ │ │ ├── tt.svg
│ │ │ ├── tv.svg
│ │ │ ├── tw.svg
│ │ │ ├── tz.svg
│ │ │ ├── ua.svg
│ │ │ ├── ug.svg
│ │ │ ├── um.svg
│ │ │ ├── un.svg
│ │ │ ├── us.svg
│ │ │ ├── uy.svg
│ │ │ ├── uz.svg
│ │ │ ├── va.svg
│ │ │ ├── vc.svg
│ │ │ ├── ve.svg
│ │ │ ├── vg.svg
│ │ │ ├── vi.svg
│ │ │ ├── vn.svg
│ │ │ ├── vu.svg
│ │ │ ├── wf.svg
│ │ │ ├── ws.svg
│ │ │ ├── xk.svg
│ │ │ ├── xx.svg
│ │ │ ├── ye.svg
│ │ │ ├── yt.svg
│ │ │ ├── za.svg
│ │ │ ├── zm.svg
│ │ │ └── zw.svg
│ │ └── 4x3
│ │ │ ├── ac.svg
│ │ │ ├── ad.svg
│ │ │ ├── ae.svg
│ │ │ ├── af.svg
│ │ │ ├── ag.svg
│ │ │ ├── ai.svg
│ │ │ ├── al.svg
│ │ │ ├── am.svg
│ │ │ ├── ao.svg
│ │ │ ├── aq.svg
│ │ │ ├── ar.svg
│ │ │ ├── as.svg
│ │ │ ├── at.svg
│ │ │ ├── au.svg
│ │ │ ├── aw.svg
│ │ │ ├── ax.svg
│ │ │ ├── az.svg
│ │ │ ├── ba.svg
│ │ │ ├── bb.svg
│ │ │ ├── bd.svg
│ │ │ ├── be.svg
│ │ │ ├── bf.svg
│ │ │ ├── bg.svg
│ │ │ ├── bh.svg
│ │ │ ├── bi.svg
│ │ │ ├── bj.svg
│ │ │ ├── bl.svg
│ │ │ ├── bm.svg
│ │ │ ├── bn.svg
│ │ │ ├── bo.svg
│ │ │ ├── bq.svg
│ │ │ ├── br.svg
│ │ │ ├── bs.svg
│ │ │ ├── bt.svg
│ │ │ ├── bv.svg
│ │ │ ├── bw.svg
│ │ │ ├── by.svg
│ │ │ ├── bz.svg
│ │ │ ├── ca.svg
│ │ │ ├── cc.svg
│ │ │ ├── cd.svg
│ │ │ ├── cefta.svg
│ │ │ ├── cf.svg
│ │ │ ├── cg.svg
│ │ │ ├── ch.svg
│ │ │ ├── ci.svg
│ │ │ ├── ck.svg
│ │ │ ├── cl.svg
│ │ │ ├── cm.svg
│ │ │ ├── cn.svg
│ │ │ ├── co.svg
│ │ │ ├── cp.svg
│ │ │ ├── cr.svg
│ │ │ ├── cu.svg
│ │ │ ├── cv.svg
│ │ │ ├── cw.svg
│ │ │ ├── cx.svg
│ │ │ ├── cy.svg
│ │ │ ├── cz.svg
│ │ │ ├── de.svg
│ │ │ ├── dg.svg
│ │ │ ├── dj.svg
│ │ │ ├── dk.svg
│ │ │ ├── dm.svg
│ │ │ ├── do.svg
│ │ │ ├── dz.svg
│ │ │ ├── ea.svg
│ │ │ ├── ec.svg
│ │ │ ├── ee.svg
│ │ │ ├── eg.svg
│ │ │ ├── eh.svg
│ │ │ ├── er.svg
│ │ │ ├── es-ct.svg
│ │ │ ├── es-ga.svg
│ │ │ ├── es-pv.svg
│ │ │ ├── es.svg
│ │ │ ├── et.svg
│ │ │ ├── eu.svg
│ │ │ ├── fi.svg
│ │ │ ├── fj.svg
│ │ │ ├── fk.svg
│ │ │ ├── fm.svg
│ │ │ ├── fo.svg
│ │ │ ├── fr.svg
│ │ │ ├── ga.svg
│ │ │ ├── gb-eng.svg
│ │ │ ├── gb-nir.svg
│ │ │ ├── gb-sct.svg
│ │ │ ├── gb-wls.svg
│ │ │ ├── gb.svg
│ │ │ ├── gd.svg
│ │ │ ├── ge.svg
│ │ │ ├── gf.svg
│ │ │ ├── gg.svg
│ │ │ ├── gh.svg
│ │ │ ├── gi.svg
│ │ │ ├── gl.svg
│ │ │ ├── gm.svg
│ │ │ ├── gn.svg
│ │ │ ├── gp.svg
│ │ │ ├── gq.svg
│ │ │ ├── gr.svg
│ │ │ ├── gs.svg
│ │ │ ├── gt.svg
│ │ │ ├── gu.svg
│ │ │ ├── gw.svg
│ │ │ ├── gy.svg
│ │ │ ├── hk.svg
│ │ │ ├── hm.svg
│ │ │ ├── hn.svg
│ │ │ ├── hr.svg
│ │ │ ├── ht.svg
│ │ │ ├── hu.svg
│ │ │ ├── ic.svg
│ │ │ ├── id.svg
│ │ │ ├── ie.svg
│ │ │ ├── il.svg
│ │ │ ├── im.svg
│ │ │ ├── in.svg
│ │ │ ├── io.svg
│ │ │ ├── iq.svg
│ │ │ ├── ir.svg
│ │ │ ├── is.svg
│ │ │ ├── it.svg
│ │ │ ├── je.svg
│ │ │ ├── jm.svg
│ │ │ ├── jo.svg
│ │ │ ├── jp.svg
│ │ │ ├── ke.svg
│ │ │ ├── kg.svg
│ │ │ ├── kh.svg
│ │ │ ├── ki.svg
│ │ │ ├── km.svg
│ │ │ ├── kn.svg
│ │ │ ├── kp.svg
│ │ │ ├── kr.svg
│ │ │ ├── kw.svg
│ │ │ ├── ky.svg
│ │ │ ├── kz.svg
│ │ │ ├── la.svg
│ │ │ ├── lb.svg
│ │ │ ├── lc.svg
│ │ │ ├── li.svg
│ │ │ ├── lk.svg
│ │ │ ├── lr.svg
│ │ │ ├── ls.svg
│ │ │ ├── lt.svg
│ │ │ ├── lu.svg
│ │ │ ├── lv.svg
│ │ │ ├── ly.svg
│ │ │ ├── ma.svg
│ │ │ ├── mc.svg
│ │ │ ├── md.svg
│ │ │ ├── me.svg
│ │ │ ├── mf.svg
│ │ │ ├── mg.svg
│ │ │ ├── mh.svg
│ │ │ ├── mk.svg
│ │ │ ├── ml.svg
│ │ │ ├── mm.svg
│ │ │ ├── mn.svg
│ │ │ ├── mo.svg
│ │ │ ├── mp.svg
│ │ │ ├── mq.svg
│ │ │ ├── mr.svg
│ │ │ ├── ms.svg
│ │ │ ├── mt.svg
│ │ │ ├── mu.svg
│ │ │ ├── mv.svg
│ │ │ ├── mw.svg
│ │ │ ├── mx.svg
│ │ │ ├── my.svg
│ │ │ ├── mz.svg
│ │ │ ├── na.svg
│ │ │ ├── nc.svg
│ │ │ ├── ne.svg
│ │ │ ├── nf.svg
│ │ │ ├── ng.svg
│ │ │ ├── ni.svg
│ │ │ ├── nl.svg
│ │ │ ├── no.svg
│ │ │ ├── np.svg
│ │ │ ├── nr.svg
│ │ │ ├── nu.svg
│ │ │ ├── nz.svg
│ │ │ ├── om.svg
│ │ │ ├── pa.svg
│ │ │ ├── pe.svg
│ │ │ ├── pf.svg
│ │ │ ├── pg.svg
│ │ │ ├── ph.svg
│ │ │ ├── pk.svg
│ │ │ ├── pl.svg
│ │ │ ├── pm.svg
│ │ │ ├── pn.svg
│ │ │ ├── pr.svg
│ │ │ ├── ps.svg
│ │ │ ├── pt.svg
│ │ │ ├── pw.svg
│ │ │ ├── py.svg
│ │ │ ├── qa.svg
│ │ │ ├── re.svg
│ │ │ ├── ro.svg
│ │ │ ├── rs.svg
│ │ │ ├── ru.svg
│ │ │ ├── rw.svg
│ │ │ ├── sa.svg
│ │ │ ├── sb.svg
│ │ │ ├── sc.svg
│ │ │ ├── sd.svg
│ │ │ ├── se.svg
│ │ │ ├── sg.svg
│ │ │ ├── sh.svg
│ │ │ ├── si.svg
│ │ │ ├── sj.svg
│ │ │ ├── sk.svg
│ │ │ ├── sl.svg
│ │ │ ├── sm.svg
│ │ │ ├── sn.svg
│ │ │ ├── so.svg
│ │ │ ├── sr.svg
│ │ │ ├── ss.svg
│ │ │ ├── st.svg
│ │ │ ├── sv.svg
│ │ │ ├── sx.svg
│ │ │ ├── sy.svg
│ │ │ ├── sz.svg
│ │ │ ├── ta.svg
│ │ │ ├── tc.svg
│ │ │ ├── td.svg
│ │ │ ├── tf.svg
│ │ │ ├── tg.svg
│ │ │ ├── th.svg
│ │ │ ├── tj.svg
│ │ │ ├── tk.svg
│ │ │ ├── tl.svg
│ │ │ ├── tm.svg
│ │ │ ├── tn.svg
│ │ │ ├── to.svg
│ │ │ ├── tr.svg
│ │ │ ├── tt.svg
│ │ │ ├── tv.svg
│ │ │ ├── tw.svg
│ │ │ ├── tz.svg
│ │ │ ├── ua.svg
│ │ │ ├── ug.svg
│ │ │ ├── um.svg
│ │ │ ├── un.svg
│ │ │ ├── us.svg
│ │ │ ├── uy.svg
│ │ │ ├── uz.svg
│ │ │ ├── va.svg
│ │ │ ├── vc.svg
│ │ │ ├── ve.svg
│ │ │ ├── vg.svg
│ │ │ ├── vi.svg
│ │ │ ├── vn.svg
│ │ │ ├── vu.svg
│ │ │ ├── wf.svg
│ │ │ ├── ws.svg
│ │ │ ├── xk.svg
│ │ │ ├── xx.svg
│ │ │ ├── ye.svg
│ │ │ ├── yt.svg
│ │ │ ├── za.svg
│ │ │ ├── zm.svg
│ │ │ └── zw.svg
│ ├── fonts
│ │ ├── .gitkeep
│ │ ├── forkawesome-webfont.eot
│ │ ├── forkawesome-webfont.svg
│ │ ├── forkawesome-webfont.ttf
│ │ ├── forkawesome-webfont.woff
│ │ ├── forkawesome-webfont.woff2
│ │ └── nf.woff2
│ ├── images
│ │ ├── cyberchef_hat.svg
│ │ ├── favicons
│ │ │ ├── favicon-16x16.png
│ │ │ └── favicon.ico
│ │ ├── icons
│ │ │ ├── Actor.svg
│ │ │ ├── DataFragment.svg
│ │ │ ├── Device.svg
│ │ │ ├── Observable.svg
│ │ │ ├── Threat.svg
│ │ │ ├── caret-right.svg
│ │ │ ├── eye-slash.svg
│ │ │ ├── eye.svg
│ │ │ ├── hubzilla.svg
│ │ │ ├── link.svg
│ │ │ ├── magic.svg
│ │ │ ├── map-marker.svg
│ │ │ ├── pencil-square-o.svg
│ │ │ ├── pencil.svg
│ │ │ ├── plus-circle.svg
│ │ │ ├── selection-add.svg
│ │ │ └── trash.svg
│ │ ├── no-thumbnail-yet-256x144.png
│ │ └── pts_logo.svg
│ ├── js
│ │ └── .gitkeep
│ └── pts-assets
│ │ ├── README.txt
│ │ ├── config.json
│ │ ├── css
│ │ ├── animation.css
│ │ ├── pts-assets-codes.css
│ │ ├── pts-assets-embedded.css
│ │ ├── pts-assets-ie7-codes.css
│ │ ├── pts-assets-ie7.css
│ │ └── pts-assets.css
│ │ ├── demo.html
│ │ └── font
│ │ ├── pts-assets.eot
│ │ ├── pts-assets.svg
│ │ ├── pts-assets.ttf
│ │ ├── pts-assets.woff
│ │ └── pts-assets.woff2
├── templates
│ ├── 403.html
│ ├── 404.html
│ ├── 500.html
│ ├── account
│ │ ├── account_inactive.html
│ │ ├── base.html
│ │ ├── email.html
│ │ ├── email_confirm.html
│ │ ├── login.html
│ │ ├── logout.html
│ │ ├── password_change.html
│ │ ├── password_reset.html
│ │ ├── password_reset_done.html
│ │ ├── password_reset_from_key.html
│ │ ├── password_reset_from_key_done.html
│ │ ├── password_set.html
│ │ ├── root_base_copy.html
│ │ ├── signup.html
│ │ ├── signup_closed.html
│ │ ├── verification_sent.html
│ │ └── verified_email_required.html
│ ├── actor
│ │ ├── controls.html
│ │ ├── details.html
│ │ └── list_item.html
│ ├── allauth_2fa
│ │ ├── authenticate.html
│ │ ├── backup_tokens.html
│ │ ├── remove.html
│ │ └── setup.html
│ ├── artifact
│ │ ├── controls.html
│ │ ├── details.html
│ │ └── list_item.html
│ ├── base.html
│ ├── base_error.html
│ ├── case
│ │ ├── controls.html
│ │ ├── create_update.html
│ │ ├── details.html
│ │ ├── documentation_form.html
│ │ ├── graph.html
│ │ ├── list.html
│ │ └── list_item.html
│ ├── comment
│ │ ├── form.html
│ │ └── list_item.html
│ ├── data_fragment
│ │ ├── controls.html
│ │ ├── details.html
│ │ └── list_item.html
│ ├── detection_rule
│ │ ├── controls.html
│ │ ├── details.html
│ │ └── list_item.html
│ ├── device
│ │ ├── controls.html
│ │ ├── details.html
│ │ └── list_item.html
│ ├── entity_relation
│ │ ├── controls.html
│ │ ├── details.html
│ │ ├── list_item.html
│ │ ├── related_entities.html
│ │ └── table_item.html
│ ├── event
│ │ ├── compact_list_item.html
│ │ ├── controls.html
│ │ ├── details.html
│ │ ├── list_item.html
│ │ └── timeline.html
│ ├── experiment
│ │ ├── analysis_list_item.html
│ │ ├── analysis_report.html
│ │ ├── analysis_summary.html
│ │ ├── controls.html
│ │ ├── details.html
│ │ ├── experiment_list_item.html
│ │ ├── list_item.html
│ │ ├── m_analysis_report_artifact_details.html
│ │ └── m_analysis_report_flow_list_item.html
│ ├── feed
│ │ ├── detection_rule_out_feed_controls.html
│ │ ├── entity_out_feed_controls.html
│ │ └── list_item.html
│ ├── forms
│ │ └── widgets
│ │ │ └── thumbnail_input_file.html
│ ├── helpers
│ │ ├── date_since.html
│ │ ├── dynamic_type_selector.html
│ │ ├── dynamic_type_selector_js.html
│ │ ├── entity_comments.html
│ │ ├── extra_attributes.html
│ │ ├── extra_attributes_light.html
│ │ ├── square_pill.html
│ │ └── tags.html
│ ├── icons
│ │ ├── actor_icon.html
│ │ ├── artifact_icon.html
│ │ ├── case_icon.html
│ │ ├── color_icon.html
│ │ ├── comment_icon.html
│ │ ├── data_fragment_icon.html
│ │ ├── date_icon.html
│ │ ├── detection_rule_icon.html
│ │ ├── device_icon.html
│ │ ├── event_icon.html
│ │ ├── experiment_icon.html
│ │ ├── id_icon.html
│ │ ├── mimetype_icon.html
│ │ ├── observable_icon.html
│ │ ├── out_feed_icon.html
│ │ ├── pills.html
│ │ ├── relation_icon.html
│ │ ├── since_icon.html
│ │ ├── team_icon.html
│ │ ├── threat_icon.html
│ │ ├── traffic_light_icon.html
│ │ └── user_icon.html
│ ├── import
│ │ └── csv.html
│ ├── observable
│ │ ├── controls.html
│ │ ├── details.html
│ │ └── list_item.html
│ ├── pages
│ │ ├── about.html
│ │ ├── analyze
│ │ │ └── base.html
│ │ ├── case
│ │ │ ├── base.html
│ │ │ └── details.html
│ │ ├── collaborate
│ │ │ ├── base.html
│ │ │ ├── detection_rule_out_feeds.html
│ │ │ ├── entity_out_feeds.html
│ │ │ ├── team_details.html
│ │ │ └── teams.html
│ │ ├── collect
│ │ │ ├── actor_details.html
│ │ │ ├── actors.html
│ │ │ ├── artifact_details.html
│ │ │ ├── artifacts.html
│ │ │ ├── base.html
│ │ │ ├── case_details.html
│ │ │ ├── cases.html
│ │ │ ├── data_fragment_details.html
│ │ │ ├── data_fragments.html
│ │ │ ├── detection_rule_details.html
│ │ │ ├── detection_rules.html
│ │ │ ├── device_details.html
│ │ │ ├── devices.html
│ │ │ ├── entity_relations.html
│ │ │ ├── event_details.html
│ │ │ ├── events.html
│ │ │ ├── experiment_details.html
│ │ │ ├── experiments.html
│ │ │ ├── observable_details.html
│ │ │ ├── observables.html
│ │ │ ├── relation_details.html
│ │ │ ├── relations.html
│ │ │ ├── threat_details.html
│ │ │ └── threats.html
│ │ ├── document
│ │ │ └── base.html
│ │ ├── drops_triage
│ │ │ └── base.html
│ │ ├── evidences.html
│ │ ├── feeds
│ │ │ ├── base.html
│ │ │ ├── detection_rule_out_feeds.html
│ │ │ └── entity_out_feeds.html
│ │ ├── graph
│ │ │ ├── base.html
│ │ │ ├── subgraph.html
│ │ │ └── subgraphs.html
│ │ ├── home.html
│ │ ├── investigate
│ │ │ ├── base.html
│ │ │ ├── generic_entity_details.html
│ │ │ ├── generic_entity_details_list.html
│ │ │ ├── generic_event_row.html
│ │ │ └── m_observable_table_row.html
│ │ ├── quick_creation
│ │ │ └── base.html
│ │ ├── quick_search
│ │ │ ├── m_result_table.html
│ │ │ └── result_list.html
│ │ ├── status
│ │ │ ├── base.html
│ │ │ ├── module_card.html
│ │ │ └── module_row.html
│ │ ├── swager.html
│ │ └── workspace
│ │ │ └── base.html
│ ├── subgraph
│ │ ├── controls.html
│ │ ├── list_item.html
│ │ └── pin_toggler.html
│ ├── team
│ │ ├── add_contributor.html
│ │ ├── controls.html
│ │ ├── details.html
│ │ └── list_item.html
│ ├── threat
│ │ ├── controls.html
│ │ ├── details.html
│ │ └── list_item.html
│ ├── tlp
│ │ ├── badge_pap.html
│ │ ├── badge_tlp.html
│ │ └── show_tlp_pap.html
│ └── users
│ │ ├── user_detail.html
│ │ └── user_form.html
├── users
│ ├── __init__.py
│ ├── adapters.py
│ ├── admin.py
│ ├── api
│ │ ├── serializers.py
│ │ └── views.py
│ ├── apps.py
│ ├── context_processors.py
│ ├── forms.py
│ ├── migrations
│ │ ├── 0001_initial.py
│ │ ├── 0002_user_type.py
│ │ ├── 0003_user_contributor_id.py
│ │ ├── 0004_user_preferences.py
│ │ └── __init__.py
│ ├── models.py
│ ├── signals.py
│ ├── tests
│ │ ├── __init__.py
│ │ ├── factories.py
│ │ ├── test_admin.py
│ │ ├── test_forms.py
│ │ ├── test_models.py
│ │ ├── test_urls.py
│ │ └── test_views.py
│ ├── urls.py
│ └── views.py
├── utils
│ ├── __init__.py
│ └── storages.py
└── websocket
│ ├── __init__.py
│ └── consumers.py
├── compose
├── local
│ ├── django
│ │ ├── Dockerfile
│ │ ├── django-q
│ │ │ └── start
│ │ └── start
│ └── docs
│ │ ├── Dockerfile
│ │ └── start
└── production
│ ├── django
│ ├── Dockerfile
│ ├── django-q
│ │ └── start
│ ├── entrypoint
│ └── start
│ ├── postgres
│ ├── Dockerfile
│ └── maintenance
│ │ ├── _sourced
│ │ ├── constants.sh
│ │ ├── countdown.sh
│ │ ├── messages.sh
│ │ └── yes_no.sh
│ │ ├── backup
│ │ ├── backups
│ │ └── restore
│ └── traefik
│ ├── Dockerfile
│ └── traefik.yml
├── config
├── __init__.py
├── api_router.py
├── asgi_local.py
├── asgi_production.py
├── rest_router.py
├── settings
│ ├── __init__.py
│ ├── base.py
│ ├── local.py
│ ├── production.py
│ └── test.py
├── urls.py
├── ws_router.py
└── wsgi.py
├── deploy_package
├── .envs
│ └── .tpl
│ │ ├── .base
│ │ ├── .colander
│ │ ├── .colander-postgres
│ │ ├── .keycloak
│ │ ├── .keycloak-postgres
│ │ ├── .minio
│ │ ├── .threatr
│ │ └── .threatr-postgres
├── compose
│ └── production
│ │ ├── postgres
│ │ ├── Dockerfile
│ │ └── maintenance
│ │ │ ├── _sourced
│ │ │ ├── constants.sh
│ │ │ ├── countdown.sh
│ │ │ ├── messages.sh
│ │ │ └── yes_no.sh
│ │ │ ├── backup
│ │ │ ├── backups
│ │ │ └── restore
│ │ └── traefik
│ │ ├── Dockerfile
│ │ └── traefik.yml.tpl
├── gen.sh
└── no-sso.yml
├── docs
├── Makefile
├── __init__.py
├── conf.py
├── howto.rst
├── index.rst
├── make.bat
├── pycharm
│ ├── configuration.rst
│ └── images
│ │ ├── 1.png
│ │ ├── 2.png
│ │ ├── 3.png
│ │ ├── 4.png
│ │ ├── 7.png
│ │ ├── 8.png
│ │ ├── f1.png
│ │ ├── f2.png
│ │ ├── f3.png
│ │ ├── f4.png
│ │ ├── issue1.png
│ │ └── issue2.png
└── users.rst
├── local.yml
├── locale
└── README.rst
├── manage.py
├── merge_production_dotenvs_in_dotenv.py
├── package-lock.json
├── package.json
├── production.yml
├── pyproject.toml
├── pytest.ini
├── requirements
├── base.txt
├── local.txt
└── production.txt
├── setup.cfg
└── webpack.config.js
/.dockerignore:
--------------------------------------------------------------------------------
1 | .editorconfig
2 | .gitattributes
3 | .github
4 | .gitignore
5 | .gitlab-ci.yml
6 | .idea
7 | .pre-commit-config.yaml
8 | .readthedocs.yml
9 | .travis.yml
10 | venv
11 | node_modules
12 |
--------------------------------------------------------------------------------
/.editorconfig:
--------------------------------------------------------------------------------
1 | # http://editorconfig.org
2 |
3 | root = true
4 |
5 | [*]
6 | charset = utf-8
7 | end_of_line = lf
8 | insert_final_newline = true
9 | trim_trailing_whitespace = true
10 |
11 | [*.{py,rst,ini}]
12 | indent_style = space
13 | indent_size = 4
14 |
15 | [*.{html,css,scss,js,json,yml,xml}]
16 | indent_style = space
17 | indent_size = 2
18 |
19 | [*.md]
20 | trim_trailing_whitespace = false
21 |
22 | [Makefile]
23 | indent_style = tab
24 |
25 | [nginx.conf]
26 | indent_style = space
27 | indent_size = 2
28 |
--------------------------------------------------------------------------------
/.envs/.local/.django:
--------------------------------------------------------------------------------
1 | # General
2 | # ------------------------------------------------------------------------------
3 | USE_DOCKER=yes
4 | USE_MANDOLIN=yes
5 | IPYTHONDIR=/app/.ipython
6 |
7 | REDIS_URL=redis://redis:6379/0
8 |
9 | MINIO_ACCESS_KEY=KBP6WXGPS387090EZMG8
10 | MINIO_SECRET_KEY=DRjFXylyfMqn2zilAr33xORhaYz5r9e8r37XPz3A
11 |
--------------------------------------------------------------------------------
/.envs/.local/.keycloak:
--------------------------------------------------------------------------------
1 | DB_VENDOR=postgres
2 | KEYCLOAK_DATABASE_HOST=keycloak-db
3 | KEYCLOAK_DATABASE_PORT=5432
4 | # Database name (replace with yours)
5 | KEYCLOAK_DATABASE_NAME=keycloakdb
6 | # Database user (replace with yours)
7 | KEYCLOAK_DATABASE_USER=hhGArHWVrVQjuDcgBUNNlQqZNfqyNPfQ
8 | # Database password (replace with yours)
9 | KEYCLOAK_DATABASE_PASSWORD=vW9WtXmFWpsq5tATgcYNAi62cC1tWar1BsSrksBodMrra2bv4NHVvRyIm9k29Ro9
10 |
11 | # Keycloak user (replace with yours)
12 | KEYCLOAK_USER=keycloakadmin
13 | # Keycloak password (replace with yours)
14 | KEYCLOAK_PASSWORD=rwXPqspCABJzqh47i723wf9
15 |
16 | PROXY_ADDRESS_FORWARDING='true'
17 | KEYCLOAK_LOGLEVEL=DEBUG
18 |
--------------------------------------------------------------------------------
/.envs/.local/.postgres:
--------------------------------------------------------------------------------
1 | # PostgreSQL
2 | # ------------------------------------------------------------------------------
3 | POSTGRES_HOST=postgres
4 | POSTGRES_PORT=5432
5 | POSTGRES_DB=colander
6 | POSTGRES_USER=hhGArHWVrVQjuDcgBUNNlQqZNfqyNPfQ
7 | POSTGRES_PASSWORD=vW9WtXmFWpsq5tATgcYNAi62cC1tWar1BsSrksBodMrra2bv4NHVvRyIm9k29Ro9
8 |
--------------------------------------------------------------------------------
/.gitattributes:
--------------------------------------------------------------------------------
1 | * text=auto
2 |
--------------------------------------------------------------------------------
/.github/CONTRIBUTORS.txt:
--------------------------------------------------------------------------------
1 | Esther Onfroy
2 | Abir Ghattas
3 | Christophe Andral
4 |
--------------------------------------------------------------------------------
/.github/codeql/codeql-config.yml:
--------------------------------------------------------------------------------
1 | name: "PTS CodeQL config"
2 |
3 | paths-ignore:
4 | # Ignore static, compiled JS files
5 | - "colander/static/js/*.min.js"
6 | - "colander/static/js/*.min.mjs"
7 |
--------------------------------------------------------------------------------
/.pylintrc:
--------------------------------------------------------------------------------
1 | [MASTER]
2 | load-plugins=pylint_django
3 | django-settings-module=config.settings.local
4 | ignore=migrations
5 |
6 | [FORMAT]
7 | max-line-length=120
8 |
9 | [MESSAGES CONTROL]
10 | disable=missing-docstring,invalid-name,line-too-long,wrong-import-order,fixme
11 |
12 | [DESIGN]
13 | max-parents=13
14 |
15 | [TYPECHECK]
16 | generated-members=REQUEST,acl_users,aq_parent,"[a-zA-Z]+_set{1,2}",save,delete
17 |
--------------------------------------------------------------------------------
/.readthedocs.yml:
--------------------------------------------------------------------------------
1 | version: 2
2 |
3 | sphinx:
4 | configuration: docs/conf.py
5 |
6 | build:
7 | image: testing
8 |
9 | python:
10 | version: 3.9
11 | install:
12 | - requirements: requirements/local.txt
13 |
--------------------------------------------------------------------------------
/LICENSE.md:
--------------------------------------------------------------------------------
1 |
2 | Copyright (c) 2022, Defensive Lab Agency
3 |
4 | This program is free software: you can redistribute it and/or modify
5 | it under the terms of the GNU General Public License as published by
6 | the Free Software Foundation, either version 3 of the License, or
7 | (at your option) any later version.
8 |
9 | This program is distributed in the hope that it will be useful,
10 | but WITHOUT ANY WARRANTY; without even the implied warranty of
11 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 | GNU General Public License for more details.
13 |
14 | You should have received a copy of the GNU General Public License
15 | along with this program. If not, see .
16 |
--------------------------------------------------------------------------------
/colander/__init__.py:
--------------------------------------------------------------------------------
1 | __version__ = "0.1.0"
2 | __version_info__ = tuple(
3 | int(num) if num.isdigit() else num
4 | for num in __version__.replace("-", ".", 1).split(".")
5 | )
6 |
--------------------------------------------------------------------------------
/colander/conftest.py:
--------------------------------------------------------------------------------
1 | import pytest
2 |
3 | from colander.users.models import User
4 | from colander.users.tests.factories import UserFactory
5 |
6 |
7 | @pytest.fixture(autouse=True)
8 | def media_storage(settings, tmpdir):
9 | settings.MEDIA_ROOT = tmpdir.strpath
10 |
11 |
12 | @pytest.fixture
13 | def user(db) -> User:
14 | return UserFactory()
15 |
--------------------------------------------------------------------------------
/colander/contrib/__init__.py:
--------------------------------------------------------------------------------
1 | """
2 | To understand why this file is here, please read:
3 |
4 | http://cookiecutter-django.readthedocs.io/en/latest/faq.html#why-is-there-a-django-contrib-sites-directory-in-cookiecutter-django
5 | """
6 |
--------------------------------------------------------------------------------
/colander/contrib/sites/__init__.py:
--------------------------------------------------------------------------------
1 | """
2 | To understand why this file is here, please read:
3 |
4 | http://cookiecutter-django.readthedocs.io/en/latest/faq.html#why-is-there-a-django-contrib-sites-directory-in-cookiecutter-django
5 | """
6 |
--------------------------------------------------------------------------------
/colander/contrib/sites/migrations/0002_alter_domain_unique.py:
--------------------------------------------------------------------------------
1 | import django.contrib.sites.models
2 | from django.db import migrations, models
3 |
4 |
5 | class Migration(migrations.Migration):
6 |
7 | dependencies = [("sites", "0001_initial")]
8 |
9 | operations = [
10 | migrations.AlterField(
11 | model_name="site",
12 | name="domain",
13 | field=models.CharField(
14 | max_length=100,
15 | unique=True,
16 | validators=[django.contrib.sites.models._simple_domain_name_validator],
17 | verbose_name="domain name",
18 | ),
19 | )
20 | ]
21 |
--------------------------------------------------------------------------------
/colander/contrib/sites/migrations/0004_alter_options_ordering_domain.py:
--------------------------------------------------------------------------------
1 | # Generated by Django 3.1.7 on 2021-02-04 14:49
2 |
3 | from django.db import migrations
4 |
5 |
6 | class Migration(migrations.Migration):
7 |
8 | dependencies = [
9 | ("sites", "0003_set_site_domain_and_name"),
10 | ]
11 |
12 | operations = [
13 | migrations.AlterModelOptions(
14 | name="site",
15 | options={
16 | "ordering": ["domain"],
17 | "verbose_name": "site",
18 | "verbose_name_plural": "sites",
19 | },
20 | ),
21 | ]
22 |
--------------------------------------------------------------------------------
/colander/contrib/sites/migrations/__init__.py:
--------------------------------------------------------------------------------
1 | """
2 | To understand why this file is here, please read:
3 |
4 | http://cookiecutter-django.readthedocs.io/en/latest/faq.html#why-is-there-a-django-contrib-sites-directory-in-cookiecutter-django
5 | """
6 |
--------------------------------------------------------------------------------
/colander/core/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/PiRogueToolSuite/colander/711a1d41a9036ba8461be80d778244160c1d71b8/colander/core/__init__.py
--------------------------------------------------------------------------------
/colander/core/api/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/PiRogueToolSuite/colander/711a1d41a9036ba8461be80d778244160c1d71b8/colander/core/api/__init__.py
--------------------------------------------------------------------------------
/colander/core/api/security.py:
--------------------------------------------------------------------------------
1 | from rest_framework.authentication import TokenAuthentication
2 |
3 |
4 | class BearerTokenAuthentication(TokenAuthentication):
5 | keyword = 'Bearer'
6 | """Some external requesters use 'Authorization: Bearer' preamble
7 | to authenticate and not the 'non standard' 'Token' one used by DRF.
8 | """
9 |
--------------------------------------------------------------------------------
/colander/core/apps.py:
--------------------------------------------------------------------------------
1 | from django.apps import AppConfig
2 | from django.utils.translation import gettext_lazy as _
3 |
4 | from colander.core.es_utils import create_geoip_pipeline
5 |
6 |
7 | class CoreConfig(AppConfig):
8 | name = "colander.core"
9 | verbose_name = _("Core")
10 |
11 | def ready(self):
12 | print('Ready')
13 | create_geoip_pipeline()
14 | try:
15 | import colander.users.signals # noqa F401
16 | except ImportError:
17 | pass
18 |
--------------------------------------------------------------------------------
/colander/core/exporters/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/PiRogueToolSuite/colander/711a1d41a9036ba8461be80d778244160c1d71b8/colander/core/exporters/__init__.py
--------------------------------------------------------------------------------
/colander/core/forms/widgets.py:
--------------------------------------------------------------------------------
1 | from django.forms.widgets import ClearableFileInput
2 |
3 |
4 | class ThumbnailFileInput(ClearableFileInput):
5 | template_name = "forms/widgets/thumbnail_input_file.html"
6 | thumbnail_url = None
7 |
8 | def get_context(self, name, value, attrs):
9 | context = super().get_context(name, value, attrs)
10 | context['widget'].update(dict(thumbnail_url=self.thumbnail_url))
11 | return context
12 |
--------------------------------------------------------------------------------
/colander/core/graph/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/PiRogueToolSuite/colander/711a1d41a9036ba8461be80d778244160c1d71b8/colander/core/graph/__init__.py
--------------------------------------------------------------------------------
/colander/core/management/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/PiRogueToolSuite/colander/711a1d41a9036ba8461be80d778244160c1d71b8/colander/core/management/__init__.py
--------------------------------------------------------------------------------
/colander/core/management/commands/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/PiRogueToolSuite/colander/711a1d41a9036ba8461be80d778244160c1d71b8/colander/core/management/commands/__init__.py
--------------------------------------------------------------------------------
/colander/core/management/commands/data/data_fragment_types.json:
--------------------------------------------------------------------------------
1 | [
2 | {"short_name": "CODE", "name": "Piece of code", "description": "", "svg_icon": "", "nf_icon": "nf-md-code_braces"},
3 | {"short_name": "PATTERN", "name": "Pattern", "description": "", "svg_icon": "", "nf_icon": "nf-fa-puzzle_piece"},
4 | {"short_name": "TEXT", "name": "Piece of text", "description": "", "svg_icon": "", "nf_icon": "nf-fa-file_text"},
5 | {"short_name": "PAYLOAD", "name": "Raw payload", "description": "", "svg_icon": "", "nf_icon": "nf-oct-file_binary"}
6 | ]
7 |
--------------------------------------------------------------------------------
/colander/core/management/commands/data/detection_rule_types.json:
--------------------------------------------------------------------------------
1 | [
2 | {"short_name": "YARA", "name": "Yara rule", "description": "", "svg_icon": "", "nf_icon": "nf-cod-server_process"},
3 | {"short_name": "SURICATA", "name": "Suricata rule", "description": "", "svg_icon": "", "nf_icon": "nf-cod-server_process"}
4 | ]
5 |
--------------------------------------------------------------------------------
/colander/core/management/commands/fix_contributor_id.py:
--------------------------------------------------------------------------------
1 | import uuid
2 |
3 | from django.core.management.base import BaseCommand
4 |
5 | from colander.users.models import User
6 |
7 |
8 | class Command(BaseCommand):
9 | help = 'Fix/rotate contributor IDs.'
10 |
11 | def handle(self, *args, **options):
12 | for user in User.objects.all():
13 | user.contributor_id = uuid.uuid4()
14 | user.save()
15 |
--------------------------------------------------------------------------------
/colander/core/migrations/0007_alter_entityrelation_updated_at.py:
--------------------------------------------------------------------------------
1 | # Generated by Django 3.2.15 on 2023-02-21 13:31
2 |
3 | from django.db import migrations, models
4 |
5 |
6 | class Migration(migrations.Migration):
7 |
8 | dependencies = [
9 | ('core', '0006_auto_20230221_1301'),
10 | ]
11 |
12 | operations = [
13 | migrations.AlterField(
14 | model_name='entityrelation',
15 | name='updated_at',
16 | field=models.DateTimeField(auto_now=True, help_text='Latest modification of this object.'),
17 | ),
18 | ]
19 |
--------------------------------------------------------------------------------
/colander/core/migrations/0008_pirogueexperiment_aes_trace.py:
--------------------------------------------------------------------------------
1 | # Generated by Django 3.2.15 on 2023-03-01 13:23
2 |
3 | from django.db import migrations, models
4 | import django.db.models.deletion
5 |
6 |
7 | class Migration(migrations.Migration):
8 |
9 | dependencies = [
10 | ('core', '0007_alter_entityrelation_updated_at'),
11 | ]
12 |
13 | operations = [
14 | migrations.AddField(
15 | model_name='pirogueexperiment',
16 | name='aes_trace',
17 | field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='pirogue_aes_trace', to='core.artifact'),
18 | ),
19 | ]
20 |
--------------------------------------------------------------------------------
/colander/core/migrations/0009_entityrelation_attributes.py:
--------------------------------------------------------------------------------
1 | # Generated by Django 3.2.18 on 2023-03-09 18:16
2 |
3 | import django.contrib.postgres.fields.hstore
4 | from django.db import migrations
5 |
6 |
7 | class Migration(migrations.Migration):
8 |
9 | dependencies = [
10 | ('core', '0008_pirogueexperiment_aes_trace'),
11 | ]
12 |
13 | operations = [
14 | migrations.AddField(
15 | model_name='entityrelation',
16 | name='attributes',
17 | field=django.contrib.postgres.fields.hstore.HStoreField(blank=True, null=True),
18 | ),
19 | ]
20 |
--------------------------------------------------------------------------------
/colander/core/migrations/0012_alter_detectionrule_targeted_observables.py:
--------------------------------------------------------------------------------
1 | # Generated by Django 3.2.18 on 2023-04-09 11:17
2 |
3 | from django.db import migrations, models
4 |
5 |
6 | class Migration(migrations.Migration):
7 |
8 | dependencies = [
9 | ('core', '0011_auto_20230409_1113'),
10 | ]
11 |
12 | operations = [
13 | migrations.AlterField(
14 | model_name='detectionrule',
15 | name='targeted_observables',
16 | field=models.ManyToManyField(blank=True, null=True, to='core.Observable'),
17 | ),
18 | ]
19 |
--------------------------------------------------------------------------------
/colander/core/migrations/0013_alter_case_documentation.py:
--------------------------------------------------------------------------------
1 | # Generated by Django 3.2.18 on 2023-04-13 08:18
2 |
3 | from django.db import migrations, models
4 |
5 |
6 | class Migration(migrations.Migration):
7 |
8 | dependencies = [
9 | ('core', '0012_alter_detectionrule_targeted_observables'),
10 | ]
11 |
12 | operations = [
13 | migrations.AlterField(
14 | model_name='case',
15 | name='documentation',
16 | field=models.TextField(blank=True, help_text='Case documentation.', null=True),
17 | ),
18 | ]
19 |
--------------------------------------------------------------------------------
/colander/core/migrations/0015_alter_artifact_file.py:
--------------------------------------------------------------------------------
1 | # Generated by Django 3.2.18 on 2023-04-19 13:50
2 |
3 | import colander.core.models
4 | from django.db import migrations, models
5 |
6 |
7 | class Migration(migrations.Migration):
8 |
9 | dependencies = [
10 | ('core', '0014_uploadrequest'),
11 | ]
12 |
13 | operations = [
14 | migrations.AlterField(
15 | model_name='artifact',
16 | name='file',
17 | field=models.FileField(blank=True, max_length=512, null=True, upload_to=colander.core.models._get_evidence_upload_dir),
18 | ),
19 | ]
20 |
--------------------------------------------------------------------------------
/colander/core/migrations/0016_uploadrequest_target_artifact_id.py:
--------------------------------------------------------------------------------
1 | # Generated by Django 3.2.18 on 2023-04-19 14:05
2 |
3 | from django.db import migrations, models
4 |
5 |
6 | class Migration(migrations.Migration):
7 |
8 | dependencies = [
9 | ('core', '0015_alter_artifact_file'),
10 | ]
11 |
12 | operations = [
13 | migrations.AddField(
14 | model_name='uploadrequest',
15 | name='target_artifact_id',
16 | field=models.CharField(blank=True, max_length=36, null=True),
17 | ),
18 | ]
19 |
--------------------------------------------------------------------------------
/colander/core/migrations/0020_colanderteam_name.py:
--------------------------------------------------------------------------------
1 | # Generated by Django 3.2.18 on 2023-05-02 13:28
2 |
3 | from django.db import migrations, models
4 |
5 |
6 | class Migration(migrations.Migration):
7 |
8 | dependencies = [
9 | ('core', '0019_auto_20230421_1311'),
10 | ]
11 |
12 | operations = [
13 | migrations.AddField(
14 | model_name='colanderteam',
15 | name='name',
16 | field=models.CharField(default='', help_text='Give a meaningful name to this type of artifact.', max_length=512, verbose_name='name'),
17 | ),
18 | ]
19 |
--------------------------------------------------------------------------------
/colander/core/migrations/0022_case_shared_with.py:
--------------------------------------------------------------------------------
1 | # Generated by Django 3.2.18 on 2023-05-02 13:45
2 |
3 | from django.db import migrations, models
4 |
5 |
6 | class Migration(migrations.Migration):
7 |
8 | dependencies = [
9 | ('core', '0021_auto_20230502_1339'),
10 | ]
11 |
12 | operations = [
13 | migrations.AddField(
14 | model_name='case',
15 | name='shared_with',
16 | field=models.ManyToManyField(related_name='shared_cases', to='core.ColanderTeam'),
17 | ),
18 | ]
19 |
--------------------------------------------------------------------------------
/colander/core/migrations/0024_alter_colanderteam_name.py:
--------------------------------------------------------------------------------
1 | # Generated by Django 3.2.18 on 2023-05-15 12:41
2 |
3 | from django.db import migrations, models
4 |
5 |
6 | class Migration(migrations.Migration):
7 |
8 | dependencies = [
9 | ('core', '0023_auto_20230502_1401'),
10 | ]
11 |
12 | operations = [
13 | migrations.AlterField(
14 | model_name='colanderteam',
15 | name='name',
16 | field=models.CharField(default='', help_text='Give a meaningful name to this team.', max_length=512, verbose_name='name'),
17 | ),
18 | ]
19 |
--------------------------------------------------------------------------------
/colander/core/migrations/0026_alter_detectionruleoutgoingfeed_content_type.py:
--------------------------------------------------------------------------------
1 | # Generated by Django 3.2.18 on 2023-06-01 08:25
2 |
3 | from django.db import migrations, models
4 |
5 |
6 | class Migration(migrations.Migration):
7 |
8 | dependencies = [
9 | ('core', '0025_auto_20230601_0823'),
10 | ]
11 |
12 | operations = [
13 | migrations.AlterField(
14 | model_name='detectionruleoutgoingfeed',
15 | name='content_type',
16 | field=models.CharField(max_length=512),
17 | ),
18 | ]
19 |
--------------------------------------------------------------------------------
/colander/core/migrations/0027_alter_detectionruleoutgoingfeed_content_type.py:
--------------------------------------------------------------------------------
1 | # Generated by Django 3.2.18 on 2023-06-01 08:27
2 |
3 | from django.db import migrations, models
4 |
5 |
6 | class Migration(migrations.Migration):
7 |
8 | dependencies = [
9 | ('core', '0026_alter_detectionruleoutgoingfeed_content_type'),
10 | ]
11 |
12 | operations = [
13 | migrations.AlterField(
14 | model_name='detectionruleoutgoingfeed',
15 | name='content_type',
16 | field=models.CharField(choices=[('SURICATA', 'Suricata rule'), ('YARA', 'Yara rule')], max_length=512),
17 | ),
18 | ]
19 |
--------------------------------------------------------------------------------
/colander/core/migrations/0032_alter_detectionruleoutgoingfeed_content_type.py:
--------------------------------------------------------------------------------
1 | # Generated by Django 3.2.18 on 2023-06-01 09:30
2 |
3 | from django.db import migrations, models
4 |
5 |
6 | class Migration(migrations.Migration):
7 |
8 | dependencies = [
9 | ('core', '0031_auto_20230601_0929'),
10 | ]
11 |
12 | operations = [
13 | migrations.AlterField(
14 | model_name='detectionruleoutgoingfeed',
15 | name='content_type',
16 | field=models.CharField(choices=[('8a9537cc-1bbb-4d8e-8a0f-b8bb08c4cb20', 'Suricata rule'), ('07ecd6d3-e89e-4f9a-a794-06b7692f22c1', 'Yara rule')], max_length=512),
17 | ),
18 | ]
19 |
--------------------------------------------------------------------------------
/colander/core/migrations/0033_alter_detectionruleoutgoingfeed_content_type.py:
--------------------------------------------------------------------------------
1 | # Generated by Django 3.2.18 on 2023-06-01 10:40
2 |
3 | from django.db import migrations, models
4 | import django.db.models.deletion
5 |
6 |
7 | class Migration(migrations.Migration):
8 |
9 | dependencies = [
10 | ('core', '0032_alter_detectionruleoutgoingfeed_content_type'),
11 | ]
12 |
13 | operations = [
14 | migrations.AlterField(
15 | model_name='detectionruleoutgoingfeed',
16 | name='content_type',
17 | field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='core.detectionruletype'),
18 | ),
19 | ]
20 |
--------------------------------------------------------------------------------
/colander/core/migrations/0037_case_overrides.py:
--------------------------------------------------------------------------------
1 | # Generated by Django 3.2.18 on 2023-07-07 09:16
2 |
3 | from django.db import migrations, models
4 |
5 |
6 | class Migration(migrations.Migration):
7 |
8 | dependencies = [
9 | ('core', '0036_datafragment_datafragmenttype'),
10 | ]
11 |
12 | operations = [
13 | migrations.AddField(
14 | model_name='case',
15 | name='overrides',
16 | field=models.JSONField(blank=True, null=True),
17 | ),
18 | ]
19 |
--------------------------------------------------------------------------------
/colander/core/migrations/0038_alter_case_description.py:
--------------------------------------------------------------------------------
1 | # Generated by Django 3.2.18 on 2023-09-18 13:32
2 |
3 | from django.db import migrations, models
4 |
5 |
6 | class Migration(migrations.Migration):
7 |
8 | dependencies = [
9 | ('core', '0037_case_overrides'),
10 | ]
11 |
12 | operations = [
13 | migrations.AlterField(
14 | model_name='case',
15 | name='description',
16 | field=models.TextField(help_text='Add more details about the case here.'),
17 | ),
18 | ]
19 |
--------------------------------------------------------------------------------
/colander/core/migrations/0041_alter_event_involved_observables.py:
--------------------------------------------------------------------------------
1 | # Generated by Django 3.2.18 on 2023-09-20 10:53
2 |
3 | from django.db import migrations, models
4 |
5 |
6 | class Migration(migrations.Migration):
7 |
8 | dependencies = [
9 | ('core', '0040_auto_20230918_1357'),
10 | ]
11 |
12 | operations = [
13 | migrations.AlterField(
14 | model_name='event',
15 | name='involved_observables',
16 | field=models.ManyToManyField(blank=True, help_text='Select the observables involved with this event.', null=True, related_name='events', to='core.Observable'),
17 | ),
18 | ]
19 |
--------------------------------------------------------------------------------
/colander/core/migrations/0048_droppedfile_target_artifact_id.py:
--------------------------------------------------------------------------------
1 | # Generated by Django 4.2.8 on 2024-12-11 08:42
2 |
3 | from django.db import migrations, models
4 |
5 |
6 | class Migration(migrations.Migration):
7 |
8 | dependencies = [
9 | ("core", "0047_alter_actortype_type_hints_and_more"),
10 | ]
11 |
12 | operations = [
13 | migrations.AddField(
14 | model_name="droppedfile",
15 | name="target_artifact_id",
16 | field=models.CharField(blank=True, max_length=36, null=True),
17 | ),
18 | ]
19 |
--------------------------------------------------------------------------------
/colander/core/migrations/0049_droppedfile_mime_type.py:
--------------------------------------------------------------------------------
1 | # Generated by Django 4.2.8 on 2024-12-11 12:53
2 |
3 | from django.db import migrations, models
4 |
5 |
6 | class Migration(migrations.Migration):
7 |
8 | dependencies = [
9 | ("core", "0048_droppedfile_target_artifact_id"),
10 | ]
11 |
12 | operations = [
13 | migrations.AddField(
14 | model_name="droppedfile",
15 | name="mime_type",
16 | field=models.CharField(blank=True, max_length=512, null=True),
17 | ),
18 | ]
19 |
--------------------------------------------------------------------------------
/colander/core/migrations/0052_entity_thumbnail.py:
--------------------------------------------------------------------------------
1 | # Generated by Django 4.2.8 on 2025-02-04 13:43
2 |
3 | import colander.core.models
4 | from django.db import migrations, models
5 |
6 |
7 | class Migration(migrations.Migration):
8 |
9 | dependencies = [
10 | ("core", "0051_subgraph"),
11 | ]
12 |
13 | operations = [
14 | migrations.AddField(
15 | model_name="entity",
16 | name="thumbnail",
17 | field=models.FileField(
18 | blank=True, max_length=512, null=True, upload_to=colander.core.models._get_entity_thumbnails_storage_dir
19 | ),
20 | ),
21 | ]
22 |
--------------------------------------------------------------------------------
/colander/core/migrations/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/PiRogueToolSuite/colander/711a1d41a9036ba8461be80d778244160c1d71b8/colander/core/migrations/__init__.py
--------------------------------------------------------------------------------
/colander/core/rest/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/PiRogueToolSuite/colander/711a1d41a9036ba8461be80d778244160c1d71b8/colander/core/rest/__init__.py
--------------------------------------------------------------------------------
/colander/core/scarlet_utils.py:
--------------------------------------------------------------------------------
1 |
2 | def __remove_geojson(elt):
3 | try:
4 | elt['network']['location'].pop('geojson')
5 | except:
6 | pass
7 | return elt
8 |
9 |
10 | def clean_results(api_response):
11 | if api_response['result_code'] != 1:
12 | return True, api_response['result']
13 | else:
14 | # Remove geojson
15 | if type(api_response['result']) is list:
16 | data = api_response['result'][0]
17 | else:
18 | data = api_response['result']
19 | data = __remove_geojson(data)
20 | return False, data
21 |
--------------------------------------------------------------------------------
/colander/core/serializers/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/PiRogueToolSuite/colander/711a1d41a9036ba8461be80d778244160c1d71b8/colander/core/serializers/__init__.py
--------------------------------------------------------------------------------
/colander/core/tasks/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/PiRogueToolSuite/colander/711a1d41a9036ba8461be80d778244160c1d71b8/colander/core/tasks/__init__.py
--------------------------------------------------------------------------------
/colander/core/templatetags/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/PiRogueToolSuite/colander/711a1d41a9036ba8461be80d778244160c1d71b8/colander/core/templatetags/__init__.py
--------------------------------------------------------------------------------
/colander/core/tests/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/PiRogueToolSuite/colander/711a1d41a9036ba8461be80d778244160c1d71b8/colander/core/tests/__init__.py
--------------------------------------------------------------------------------
/colander/core/tests/security/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/PiRogueToolSuite/colander/711a1d41a9036ba8461be80d778244160c1d71b8/colander/core/tests/security/__init__.py
--------------------------------------------------------------------------------
/colander/core/views/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/PiRogueToolSuite/colander/711a1d41a9036ba8461be80d778244160c1d71b8/colander/core/views/__init__.py
--------------------------------------------------------------------------------
/colander/core/views/documentation_views.py:
--------------------------------------------------------------------------------
1 | from django.contrib import messages
2 | from django.contrib.auth.decorators import login_required
3 | from django.shortcuts import redirect, render
4 |
5 |
6 | @login_required
7 | def write_documentation_view(request):
8 | #active_case = get_active_case(request)
9 | active_case = request.contextual_case
10 | if not active_case:
11 | messages.add_message(request, messages.WARNING,
12 | "In order to write case documentation, you must first select a case to work on")
13 | return redirect('case_create_view')
14 |
15 | return render(request,
16 | 'pages/document/base.html')
17 |
--------------------------------------------------------------------------------
/colander/core/views/graph_views.py:
--------------------------------------------------------------------------------
1 | from django.contrib.auth.decorators import login_required
2 | from django.shortcuts import render
3 |
4 | from colander.core.models import SubGraph
5 |
6 |
7 | @login_required
8 | def graph_base_view(request):
9 | ctx = {
10 | 'pinned_subgraphs': SubGraph.get_pinned(user=request.user, case=request.contextual_case).order_by('created_at')
11 | }
12 | return render(request, 'pages/graph/base.html', context=ctx)
13 |
--------------------------------------------------------------------------------
/colander/core/views/status_views.py:
--------------------------------------------------------------------------------
1 | from django.conf import settings
2 | from django.shortcuts import render
3 |
4 | from colander.core.threatr import ThreatrClient
5 |
6 |
7 | def colander_status_view(request):
8 | client = ThreatrClient()
9 | colander_git_commit_hash = ''
10 | try:
11 | colander_git_commit_hash = settings.GIT_COMMIT_HASH
12 | except: pass
13 | return render(
14 | request,
15 | 'pages/status/base.html',
16 | context={
17 | 'threatr': client.get_status(),
18 | 'colander': {
19 | 'git_commit_hash': colander_git_commit_hash
20 | }
21 | }
22 | )
23 |
--------------------------------------------------------------------------------
/colander/core/views/threatr_proxy.py:
--------------------------------------------------------------------------------
1 | import logging
2 |
3 | from django.contrib.auth.decorators import login_required
4 |
5 | from colander.core.models import BackendCredentials
6 |
7 | THREAT_BACKEND_IDENTIFIER='threatr'
8 | logger = logging.getLogger(__name__)
9 |
10 | @login_required
11 | def request_threatr_view(request):
12 | credentials = BackendCredentials.objects.filter(backend=THREAT_BACKEND_IDENTIFIER)
13 | if not credentials:
14 | logger.error(f'No credentials found for module {THREAT_BACKEND_IDENTIFIER}')
15 | return None
16 |
--------------------------------------------------------------------------------
/colander/frontend/colander-dgraph/default-settings.js:
--------------------------------------------------------------------------------
1 | export let cytoscape_settings = {
2 | userZoomingEnabled: true,
3 | userPanningEnabled: true,
4 | boxSelectionEnabled: true,
5 | wheelSensitivity: 0.5,
6 | };
7 |
8 | export let cxtmenu_settings = {
9 |
10 | };
11 |
12 | export let edgehandles_settings = {
13 |
14 | };
15 |
16 | export let klay_settings = {
17 |
18 | };
19 |
20 |
--------------------------------------------------------------------------------
/colander/frontend/colander-dgraph/utils.js:
--------------------------------------------------------------------------------
1 | let locale_date_formatter = new Intl.DateTimeFormat({
2 | timeStyle: 'long',
3 | year: 'numeric',
4 | month: 'long',
5 | day: 'numeric',
6 | hour: "numeric",
7 | minute: "numeric",
8 | });
9 | export const date_str = (d) => {
10 | if (!(d instanceof Date)) {
11 | d = new Date(d);
12 | }
13 | return locale_date_formatter.format(d);
14 | };
15 |
--------------------------------------------------------------------------------
/colander/frontend/colander-vue-components/graph-editor/refs/graph-templates.js:
--------------------------------------------------------------------------------
1 | export const overlay_button = (icon, label, title) => {
2 | title = title || label;
3 | return $(`
4 |
5 | ${label}
6 | `);
7 | };
8 |
9 |
--------------------------------------------------------------------------------
/colander/frontend/colander-widgets/cache.js:
--------------------------------------------------------------------------------
1 | export class Cache {
2 | #dictionary = {}
3 | constructor() {}
4 | store(domain, id, value) {
5 | this.#dictionary[domain] = this.#dictionary[domain] || {};
6 | return this.#dictionary[domain][id] = value;
7 | }
8 | contains(domain, id) {
9 | return (domain in this.#dictionary) && (id in this.#dictionary[domain]);
10 | }
11 | get(domain, id) {
12 | return this.#dictionary[domain]?.[id];
13 | }
14 | }
15 |
--------------------------------------------------------------------------------
/colander/frontend/colander-widgets/index.js:
--------------------------------------------------------------------------------
1 | import EventEmitter from 'events';
2 | import {Cache} from './cache';
3 |
4 | let Event_System = new EventEmitter();
5 | window.Colander = Object.assign(
6 | window.Colander || {},
7 | {Bus: Event_System, Cache: new Cache()});
8 |
9 | import ColanderBoot from '../colander';
10 |
11 | function install_colander($) {
12 | ColanderBoot();
13 | }
14 |
15 | jQuery(function ($) {
16 | // --
17 | install_colander($);
18 | // --
19 | });
20 |
--------------------------------------------------------------------------------
/colander/frontend/colander/legacy/async-codemirror.js:
--------------------------------------------------------------------------------
1 | export {basicSetup, EditorView} from "codemirror";
2 | export {EditorState} from "@codemirror/state";
3 | export {ayuLight} from 'thememirror';
4 |
--------------------------------------------------------------------------------
/colander/frontend/colander/plugins/EventBus.js:
--------------------------------------------------------------------------------
1 | import EventEmitter from 'events';
2 |
3 | export default {
4 | install(app, options) {
5 | app.config.globalProperties.$bus = new EventEmitter();
6 | }
7 | };
8 |
--------------------------------------------------------------------------------
/colander/static/flags/1x1/ae.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
--------------------------------------------------------------------------------
/colander/static/flags/1x1/am.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/colander/static/flags/1x1/at.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
--------------------------------------------------------------------------------
/colander/static/flags/1x1/ax.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
--------------------------------------------------------------------------------
/colander/static/flags/1x1/az.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/colander/static/flags/1x1/bb.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
--------------------------------------------------------------------------------
/colander/static/flags/1x1/bd.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
--------------------------------------------------------------------------------
/colander/static/flags/1x1/be.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/colander/static/flags/1x1/bf.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/colander/static/flags/1x1/bg.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/colander/static/flags/1x1/bh.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
--------------------------------------------------------------------------------
/colander/static/flags/1x1/bj.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
--------------------------------------------------------------------------------
/colander/static/flags/1x1/bl.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/colander/static/flags/1x1/bq.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/colander/static/flags/1x1/bs.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
--------------------------------------------------------------------------------
/colander/static/flags/1x1/bv.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
--------------------------------------------------------------------------------
/colander/static/flags/1x1/bw.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/colander/static/flags/1x1/ca.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
--------------------------------------------------------------------------------
/colander/static/flags/1x1/cd.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
--------------------------------------------------------------------------------
/colander/static/flags/1x1/cf.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
--------------------------------------------------------------------------------
/colander/static/flags/1x1/cg.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
--------------------------------------------------------------------------------
/colander/static/flags/1x1/ch.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
--------------------------------------------------------------------------------
/colander/static/flags/1x1/ci.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/colander/static/flags/1x1/cl.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
--------------------------------------------------------------------------------
/colander/static/flags/1x1/co.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/colander/static/flags/1x1/cp.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/colander/static/flags/1x1/cr.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/colander/static/flags/1x1/cu.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
--------------------------------------------------------------------------------
/colander/static/flags/1x1/cz.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/colander/static/flags/1x1/de.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/colander/static/flags/1x1/dj.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
--------------------------------------------------------------------------------
/colander/static/flags/1x1/dk.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/colander/static/flags/1x1/dz.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/colander/static/flags/1x1/ee.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/colander/static/flags/1x1/eh.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
--------------------------------------------------------------------------------
/colander/static/flags/1x1/es-ct.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
--------------------------------------------------------------------------------
/colander/static/flags/1x1/es-pv.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
--------------------------------------------------------------------------------
/colander/static/flags/1x1/fi.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/colander/static/flags/1x1/fo.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
--------------------------------------------------------------------------------
/colander/static/flags/1x1/fr.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/colander/static/flags/1x1/ga.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/colander/static/flags/1x1/gb-eng.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/colander/static/flags/1x1/gb-sct.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
--------------------------------------------------------------------------------
/colander/static/flags/1x1/gb.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/colander/static/flags/1x1/gf.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/colander/static/flags/1x1/gg.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
--------------------------------------------------------------------------------
/colander/static/flags/1x1/gh.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
--------------------------------------------------------------------------------
/colander/static/flags/1x1/gl.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
--------------------------------------------------------------------------------
/colander/static/flags/1x1/gm.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
--------------------------------------------------------------------------------
/colander/static/flags/1x1/gn.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/colander/static/flags/1x1/gp.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/colander/static/flags/1x1/gy.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
--------------------------------------------------------------------------------
/colander/static/flags/1x1/hu.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/colander/static/flags/1x1/ic.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/colander/static/flags/1x1/id.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
--------------------------------------------------------------------------------
/colander/static/flags/1x1/ie.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/colander/static/flags/1x1/is.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
--------------------------------------------------------------------------------
/colander/static/flags/1x1/it.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/colander/static/flags/1x1/jm.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/colander/static/flags/1x1/jp.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
--------------------------------------------------------------------------------
/colander/static/flags/1x1/kw.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
--------------------------------------------------------------------------------
/colander/static/flags/1x1/la.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
--------------------------------------------------------------------------------
/colander/static/flags/1x1/lc.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/colander/static/flags/1x1/lt.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/colander/static/flags/1x1/lu.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/colander/static/flags/1x1/lv.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
--------------------------------------------------------------------------------
/colander/static/flags/1x1/ly.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
--------------------------------------------------------------------------------
/colander/static/flags/1x1/ma.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
--------------------------------------------------------------------------------
/colander/static/flags/1x1/mc.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
--------------------------------------------------------------------------------
/colander/static/flags/1x1/mf.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/colander/static/flags/1x1/mg.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/colander/static/flags/1x1/mk.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/colander/static/flags/1x1/ml.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/colander/static/flags/1x1/mq.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/colander/static/flags/1x1/mr.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
--------------------------------------------------------------------------------
/colander/static/flags/1x1/mu.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/colander/static/flags/1x1/mv.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
--------------------------------------------------------------------------------
/colander/static/flags/1x1/ne.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
--------------------------------------------------------------------------------
/colander/static/flags/1x1/ng.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
--------------------------------------------------------------------------------
/colander/static/flags/1x1/nl.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/colander/static/flags/1x1/no.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/colander/static/flags/1x1/pa.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
--------------------------------------------------------------------------------
/colander/static/flags/1x1/pl.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
--------------------------------------------------------------------------------
/colander/static/flags/1x1/pm.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/colander/static/flags/1x1/pr.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
--------------------------------------------------------------------------------
/colander/static/flags/1x1/ps.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
--------------------------------------------------------------------------------
/colander/static/flags/1x1/pw.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
--------------------------------------------------------------------------------
/colander/static/flags/1x1/qa.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
--------------------------------------------------------------------------------
/colander/static/flags/1x1/re.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/colander/static/flags/1x1/ro.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/colander/static/flags/1x1/ru.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/colander/static/flags/1x1/sc.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/colander/static/flags/1x1/sd.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
--------------------------------------------------------------------------------
/colander/static/flags/1x1/se.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
--------------------------------------------------------------------------------
/colander/static/flags/1x1/sj.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/colander/static/flags/1x1/sl.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
--------------------------------------------------------------------------------
/colander/static/flags/1x1/sn.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/colander/static/flags/1x1/so.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
--------------------------------------------------------------------------------
/colander/static/flags/1x1/sr.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
--------------------------------------------------------------------------------
/colander/static/flags/1x1/ss.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/colander/static/flags/1x1/sy.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
--------------------------------------------------------------------------------
/colander/static/flags/1x1/td.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/colander/static/flags/1x1/th.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/colander/static/flags/1x1/tl.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
--------------------------------------------------------------------------------
/colander/static/flags/1x1/to.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
--------------------------------------------------------------------------------
/colander/static/flags/1x1/tr.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/colander/static/flags/1x1/tt.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/colander/static/flags/1x1/tz.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
--------------------------------------------------------------------------------
/colander/static/flags/1x1/ua.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
--------------------------------------------------------------------------------
/colander/static/flags/1x1/vc.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/colander/static/flags/1x1/vn.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
--------------------------------------------------------------------------------
/colander/static/flags/1x1/wf.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/colander/static/flags/1x1/xx.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
--------------------------------------------------------------------------------
/colander/static/flags/1x1/ye.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/colander/static/flags/1x1/yt.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/colander/static/flags/4x3/ae.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
--------------------------------------------------------------------------------
/colander/static/flags/4x3/am.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/colander/static/flags/4x3/at.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
--------------------------------------------------------------------------------
/colander/static/flags/4x3/ax.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
--------------------------------------------------------------------------------
/colander/static/flags/4x3/az.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/colander/static/flags/4x3/bb.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
--------------------------------------------------------------------------------
/colander/static/flags/4x3/bd.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
--------------------------------------------------------------------------------
/colander/static/flags/4x3/be.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/colander/static/flags/4x3/bf.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/colander/static/flags/4x3/bg.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/colander/static/flags/4x3/bh.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
--------------------------------------------------------------------------------
/colander/static/flags/4x3/bj.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
--------------------------------------------------------------------------------
/colander/static/flags/4x3/bl.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/colander/static/flags/4x3/bq.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/colander/static/flags/4x3/bs.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
--------------------------------------------------------------------------------
/colander/static/flags/4x3/bv.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
--------------------------------------------------------------------------------
/colander/static/flags/4x3/bw.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/colander/static/flags/4x3/ca.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
--------------------------------------------------------------------------------
/colander/static/flags/4x3/cd.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/colander/static/flags/4x3/cg.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
--------------------------------------------------------------------------------
/colander/static/flags/4x3/ch.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
--------------------------------------------------------------------------------
/colander/static/flags/4x3/ci.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/colander/static/flags/4x3/cl.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
--------------------------------------------------------------------------------
/colander/static/flags/4x3/co.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/colander/static/flags/4x3/cp.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/colander/static/flags/4x3/cr.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/colander/static/flags/4x3/cu.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
--------------------------------------------------------------------------------
/colander/static/flags/4x3/cz.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/colander/static/flags/4x3/de.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/colander/static/flags/4x3/dj.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
--------------------------------------------------------------------------------
/colander/static/flags/4x3/dk.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/colander/static/flags/4x3/dz.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/colander/static/flags/4x3/ee.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/colander/static/flags/4x3/es-ct.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
--------------------------------------------------------------------------------
/colander/static/flags/4x3/es-pv.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/colander/static/flags/4x3/fi.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/colander/static/flags/4x3/fo.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
--------------------------------------------------------------------------------
/colander/static/flags/4x3/fr.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/colander/static/flags/4x3/ga.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/colander/static/flags/4x3/gb-eng.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/colander/static/flags/4x3/gb-sct.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
--------------------------------------------------------------------------------
/colander/static/flags/4x3/gb.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/colander/static/flags/4x3/gf.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/colander/static/flags/4x3/gg.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
--------------------------------------------------------------------------------
/colander/static/flags/4x3/gh.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
--------------------------------------------------------------------------------
/colander/static/flags/4x3/gl.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
--------------------------------------------------------------------------------
/colander/static/flags/4x3/gm.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
--------------------------------------------------------------------------------
/colander/static/flags/4x3/gn.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/colander/static/flags/4x3/gp.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/colander/static/flags/4x3/gy.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
--------------------------------------------------------------------------------
/colander/static/flags/4x3/hu.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/colander/static/flags/4x3/ic.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/colander/static/flags/4x3/id.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
--------------------------------------------------------------------------------
/colander/static/flags/4x3/ie.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/colander/static/flags/4x3/is.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
--------------------------------------------------------------------------------
/colander/static/flags/4x3/it.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/colander/static/flags/4x3/jm.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/colander/static/flags/4x3/jp.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
--------------------------------------------------------------------------------
/colander/static/flags/4x3/kw.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
--------------------------------------------------------------------------------
/colander/static/flags/4x3/la.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
--------------------------------------------------------------------------------
/colander/static/flags/4x3/lc.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/colander/static/flags/4x3/lt.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/colander/static/flags/4x3/lu.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/colander/static/flags/4x3/lv.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
--------------------------------------------------------------------------------
/colander/static/flags/4x3/ly.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
--------------------------------------------------------------------------------
/colander/static/flags/4x3/ma.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
--------------------------------------------------------------------------------
/colander/static/flags/4x3/mc.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
--------------------------------------------------------------------------------
/colander/static/flags/4x3/mf.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/colander/static/flags/4x3/mg.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/colander/static/flags/4x3/mk.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/colander/static/flags/4x3/ml.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/colander/static/flags/4x3/mq.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/colander/static/flags/4x3/mr.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
--------------------------------------------------------------------------------
/colander/static/flags/4x3/mu.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/colander/static/flags/4x3/mv.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
--------------------------------------------------------------------------------
/colander/static/flags/4x3/ne.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
--------------------------------------------------------------------------------
/colander/static/flags/4x3/ng.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
--------------------------------------------------------------------------------
/colander/static/flags/4x3/nl.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/colander/static/flags/4x3/no.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/colander/static/flags/4x3/nr.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
--------------------------------------------------------------------------------
/colander/static/flags/4x3/pl.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
--------------------------------------------------------------------------------
/colander/static/flags/4x3/pm.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/colander/static/flags/4x3/pr.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
--------------------------------------------------------------------------------
/colander/static/flags/4x3/ps.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
--------------------------------------------------------------------------------
/colander/static/flags/4x3/pw.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
--------------------------------------------------------------------------------
/colander/static/flags/4x3/qa.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
--------------------------------------------------------------------------------
/colander/static/flags/4x3/re.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/colander/static/flags/4x3/ro.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/colander/static/flags/4x3/ru.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/colander/static/flags/4x3/sc.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/colander/static/flags/4x3/sd.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
--------------------------------------------------------------------------------
/colander/static/flags/4x3/se.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
--------------------------------------------------------------------------------
/colander/static/flags/4x3/sj.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/colander/static/flags/4x3/sl.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/colander/static/flags/4x3/sn.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/colander/static/flags/4x3/so.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
--------------------------------------------------------------------------------
/colander/static/flags/4x3/sr.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
--------------------------------------------------------------------------------
/colander/static/flags/4x3/ss.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/colander/static/flags/4x3/sy.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
--------------------------------------------------------------------------------
/colander/static/flags/4x3/td.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/colander/static/flags/4x3/th.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/colander/static/flags/4x3/tl.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
--------------------------------------------------------------------------------
/colander/static/flags/4x3/to.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
--------------------------------------------------------------------------------
/colander/static/flags/4x3/tr.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/colander/static/flags/4x3/tt.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/colander/static/flags/4x3/tz.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
--------------------------------------------------------------------------------
/colander/static/flags/4x3/ua.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
--------------------------------------------------------------------------------
/colander/static/flags/4x3/vc.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/colander/static/flags/4x3/vn.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
--------------------------------------------------------------------------------
/colander/static/flags/4x3/wf.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/colander/static/flags/4x3/ws.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/colander/static/flags/4x3/xx.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
--------------------------------------------------------------------------------
/colander/static/flags/4x3/ye.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/colander/static/flags/4x3/yt.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/colander/static/fonts/.gitkeep:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/PiRogueToolSuite/colander/711a1d41a9036ba8461be80d778244160c1d71b8/colander/static/fonts/.gitkeep
--------------------------------------------------------------------------------
/colander/static/fonts/forkawesome-webfont.eot:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/PiRogueToolSuite/colander/711a1d41a9036ba8461be80d778244160c1d71b8/colander/static/fonts/forkawesome-webfont.eot
--------------------------------------------------------------------------------
/colander/static/fonts/forkawesome-webfont.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/PiRogueToolSuite/colander/711a1d41a9036ba8461be80d778244160c1d71b8/colander/static/fonts/forkawesome-webfont.ttf
--------------------------------------------------------------------------------
/colander/static/fonts/forkawesome-webfont.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/PiRogueToolSuite/colander/711a1d41a9036ba8461be80d778244160c1d71b8/colander/static/fonts/forkawesome-webfont.woff
--------------------------------------------------------------------------------
/colander/static/fonts/forkawesome-webfont.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/PiRogueToolSuite/colander/711a1d41a9036ba8461be80d778244160c1d71b8/colander/static/fonts/forkawesome-webfont.woff2
--------------------------------------------------------------------------------
/colander/static/fonts/nf.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/PiRogueToolSuite/colander/711a1d41a9036ba8461be80d778244160c1d71b8/colander/static/fonts/nf.woff2
--------------------------------------------------------------------------------
/colander/static/images/favicons/favicon-16x16.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/PiRogueToolSuite/colander/711a1d41a9036ba8461be80d778244160c1d71b8/colander/static/images/favicons/favicon-16x16.png
--------------------------------------------------------------------------------
/colander/static/images/favicons/favicon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/PiRogueToolSuite/colander/711a1d41a9036ba8461be80d778244160c1d71b8/colander/static/images/favicons/favicon.ico
--------------------------------------------------------------------------------
/colander/static/images/icons/pencil.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
--------------------------------------------------------------------------------
/colander/static/images/no-thumbnail-yet-256x144.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/PiRogueToolSuite/colander/711a1d41a9036ba8461be80d778244160c1d71b8/colander/static/images/no-thumbnail-yet-256x144.png
--------------------------------------------------------------------------------
/colander/static/js/.gitkeep:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/PiRogueToolSuite/colander/711a1d41a9036ba8461be80d778244160c1d71b8/colander/static/js/.gitkeep
--------------------------------------------------------------------------------
/colander/static/pts-assets/css/pts-assets-codes.css:
--------------------------------------------------------------------------------
1 |
2 | .icon-cyberchef_hat:before { content: '\e801'; } /* '' */
3 | .icon-pts-project:before { content: '\e803'; } /* '' */
4 |
--------------------------------------------------------------------------------
/colander/static/pts-assets/css/pts-assets-ie7-codes.css:
--------------------------------------------------------------------------------
1 |
2 | .icon-cyberchef_hat { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); }
3 | .icon-pts-project { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); }
4 |
--------------------------------------------------------------------------------
/colander/static/pts-assets/css/pts-assets-ie7.css:
--------------------------------------------------------------------------------
1 | [class^="icon-"], [class*=" icon-"] {
2 | font-family: 'pts-assets';
3 | font-style: normal;
4 | font-weight: normal;
5 |
6 | /* fix buttons height */
7 | line-height: 1em;
8 |
9 | /* you can be more comfortable with increased icons size */
10 | /* font-size: 120%; */
11 | }
12 |
13 | .icon-cyberchef_hat { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); }
14 | .icon-pts-project { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); }
15 |
--------------------------------------------------------------------------------
/colander/static/pts-assets/font/pts-assets.eot:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/PiRogueToolSuite/colander/711a1d41a9036ba8461be80d778244160c1d71b8/colander/static/pts-assets/font/pts-assets.eot
--------------------------------------------------------------------------------
/colander/static/pts-assets/font/pts-assets.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/PiRogueToolSuite/colander/711a1d41a9036ba8461be80d778244160c1d71b8/colander/static/pts-assets/font/pts-assets.ttf
--------------------------------------------------------------------------------
/colander/static/pts-assets/font/pts-assets.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/PiRogueToolSuite/colander/711a1d41a9036ba8461be80d778244160c1d71b8/colander/static/pts-assets/font/pts-assets.woff
--------------------------------------------------------------------------------
/colander/static/pts-assets/font/pts-assets.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/PiRogueToolSuite/colander/711a1d41a9036ba8461be80d778244160c1d71b8/colander/static/pts-assets/font/pts-assets.woff2
--------------------------------------------------------------------------------
/colander/templates/403.html:
--------------------------------------------------------------------------------
1 | {% extends "base_error.html" %}
2 |
3 | {% block title %}Forbidden (403){% endblock %}
4 |
5 | {% block content %}
6 |
Forbidden (403)
7 |
8 | {% if exception %}{{ exception }}{% else %}You're not allowed to access this page.{% endif %}
9 | {% endblock content %}
10 |
--------------------------------------------------------------------------------
/colander/templates/404.html:
--------------------------------------------------------------------------------
1 | {% extends "base_error.html" %}
2 |
3 | {% block title %}Page not found{% endblock %}
4 |
5 | {% block content %}
6 | Page not found
7 |
8 | {% if exception %}{{ exception }}{% else %}This is not the page you were looking for.{% endif %}
9 | {% endblock content %}
10 |
--------------------------------------------------------------------------------
/colander/templates/500.html:
--------------------------------------------------------------------------------
1 | {% extends "base_error.html" %}
2 |
3 | {% block title %}Server Error{% endblock %}
4 |
5 | {% block content %}
6 | Ooops!!! 500
7 |
8 | Looks like something went wrong!
9 |
10 | We track these errors automatically, but if the problem persists feel free to contact us. In the meantime, try refreshing.
11 | {% endblock content %}
12 |
--------------------------------------------------------------------------------
/colander/templates/account/account_inactive.html:
--------------------------------------------------------------------------------
1 | {% extends "account/base.html" %}
2 |
3 | {% load i18n %}
4 |
5 | {% block head_title %}{% translate "Account Inactive" %}{% endblock %}
6 |
7 | {% block inner %}
8 | {% translate "Account Inactive" %}
9 |
10 | {% translate "This account is inactive." %}
11 | {% endblock %}
12 |
--------------------------------------------------------------------------------
/colander/templates/account/base.html:
--------------------------------------------------------------------------------
1 | {% extends "account/root_base_copy.html" %}
2 | {% block title %}{% block head_title %}{% endblock head_title %}{% endblock title %}
3 |
4 | {% block content %}
5 |
6 |
7 | {% block inner %}{% endblock %}
8 |
9 |
10 | {% endblock %}
11 |
--------------------------------------------------------------------------------
/colander/templates/account/logout.html:
--------------------------------------------------------------------------------
1 | {% extends "base.html" %}
2 |
3 | {% load i18n %}
4 |
5 | {% block head_title %}{% translate "Sign Out" %}{% endblock %}
6 |
7 | {% block content %}
8 | {% translate "Sign Out" %}
9 |
10 | {% translate 'Are you sure you want to sign out?' %}
11 |
12 |
19 | {% endblock %}
20 |
--------------------------------------------------------------------------------
/colander/templates/account/password_change.html:
--------------------------------------------------------------------------------
1 | {% extends "account/base.html" %}
2 |
3 | {% load i18n %}
4 | {% load crispy_forms_tags %}
5 |
6 | {% block head_title %}{% translate "Change Password" %}{% endblock %}
7 |
8 | {% block inner %}
9 | {% translate "Change Password" %}
10 |
11 |
16 | {% endblock %}
17 |
--------------------------------------------------------------------------------
/colander/templates/account/password_reset_done.html:
--------------------------------------------------------------------------------
1 | {% extends "account/base.html" %}
2 |
3 | {% load i18n %}
4 | {% load account %}
5 |
6 | {% block head_title %}{% translate "Password Reset" %}{% endblock %}
7 |
8 | {% block inner %}
9 | {% translate "Password Reset" %}
10 |
11 | {% if user.is_authenticated %}
12 | {% include "account/snippets/already_logged_in.html" %}
13 | {% endif %}
14 |
15 | {% blocktranslate %}We have sent you an e-mail. Please contact us if you do not receive it within a few minutes.{% endblocktranslate %}
16 | {% blocktranslate %}Go back to login page{% endblocktranslate %}
17 | {% endblock %}
18 |
--------------------------------------------------------------------------------
/colander/templates/account/password_reset_from_key_done.html:
--------------------------------------------------------------------------------
1 | {% extends "account/base.html" %}
2 |
3 | {% load i18n %}
4 | {% block head_title %}{% translate "Change Password" %}{% endblock %}
5 |
6 | {% block inner %}
7 | {% translate "Change Password" %}
8 | {% translate 'Your password is now changed.' %}
9 | {% endblock %}
10 |
--------------------------------------------------------------------------------
/colander/templates/account/password_set.html:
--------------------------------------------------------------------------------
1 | {% extends "account/base.html" %}
2 |
3 | {% load i18n %}
4 | {% load crispy_forms_tags %}
5 |
6 | {% block head_title %}{% translate "Set Password" %}{% endblock %}
7 |
8 | {% block inner %}
9 | {% translate "Set Password" %}
10 |
11 |
16 | {% endblock %}
17 |
--------------------------------------------------------------------------------
/colander/templates/account/signup_closed.html:
--------------------------------------------------------------------------------
1 | {% extends "account/base.html" %}
2 |
3 | {% load i18n %}
4 |
5 | {% block head_title %}{% translate "Sign Up Closed" %}{% endblock %}
6 |
7 | {% block inner %}
8 | {% translate "Sign Up Closed" %}
9 |
10 | {% translate "We are sorry, but the sign up is currently closed." %}
11 | {% endblock %}
12 |
--------------------------------------------------------------------------------
/colander/templates/account/verification_sent.html:
--------------------------------------------------------------------------------
1 | {% extends "account/base.html" %}
2 |
3 | {% load i18n %}
4 |
5 | {% block head_title %}{% translate "Verify Your E-mail Address" %}{% endblock %}
6 |
7 | {% block inner %}
8 | {% translate "Verify Your E-mail Address" %}
9 |
10 | {% blocktranslate %}We have sent an e-mail to you for verification. Follow the link provided to finalize the signup process. Please contact us if you do not receive it within a few minutes.{% endblocktranslate %}
11 |
12 | {% endblock %}
13 |
--------------------------------------------------------------------------------
/colander/templates/case/graph.html:
--------------------------------------------------------------------------------
1 | {% load static %}
2 |
3 | {% if subgraph %}
4 |
9 | {% else %}
10 |
14 | {% endif %}
15 |
--------------------------------------------------------------------------------
/colander/templates/feed/detection_rule_out_feed_controls.html:
--------------------------------------------------------------------------------
1 | {% load i18n %}
2 |
3 |
4 |
17 |
--------------------------------------------------------------------------------
/colander/templates/feed/entity_out_feed_controls.html:
--------------------------------------------------------------------------------
1 | {% load i18n %}
2 |
3 |
4 |
17 |
--------------------------------------------------------------------------------
/colander/templates/helpers/date_since.html:
--------------------------------------------------------------------------------
1 | {% include "icons/date_icon.html" with c="text-primary" %}
2 | {{ date }}
3 |
4 | {% include "icons/since_icon.html" with c="text-muted" %}
5 | {{ date|timesince }} ago
6 |
7 |
--------------------------------------------------------------------------------
/colander/templates/helpers/dynamic_type_selector.html:
--------------------------------------------------------------------------------
1 |
2 |
Entity
3 |
10 | [[option.name]]
11 |
12 |
13 |
14 |
Type
15 |
22 | [[option.name]]
23 |
24 |
25 |
--------------------------------------------------------------------------------
/colander/templates/helpers/entity_comments.html:
--------------------------------------------------------------------------------
1 | {% load i18n %}
2 |
3 |
4 |
5 |
{% translate "Comments" %}
6 |
7 | {% for comment in entity.sorted_comments %}
8 | {% include "comment/list_item.html" %}
9 | {% empty %}
10 | {% translate "No comment" %}
11 | {% endfor %}
12 |
13 |
14 | {% include "comment/form.html" with elt_id=entity.id %}
15 |
16 |
17 |
18 |
--------------------------------------------------------------------------------
/colander/templates/helpers/extra_attributes_light.html:
--------------------------------------------------------------------------------
1 | {% load i18n %}
2 | {% load colander_tags %}
3 |
4 |
5 |
6 | {% for k,v in attributes.items %}
7 | {% if v %}
8 |
9 | {{ k|to_title }}
10 | {{ v }}
11 |
12 | {% endif %}
13 | {% endfor %}
14 |
15 |
16 |
--------------------------------------------------------------------------------
/colander/templates/helpers/square_pill.html:
--------------------------------------------------------------------------------
1 | {{ value }}
2 |
--------------------------------------------------------------------------------
/colander/templates/helpers/tags.html:
--------------------------------------------------------------------------------
1 | {% load colander_tags %}
2 |
3 | {% if entity.attributes.tags %}
4 | {% for t in entity.attributes.tags|split:"," %}
5 | {{ t }}
6 | {% endfor %}
7 | {% endif %}
8 |
--------------------------------------------------------------------------------
/colander/templates/icons/actor_icon.html:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/colander/templates/icons/artifact_icon.html:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/colander/templates/icons/color_icon.html:
--------------------------------------------------------------------------------
1 | {% if elt and elt.color %}
2 |
3 | {% else %}
4 |
5 | {% endif %}
6 |
--------------------------------------------------------------------------------
/colander/templates/icons/comment_icon.html:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/colander/templates/icons/data_fragment_icon.html:
--------------------------------------------------------------------------------
1 | {# #}
2 |
3 |
--------------------------------------------------------------------------------
/colander/templates/icons/date_icon.html:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/colander/templates/icons/detection_rule_icon.html:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/colander/templates/icons/device_icon.html:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/colander/templates/icons/event_icon.html:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/colander/templates/icons/experiment_icon.html:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/colander/templates/icons/id_icon.html:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/colander/templates/icons/mimetype_icon.html:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/colander/templates/icons/observable_icon.html:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/colander/templates/icons/out_feed_icon.html:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/colander/templates/icons/relation_icon.html:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/colander/templates/icons/since_icon.html:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/colander/templates/icons/team_icon.html:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/colander/templates/icons/threat_icon.html:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/colander/templates/icons/traffic_light_icon.html:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/colander/templates/icons/user_icon.html:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/colander/templates/import/csv.html:
--------------------------------------------------------------------------------
1 | {% extends "pages/workspace/base.html" %}
2 | {% load i18n %}
3 | {% load static %}
4 | {% load crispy_forms_tags %}
5 | {% load crispy_forms_field %}
6 | {% load colander_tags %}
7 |
8 | {% block content %}
9 | {% block inner-content %}
10 |
15 | {% endblock %}
16 | {% endblock %}
17 |
--------------------------------------------------------------------------------
/colander/templates/pages/about.html:
--------------------------------------------------------------------------------
1 | {% extends "base.html" %}
2 |
--------------------------------------------------------------------------------
/colander/templates/pages/case/details.html:
--------------------------------------------------------------------------------
1 | {% extends "base.html" %}
2 | {% load crispy_forms_tags %}
3 | {% load crispy_forms_field %}
4 | {% load i18n %}
5 |
6 | {% block content %}
7 | {% include "case/details.html" %}
8 | {% endblock content %}
9 |
--------------------------------------------------------------------------------
/colander/templates/pages/collaborate/team_details.html:
--------------------------------------------------------------------------------
1 | {% extends "pages/collaborate/base.html" %}
2 | {% load crispy_forms_tags %}
3 | {% load crispy_forms_field %}
4 | {% load i18n %}
5 |
6 | {% block inner-content %}
7 | {% include "team/details.html" %}
8 | {% endblock inner-content %}
9 |
--------------------------------------------------------------------------------
/colander/templates/pages/collect/actor_details.html:
--------------------------------------------------------------------------------
1 | {% extends "pages/collect/base.html" %}
2 | {% load crispy_forms_tags %}
3 | {% load crispy_forms_field %}
4 | {% load i18n %}
5 |
6 | {% block inner-content %}
7 | {% include "actor/details.html" %}
8 | {% endblock inner-content %}
9 |
--------------------------------------------------------------------------------
/colander/templates/pages/collect/artifact_details.html:
--------------------------------------------------------------------------------
1 | {% extends "pages/collect/base.html" %}
2 | {% load crispy_forms_tags %}
3 | {% load crispy_forms_field %}
4 | {% load i18n %}
5 |
6 | {% block inner-content %}
7 | {% include "artifact/details.html" %}
8 | {% endblock inner-content %}
9 |
--------------------------------------------------------------------------------
/colander/templates/pages/collect/case_details.html:
--------------------------------------------------------------------------------
1 | {% extends "pages/collect/base.html" %}
2 | {% load crispy_forms_tags %}
3 | {% load crispy_forms_field %}
4 | {% load i18n %}
5 |
6 | {% block inner-content %}
7 | {% include "case/details.html" %}
8 | {% endblock inner-content %}
9 |
--------------------------------------------------------------------------------
/colander/templates/pages/collect/data_fragment_details.html:
--------------------------------------------------------------------------------
1 | {% extends "pages/collect/base.html" %}
2 | {% load crispy_forms_tags %}
3 | {% load crispy_forms_field %}
4 | {% load i18n %}
5 |
6 | {% block inner-content %}
7 | {% include "data_fragment/details.html" %}
8 | {% endblock inner-content %}
9 |
--------------------------------------------------------------------------------
/colander/templates/pages/collect/detection_rule_details.html:
--------------------------------------------------------------------------------
1 | {% extends "pages/collect/base.html" %}
2 | {% load crispy_forms_tags %}
3 | {% load crispy_forms_field %}
4 | {% load i18n %}
5 |
6 | {% block inner-content %}
7 | {% include "detection_rule/details.html" %}
8 | {% endblock inner-content %}
9 |
--------------------------------------------------------------------------------
/colander/templates/pages/collect/device_details.html:
--------------------------------------------------------------------------------
1 | {% extends "pages/collect/base.html" %}
2 | {% load crispy_forms_tags %}
3 | {% load crispy_forms_field %}
4 | {% load i18n %}
5 |
6 | {% block inner-content %}
7 | {% include "device/details.html" %}
8 | {% endblock inner-content %}
9 |
--------------------------------------------------------------------------------
/colander/templates/pages/collect/event_details.html:
--------------------------------------------------------------------------------
1 | {% extends "pages/collect/base.html" %}
2 | {% load crispy_forms_tags %}
3 | {% load crispy_forms_field %}
4 | {% load i18n %}
5 |
6 | {% block inner-content %}
7 | {% include "event/details.html" %}
8 | {% endblock inner-content %}
9 |
--------------------------------------------------------------------------------
/colander/templates/pages/collect/experiment_details.html:
--------------------------------------------------------------------------------
1 | {% extends "pages/collect/base.html" %}
2 | {% load crispy_forms_tags %}
3 | {% load crispy_forms_field %}
4 | {% load i18n %}
5 |
6 | {% block inner-content %}
7 | {% include "experiment/details.html" %}
8 | {% endblock inner-content %}
9 |
--------------------------------------------------------------------------------
/colander/templates/pages/collect/observable_details.html:
--------------------------------------------------------------------------------
1 | {% extends "pages/collect/base.html" %}
2 | {% load crispy_forms_tags %}
3 | {% load crispy_forms_field %}
4 | {% load i18n %}
5 |
6 | {% block inner-content %}
7 | {% include "observable/details.html" %}
8 | {% endblock inner-content %}
9 |
--------------------------------------------------------------------------------
/colander/templates/pages/collect/relation_details.html:
--------------------------------------------------------------------------------
1 | {% extends "pages/collect/base.html" %}
2 | {% load crispy_forms_tags %}
3 | {% load crispy_forms_field %}
4 | {% load i18n %}
5 |
6 | {% block inner-content %}
7 | {% include "entity_relation/details.html" %}
8 | {% endblock inner-content %}
9 |
--------------------------------------------------------------------------------
/colander/templates/pages/collect/threat_details.html:
--------------------------------------------------------------------------------
1 | {% extends "pages/collect/base.html" %}
2 | {% load crispy_forms_tags %}
3 | {% load crispy_forms_field %}
4 | {% load i18n %}
5 |
6 | {% block inner-content %}
7 | {% include "threat/details.html" %}
8 | {% endblock inner-content %}
9 |
--------------------------------------------------------------------------------
/colander/templates/pages/document/base.html:
--------------------------------------------------------------------------------
1 | {% extends "pages/workspace/base.html" %}
2 | {% load static %}
3 |
4 | {% block offcanvas %}{% endblock offcanvas %}
5 | {% block content %}
6 | {% block inner-content %}
7 |
8 |
9 |
Case documentation
10 | {% include "case/documentation_form.html" with documentation_form=request.documentation_form %}
11 |
12 |
13 | {% endblock inner-content %}
14 | {% endblock content %}
15 |
16 |
--------------------------------------------------------------------------------
/colander/templates/pages/graph/subgraph.html:
--------------------------------------------------------------------------------
1 | {% extends "pages/graph/base.html" %}
2 | {% load static %}
3 |
4 | {% block inner-content %}
5 |
6 |
7 |
{{ subgraph.name }}
8 | {% include "case/graph.html" with subgraph=subgraph %}
9 |
10 |
11 | {% endblock inner-content %}
12 |
13 |
--------------------------------------------------------------------------------
/colander/templates/pages/quick_search/result_list.html:
--------------------------------------------------------------------------------
1 | {% extends "pages/collect/base.html" %}
2 | {% load i18n %}
3 |
4 | {% block inner-content %}
5 |
6 |
7 | {% include "pages/quick_search/m_result_table.html" with results=results %}
8 |
9 |
10 | {% endblock inner-content %}
11 |
12 |
13 |
14 |
15 | {% block inline_javascript %}
16 | {% comment %}
17 |
25 | {% endcomment %}
26 | {% endblock inline_javascript %}
27 |
--------------------------------------------------------------------------------
/colander/templates/pages/status/module_row.html:
--------------------------------------------------------------------------------
1 |
2 |
3 | {% if module.configured > 0 %}
4 |
5 | {% else %}
6 |
7 | {% endif %}
8 | {{ module.vendor }}
9 |
10 | {{ module.id }}
11 |
12 | {% include "helpers/square_pill.html" with value=module.configured %}
13 | API key{{ module.configured|pluralize }} configured
14 |
15 | {{ module.description }}
16 |
17 |
--------------------------------------------------------------------------------
/colander/templates/subgraph/pin_toggler.html:
--------------------------------------------------------------------------------
1 | {% load colander_tags %}
2 | {% pinned subgraph as is_pinned %}
3 |
5 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/colander/templates/tlp/show_tlp_pap.html:
--------------------------------------------------------------------------------
1 |
2 | {% include "tlp/badge_tlp.html" with tlp=element.tlp %}
3 | {% if break %} {% endif %}
4 | {% include "tlp/badge_pap.html" with pap=element.pap %}
5 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/colander/templates/users/user_form.html:
--------------------------------------------------------------------------------
1 | {% extends "base.html" %}
2 | {% load crispy_forms_tags %}
3 |
4 | {% block title %}{{ user.username }}{% endblock %}
5 |
6 | {% block content %}
7 | {{ user.username }}
8 |
17 | {% endblock %}
18 |
--------------------------------------------------------------------------------
/colander/users/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/PiRogueToolSuite/colander/711a1d41a9036ba8461be80d778244160c1d71b8/colander/users/__init__.py
--------------------------------------------------------------------------------
/colander/users/adapters.py:
--------------------------------------------------------------------------------
1 | from typing import Any
2 |
3 | from allauth.socialaccount.adapter import DefaultSocialAccountAdapter
4 | from allauth_2fa.adapter import OTPAdapter
5 | from django.conf import settings
6 | from django.http import HttpRequest
7 |
8 |
9 | class AccountAdapter(OTPAdapter):
10 | def is_open_for_signup(self, request: HttpRequest):
11 | return getattr(settings, "ACCOUNT_ALLOW_REGISTRATION", True)
12 |
13 |
14 | class SocialAccountAdapter(DefaultSocialAccountAdapter):
15 | def is_open_for_signup(self, request: HttpRequest, sociallogin: Any):
16 | return getattr(settings, "ACCOUNT_ALLOW_REGISTRATION", True)
17 |
--------------------------------------------------------------------------------
/colander/users/api/serializers.py:
--------------------------------------------------------------------------------
1 | from django.contrib.auth import get_user_model
2 | from rest_framework import serializers
3 |
4 | User = get_user_model()
5 |
6 |
7 | class UserSerializer(serializers.ModelSerializer):
8 | class Meta:
9 | model = User
10 | fields = ["username", "name", "url"]
11 |
12 | extra_kwargs = {
13 | "url": {"view_name": "api:user-detail", "lookup_field": "username"}
14 | }
15 |
--------------------------------------------------------------------------------
/colander/users/apps.py:
--------------------------------------------------------------------------------
1 | from django.apps import AppConfig
2 | from django.utils.translation import gettext_lazy as _
3 |
4 |
5 | class UsersConfig(AppConfig):
6 | name = "colander.users"
7 | verbose_name = _("Users")
8 |
9 | def ready(self):
10 | try:
11 | import colander.users.signals # noqa F401
12 | except ImportError:
13 | pass
14 |
--------------------------------------------------------------------------------
/colander/users/context_processors.py:
--------------------------------------------------------------------------------
1 | from django.conf import settings
2 |
3 |
4 | def allauth_settings(request):
5 | """Expose some settings from django-allauth in templates."""
6 | return {
7 | "ACCOUNT_ALLOW_REGISTRATION": settings.ACCOUNT_ALLOW_REGISTRATION,
8 | }
9 |
--------------------------------------------------------------------------------
/colander/users/migrations/0002_user_type.py:
--------------------------------------------------------------------------------
1 | # Generated by Django 3.2.15 on 2022-09-29 16:08
2 |
3 | from django.db import migrations, models
4 |
5 |
6 | class Migration(migrations.Migration):
7 |
8 | dependencies = [
9 | ('users', '0001_initial'),
10 | ]
11 |
12 | operations = [
13 | migrations.AddField(
14 | model_name='user',
15 | name='type',
16 | field=models.CharField(choices=[('USER', 'Regular user'), ('APP', 'External application'), ('DEVICE', 'External device')], default='USER', max_length=16),
17 | ),
18 | ]
19 |
--------------------------------------------------------------------------------
/colander/users/migrations/0003_user_contributor_id.py:
--------------------------------------------------------------------------------
1 | # Generated by Django 3.2.18 on 2023-05-15 12:41
2 |
3 | from django.db import migrations, models
4 | import uuid
5 |
6 |
7 | class Migration(migrations.Migration):
8 |
9 | dependencies = [
10 | ('users', '0002_user_type'),
11 | ]
12 |
13 | operations = [
14 | migrations.AddField(
15 | model_name='user',
16 | name='contributor_id',
17 | field=models.UUIDField(default=uuid.uuid4, editable=False, help_text='Contributor ID.'),
18 | ),
19 | ]
20 |
--------------------------------------------------------------------------------
/colander/users/migrations/0004_user_preferences.py:
--------------------------------------------------------------------------------
1 | # Generated by Django 4.2.20 on 2025-05-22 15:48
2 |
3 | from django.db import migrations, models
4 |
5 |
6 | class Migration(migrations.Migration):
7 |
8 | dependencies = [
9 | ("users", "0003_user_contributor_id"),
10 | ]
11 |
12 | operations = [
13 | migrations.AddField(
14 | model_name="user",
15 | name="preferences",
16 | field=models.JSONField(blank=True, null=True, verbose_name="User preferences"),
17 | ),
18 | ]
19 |
--------------------------------------------------------------------------------
/colander/users/migrations/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/PiRogueToolSuite/colander/711a1d41a9036ba8461be80d778244160c1d71b8/colander/users/migrations/__init__.py
--------------------------------------------------------------------------------
/colander/users/tests/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/PiRogueToolSuite/colander/711a1d41a9036ba8461be80d778244160c1d71b8/colander/users/tests/__init__.py
--------------------------------------------------------------------------------
/colander/users/tests/test_models.py:
--------------------------------------------------------------------------------
1 | from colander.users.models import User
2 |
3 |
4 | def test_user_get_absolute_url(user: User):
5 | assert user.get_absolute_url() == f"/users/{user.username}/"
6 |
--------------------------------------------------------------------------------
/colander/users/tests/test_urls.py:
--------------------------------------------------------------------------------
1 | from django.urls import resolve, reverse
2 |
3 | from colander.users.models import User
4 |
5 |
6 | def test_detail(user: User):
7 | assert (
8 | reverse("users:detail", kwargs={"username": user.username})
9 | == f"/users/{user.username}/"
10 | )
11 | assert resolve(f"/users/{user.username}/").view_name == "users:detail"
12 |
13 |
14 | def test_update():
15 | assert reverse("users:update") == "/users/~update/"
16 | assert resolve("/users/~update/").view_name == "users:update"
17 |
18 |
19 | def test_redirect():
20 | assert reverse("users:redirect") == "/users/~redirect/"
21 | assert resolve("/users/~redirect/").view_name == "users:redirect"
22 |
--------------------------------------------------------------------------------
/colander/users/urls.py:
--------------------------------------------------------------------------------
1 | from django.urls import path
2 |
3 | from colander.users.views import (
4 | user_detail_view,
5 | user_redirect_view,
6 | user_update_view,
7 | regenerate_token_api,
8 | )
9 |
10 | app_name = "users"
11 | urlpatterns = [
12 | path("~redirect/", view=user_redirect_view, name="redirect"),
13 | path("~update/", view=user_update_view, name="update"),
14 | path("/", view=user_detail_view, name="detail"),
15 | path("/regenerate-token", view=regenerate_token_api, name="regenerate_token"),
16 | ]
17 |
--------------------------------------------------------------------------------
/colander/utils/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/PiRogueToolSuite/colander/711a1d41a9036ba8461be80d778244160c1d71b8/colander/utils/__init__.py
--------------------------------------------------------------------------------
/colander/utils/storages.py:
--------------------------------------------------------------------------------
1 | from storages.backends.gcloud import GoogleCloudStorage
2 |
3 |
4 | class StaticRootGoogleCloudStorage(GoogleCloudStorage):
5 | location = "static"
6 | default_acl = "publicRead"
7 |
8 |
9 | class MediaRootGoogleCloudStorage(GoogleCloudStorage):
10 | location = "media"
11 | file_overwrite = False
12 |
--------------------------------------------------------------------------------
/colander/websocket/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/PiRogueToolSuite/colander/711a1d41a9036ba8461be80d778244160c1d71b8/colander/websocket/__init__.py
--------------------------------------------------------------------------------
/compose/local/django/django-q/start:
--------------------------------------------------------------------------------
1 | #!/bin/bash
2 |
3 | set -o errexit
4 | set -o nounset
5 |
6 |
7 | python manage.py qcluster
8 |
--------------------------------------------------------------------------------
/compose/local/django/start:
--------------------------------------------------------------------------------
1 | #!/bin/bash
2 |
3 | set -o errexit
4 | set -o pipefail
5 | set -o nounset
6 |
7 |
8 | python manage.py migrate --skip-checks
9 | python manage.py insert_default_data --skip-checks
10 |
11 | #exec gunicorn config.asgi_local:application --bind 0.0.0.0:8000 --reload-engine 'inotify' --reload -k uvicorn.workers.UvicornWorker
12 | exec uvicorn config.asgi_local:application --host 0.0.0.0 --port 8000 --reload --reload-include '*.html'
13 |
--------------------------------------------------------------------------------
/compose/local/docs/start:
--------------------------------------------------------------------------------
1 | #!/bin/bash
2 |
3 | set -o errexit
4 | set -o pipefail
5 | set -o nounset
6 |
7 | make livehtml
8 |
--------------------------------------------------------------------------------
/compose/production/django/django-q/start:
--------------------------------------------------------------------------------
1 | #!/bin/bash
2 |
3 | set -o errexit
4 | set -o nounset
5 |
6 |
7 | python manage.py migrate --skip-checks
8 | python manage.py qcluster
9 |
--------------------------------------------------------------------------------
/compose/production/postgres/Dockerfile:
--------------------------------------------------------------------------------
1 | FROM postgres:14
2 |
3 | COPY ./compose/production/postgres/maintenance /usr/local/bin/maintenance
4 | RUN chmod +x /usr/local/bin/maintenance/*
5 | RUN mv /usr/local/bin/maintenance/* /usr/local/bin \
6 | && rmdir /usr/local/bin/maintenance
7 |
--------------------------------------------------------------------------------
/compose/production/postgres/maintenance/_sourced/constants.sh:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env bash
2 |
3 |
4 | BACKUP_DIR_PATH='/backups'
5 | BACKUP_FILE_PREFIX='backup'
6 |
--------------------------------------------------------------------------------
/compose/production/postgres/maintenance/_sourced/countdown.sh:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env bash
2 |
3 |
4 | countdown() {
5 | declare desc="A simple countdown. Source: https://superuser.com/a/611582"
6 | local seconds="${1}"
7 | local d=$(($(date +%s) + "${seconds}"))
8 | while [ "$d" -ge `date +%s` ]; do
9 | echo -ne "$(date -u --date @$(($d - `date +%s`)) +%H:%M:%S)\r";
10 | sleep 0.1
11 | done
12 | }
13 |
--------------------------------------------------------------------------------
/compose/production/postgres/maintenance/_sourced/messages.sh:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env bash
2 |
3 |
4 | message_newline() {
5 | echo
6 | }
7 |
8 | message_debug()
9 | {
10 | echo -e "DEBUG: ${@}"
11 | }
12 |
13 | message_welcome()
14 | {
15 | echo -e "\e[1m${@}\e[0m"
16 | }
17 |
18 | message_warning()
19 | {
20 | echo -e "\e[33mWARNING\e[0m: ${@}"
21 | }
22 |
23 | message_error()
24 | {
25 | echo -e "\e[31mERROR\e[0m: ${@}"
26 | }
27 |
28 | message_info()
29 | {
30 | echo -e "\e[37mINFO\e[0m: ${@}"
31 | }
32 |
33 | message_suggestion()
34 | {
35 | echo -e "\e[33mSUGGESTION\e[0m: ${@}"
36 | }
37 |
38 | message_success()
39 | {
40 | echo -e "\e[32mSUCCESS\e[0m: ${@}"
41 | }
42 |
--------------------------------------------------------------------------------
/compose/production/postgres/maintenance/_sourced/yes_no.sh:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env bash
2 |
3 |
4 | yes_no() {
5 | declare desc="Prompt for confirmation. \$\"\{1\}\": confirmation message."
6 | local arg1="${1}"
7 |
8 | local response=
9 | read -r -p "${arg1} (y/[n])? " response
10 | if [[ "${response}" =~ ^[Yy]$ ]]
11 | then
12 | exit 0
13 | else
14 | exit 1
15 | fi
16 | }
17 |
--------------------------------------------------------------------------------
/compose/production/postgres/maintenance/backups:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env bash
2 |
3 |
4 | ### View backups.
5 | ###
6 | ### Usage:
7 | ### $ docker-compose -f .yml (exec |run --rm) postgres backups
8 |
9 |
10 | set -o errexit
11 | set -o pipefail
12 | set -o nounset
13 |
14 |
15 | working_dir="$(dirname ${0})"
16 | source "${working_dir}/_sourced/constants.sh"
17 | source "${working_dir}/_sourced/messages.sh"
18 |
19 |
20 | message_welcome "These are the backups you have got:"
21 |
22 | ls -lht "${BACKUP_DIR_PATH}"
23 |
--------------------------------------------------------------------------------
/compose/production/traefik/Dockerfile:
--------------------------------------------------------------------------------
1 | FROM traefik:v2.11.2
2 | RUN mkdir -p /etc/traefik/acme \
3 | && touch /etc/traefik/acme/acme.json \
4 | && chmod 600 /etc/traefik/acme/acme.json
5 | COPY ./compose/production/traefik/traefik.yml /etc/traefik
6 |
--------------------------------------------------------------------------------
/config/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/PiRogueToolSuite/colander/711a1d41a9036ba8461be80d778244160c1d71b8/config/__init__.py
--------------------------------------------------------------------------------
/config/settings/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/PiRogueToolSuite/colander/711a1d41a9036ba8461be80d778244160c1d71b8/config/settings/__init__.py
--------------------------------------------------------------------------------
/config/ws_router.py:
--------------------------------------------------------------------------------
1 | from django.urls import re_path, path
2 |
3 | from colander.websocket.consumers import CaseContextConsumer
4 |
5 | websocket_urlpatterns = [
6 | #path('global/', GlobalContextConsumer.as_asgi()),
7 | re_path(r'(ws/(?P[0-9A-Fa-f-]+)/)?.*', CaseContextConsumer.as_asgi()),
8 | ]
9 |
--------------------------------------------------------------------------------
/deploy_package/.envs/.tpl/.colander-postgres:
--------------------------------------------------------------------------------
1 | # PostgreSQL
2 | # ------------------------------------------------------------------------------
3 | POSTGRES_HOST=colander-postgres
4 | POSTGRES_PORT=5432
5 | POSTGRES_DB=colander
6 | POSTGRES_USER=$(pwgen -B 32 1)
7 | POSTGRES_PASSWORD=$(pwgen -B 64 1)
8 |
--------------------------------------------------------------------------------
/deploy_package/.envs/.tpl/.keycloak:
--------------------------------------------------------------------------------
1 | DB_VENDOR=postgres
2 | KEYCLOAK_DATABASE_HOST=keycloak-postgres
3 | KEYCLOAK_DATABASE_PORT=5432
4 | KEYCLOAK_DATABASE_NAME=keycloak
5 | KEYCLOAK_DATABASE_USER=$(pwgen -B 32 1)
6 | KEYCLOAK_DATABASE_PASSWORD=$(pwgen -B 64 1)
7 |
8 | KEYCLOAK_USER=keycloakadmin
9 | KEYCLOAK_PASSWORD=$(pwgen -B 32 1)
10 |
11 | PROXY_ADDRESS_FORWARDING='true'
12 | KEYCLOAK_LOGLEVEL=WARNING
13 |
--------------------------------------------------------------------------------
/deploy_package/.envs/.tpl/.keycloak-postgres:
--------------------------------------------------------------------------------
1 | # PostgreSQL
2 | # ------------------------------------------------------------------------------
3 | POSTGRES_HOST=keycloak-postgres
4 | POSTGRES_PORT=5432
5 | POSTGRES_DB=keycloak
6 | POSTGRES_USER=${KEYCLOAK_DATABASE_USER}
7 | POSTGRES_PASSWORD=${KEYCLOAK_DATABASE_PASSWORD}
8 |
--------------------------------------------------------------------------------
/deploy_package/.envs/.tpl/.minio:
--------------------------------------------------------------------------------
1 | # Minio
2 | # ------------------------------------------------------------------------------
3 | MINIO_ACCESS_KEY=$(pwgen -B 21 1)
4 | MINIO_SECRET_KEY=$(pwgen -B 42 1)
5 |
--------------------------------------------------------------------------------
/deploy_package/.envs/.tpl/.threatr-postgres:
--------------------------------------------------------------------------------
1 | # PostgreSQL
2 | # ------------------------------------------------------------------------------
3 | POSTGRES_HOST=threatr-postgres
4 | POSTGRES_PORT=5432
5 | POSTGRES_DB=threatr
6 | POSTGRES_USER=$(pwgen -B 32 1)
7 | POSTGRES_PASSWORD=$(pwgen -B 64 1)
8 |
--------------------------------------------------------------------------------
/deploy_package/compose/production/postgres/Dockerfile:
--------------------------------------------------------------------------------
1 | FROM postgres:14
2 |
3 | COPY ./compose/production/postgres/maintenance /usr/local/bin/maintenance
4 | RUN chmod +x /usr/local/bin/maintenance/*
5 | RUN mv /usr/local/bin/maintenance/* /usr/local/bin \
6 | && rmdir /usr/local/bin/maintenance
7 |
--------------------------------------------------------------------------------
/deploy_package/compose/production/postgres/maintenance/_sourced/constants.sh:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env bash
2 |
3 |
4 | BACKUP_DIR_PATH='/backups'
5 | BACKUP_FILE_PREFIX='backup'
6 |
--------------------------------------------------------------------------------
/deploy_package/compose/production/postgres/maintenance/_sourced/countdown.sh:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env bash
2 |
3 |
4 | countdown() {
5 | declare desc="A simple countdown. Source: https://superuser.com/a/611582"
6 | local seconds="${1}"
7 | local d=$(($(date +%s) + "${seconds}"))
8 | while [ "$d" -ge `date +%s` ]; do
9 | echo -ne "$(date -u --date @$(($d - `date +%s`)) +%H:%M:%S)\r";
10 | sleep 0.1
11 | done
12 | }
13 |
--------------------------------------------------------------------------------
/deploy_package/compose/production/postgres/maintenance/_sourced/messages.sh:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env bash
2 |
3 |
4 | message_newline() {
5 | echo
6 | }
7 |
8 | message_debug()
9 | {
10 | echo -e "DEBUG: ${@}"
11 | }
12 |
13 | message_welcome()
14 | {
15 | echo -e "\e[1m${@}\e[0m"
16 | }
17 |
18 | message_warning()
19 | {
20 | echo -e "\e[33mWARNING\e[0m: ${@}"
21 | }
22 |
23 | message_error()
24 | {
25 | echo -e "\e[31mERROR\e[0m: ${@}"
26 | }
27 |
28 | message_info()
29 | {
30 | echo -e "\e[37mINFO\e[0m: ${@}"
31 | }
32 |
33 | message_suggestion()
34 | {
35 | echo -e "\e[33mSUGGESTION\e[0m: ${@}"
36 | }
37 |
38 | message_success()
39 | {
40 | echo -e "\e[32mSUCCESS\e[0m: ${@}"
41 | }
42 |
--------------------------------------------------------------------------------
/deploy_package/compose/production/postgres/maintenance/_sourced/yes_no.sh:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env bash
2 |
3 |
4 | yes_no() {
5 | declare desc="Prompt for confirmation. \$\"\{1\}\": confirmation message."
6 | local arg1="${1}"
7 |
8 | local response=
9 | read -r -p "${arg1} (y/[n])? " response
10 | if [[ "${response}" =~ ^[Yy]$ ]]
11 | then
12 | exit 0
13 | else
14 | exit 1
15 | fi
16 | }
17 |
--------------------------------------------------------------------------------
/deploy_package/compose/production/postgres/maintenance/backups:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env bash
2 |
3 |
4 | ### View backups.
5 | ###
6 | ### Usage:
7 | ### $ docker-compose -f .yml (exec |run --rm) postgres backups
8 |
9 |
10 | set -o errexit
11 | set -o pipefail
12 | set -o nounset
13 |
14 |
15 | working_dir="$(dirname ${0})"
16 | source "${working_dir}/_sourced/constants.sh"
17 | source "${working_dir}/_sourced/messages.sh"
18 |
19 |
20 | message_welcome "These are the backups you have got:"
21 |
22 | ls -lht "${BACKUP_DIR_PATH}"
23 |
--------------------------------------------------------------------------------
/deploy_package/compose/production/traefik/Dockerfile:
--------------------------------------------------------------------------------
1 | FROM traefik:v2.11.2
2 | RUN mkdir -p /etc/traefik/acme \
3 | && touch /etc/traefik/acme/acme.json \
4 | && chmod 600 /etc/traefik/acme/acme.json
5 | COPY ./compose/production/traefik/traefik.yml /etc/traefik
6 |
--------------------------------------------------------------------------------
/deploy_package/gen.sh:
--------------------------------------------------------------------------------
1 | #!/bin/bash
2 |
3 | ENV_TPL_FILES=./.envs/.tpl/
4 | ENV_OUT_DIR=./.envs/.production/
5 |
6 | mkdir -p $ENV_OUT_DIR
7 |
8 | source $ENV_TPL_FILES/.base
9 |
10 | for f in `find $ENV_TPL_FILES -type f`
11 | do
12 | filename=$(basename $f)
13 | eval "cat < $ENV_OUT_DIR/$filename
16 | source $ENV_OUT_DIR/$filename
17 | done
18 |
19 | eval "cat < ./compose/production/traefik/traefik.yml
22 |
--------------------------------------------------------------------------------
/docs/__init__.py:
--------------------------------------------------------------------------------
1 | # Included so that Django's startproject comment runs against the docs directory
2 |
--------------------------------------------------------------------------------
/docs/index.rst:
--------------------------------------------------------------------------------
1 | .. colander documentation master file, created by
2 | sphinx-quickstart.
3 | You can adapt this file completely to your liking, but it should at least
4 | contain the root `toctree` directive.
5 |
6 | Welcome to colander's documentation!
7 | ======================================================================
8 |
9 | .. toctree::
10 | :maxdepth: 2
11 | :caption: Contents:
12 |
13 | howto
14 | pycharm/configuration
15 | users
16 |
17 |
18 |
19 | Indices and tables
20 | ==================
21 |
22 | * :ref:`genindex`
23 | * :ref:`modindex`
24 | * :ref:`search`
25 |
--------------------------------------------------------------------------------
/docs/pycharm/images/1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/PiRogueToolSuite/colander/711a1d41a9036ba8461be80d778244160c1d71b8/docs/pycharm/images/1.png
--------------------------------------------------------------------------------
/docs/pycharm/images/2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/PiRogueToolSuite/colander/711a1d41a9036ba8461be80d778244160c1d71b8/docs/pycharm/images/2.png
--------------------------------------------------------------------------------
/docs/pycharm/images/3.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/PiRogueToolSuite/colander/711a1d41a9036ba8461be80d778244160c1d71b8/docs/pycharm/images/3.png
--------------------------------------------------------------------------------
/docs/pycharm/images/4.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/PiRogueToolSuite/colander/711a1d41a9036ba8461be80d778244160c1d71b8/docs/pycharm/images/4.png
--------------------------------------------------------------------------------
/docs/pycharm/images/7.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/PiRogueToolSuite/colander/711a1d41a9036ba8461be80d778244160c1d71b8/docs/pycharm/images/7.png
--------------------------------------------------------------------------------
/docs/pycharm/images/8.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/PiRogueToolSuite/colander/711a1d41a9036ba8461be80d778244160c1d71b8/docs/pycharm/images/8.png
--------------------------------------------------------------------------------
/docs/pycharm/images/f1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/PiRogueToolSuite/colander/711a1d41a9036ba8461be80d778244160c1d71b8/docs/pycharm/images/f1.png
--------------------------------------------------------------------------------
/docs/pycharm/images/f2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/PiRogueToolSuite/colander/711a1d41a9036ba8461be80d778244160c1d71b8/docs/pycharm/images/f2.png
--------------------------------------------------------------------------------
/docs/pycharm/images/f3.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/PiRogueToolSuite/colander/711a1d41a9036ba8461be80d778244160c1d71b8/docs/pycharm/images/f3.png
--------------------------------------------------------------------------------
/docs/pycharm/images/f4.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/PiRogueToolSuite/colander/711a1d41a9036ba8461be80d778244160c1d71b8/docs/pycharm/images/f4.png
--------------------------------------------------------------------------------
/docs/pycharm/images/issue1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/PiRogueToolSuite/colander/711a1d41a9036ba8461be80d778244160c1d71b8/docs/pycharm/images/issue1.png
--------------------------------------------------------------------------------
/docs/pycharm/images/issue2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/PiRogueToolSuite/colander/711a1d41a9036ba8461be80d778244160c1d71b8/docs/pycharm/images/issue2.png
--------------------------------------------------------------------------------
/docs/users.rst:
--------------------------------------------------------------------------------
1 | .. _users:
2 |
3 | Users
4 | ======================================================================
5 |
6 | Starting a new project, it’s highly recommended to set up a custom user model,
7 | even if the default User model is sufficient for you.
8 |
9 | This model behaves identically to the default user model,
10 | but you’ll be able to customize it in the future if the need arises.
11 |
12 | .. automodule:: colander.users.models
13 | :members:
14 | :noindex:
15 |
16 |
--------------------------------------------------------------------------------
/locale/README.rst:
--------------------------------------------------------------------------------
1 | Translations
2 | ============
3 |
4 | Translations will be placed in this folder when running::
5 |
6 | python manage.py makemessages
7 |
--------------------------------------------------------------------------------
/pytest.ini:
--------------------------------------------------------------------------------
1 | [pytest]
2 | addopts = --ds=config.settings.test --reuse-db
3 | python_files = tests.py test_*.py
4 |
--------------------------------------------------------------------------------
/requirements/production.txt:
--------------------------------------------------------------------------------
1 | # PRECAUTION: avoid production dependencies that aren't in development
2 |
3 | -r base.txt
4 |
5 | psycopg2==2.9.9 # https://github.com/psycopg/psycopg2
6 |
7 | # Django
8 | # ------------------------------------------------------------------------------
9 | # django-storages[google]==1.13.1 # https://github.com/jschneier/django-storages
10 | django-anymail==10.3 # https://github.com/anymail/django-anymail
11 |
--------------------------------------------------------------------------------