Difference between revisions of "TruxtonRelation"

From truxwiki.com
Jump to navigation Jump to search
Line 1: Line 1:
This class lets you add to the [[Relation Table | Relation]] table in Truxton.
+
This class lets you add to the <code><nowiki>[</nowiki>[[Relation Table|Relation]]<nowiki>]</nowiki></code> table in Truxton.
 
This is how to establish some sort of relation between items in Truxton to create a [https://en.wikipedia.org/wiki/Graph_(discrete_mathematics) graph.]
 
This is how to establish some sort of relation between items in Truxton to create a [https://en.wikipedia.org/wiki/Graph_(discrete_mathematics) graph.]
  
Line 6: Line 6:
 
==<code>a</code>==
 
==<code>a</code>==
 
This is the [https://en.wikipedia.org/wiki/Universally_unique_identifier GUID] of the object.
 
This is the [https://en.wikipedia.org/wiki/Universally_unique_identifier GUID] of the object.
This corresponds to the <code>A_ID</code> column of the [[Relation Table | <code>Relation</code>]] table.
+
This corresponds to the <code>[A_ID]</code> column of the <code><nowiki>[</nowiki>[[Relation Table|Relation]]<nowiki>]</nowiki></code> table.
 
This combined with <code>atype</code> allows Truxton to retrieve the correct record from the database.
 
This combined with <code>atype</code> allows Truxton to retrieve the correct record from the database.
 
This is also known as a [https://en.wikipedia.org/wiki/Vertex_(graph_theory) vertex] in a graph.
 
This is also known as a [https://en.wikipedia.org/wiki/Vertex_(graph_theory) vertex] in a graph.
Line 12: Line 12:
 
==<code>atype</code>==
 
==<code>atype</code>==
 
The type of the thing that <code>a</code> represents.
 
The type of the thing that <code>a</code> represents.
This corresponds to the <code>A_ObjectTypeID</code> column of the [[Relation Table | <code>Relation</code>]] table.
+
This corresponds to the <code>[A_ObjectTypeID]</code> column of the <code><nowiki>[</nowiki>[[Relation Table|Relation]]<nowiki>]</nowiki></code> table.
It should contain a value in the <code>ID</code> column of the <code>ObjectType</code> table or you can use a [[Object Types | defined constant.]]
+
It should contain a value in the <code>[ID]</code> column of the <code>[ObjectType]</code> table or you can use a [[Object Types | defined constant.]]
  
 
==<code>b</code>==
 
==<code>b</code>==
 
This is the [https://en.wikipedia.org/wiki/Universally_unique_identifier GUID] of the object.
 
This is the [https://en.wikipedia.org/wiki/Universally_unique_identifier GUID] of the object.
This corresponds to the <code>A_ID</code> column of the [[Relation Table | <code>Relation</code>]] table.
+
This corresponds to the <code>[B_ID]</code> column of the <code><nowiki>[</nowiki>[[Relation Table|Relation]]<nowiki>]</nowiki></code> table.
 
This combined with <code>btype</code> allows Truxton to retrieve the correct record from the database
 
This combined with <code>btype</code> allows Truxton to retrieve the correct record from the database
 
This is also known as a [https://en.wikipedia.org/wiki/Vertex_(graph_theory) vertex] in a graph.
 
This is also known as a [https://en.wikipedia.org/wiki/Vertex_(graph_theory) vertex] in a graph.
Line 23: Line 23:
 
==<code>btype</code>==
 
==<code>btype</code>==
 
The type of the thing that <code>b</code> represents.
 
The type of the thing that <code>b</code> represents.
This corresponds to the <code>B_ObjectTypeID</code> column of the [[Relation Table | <code>Relation</code>]] table.
+
This corresponds to the <code>[B_ObjectTypeID]</code> column of the <code><nowiki>[</nowiki>[[Relation Table|Relation]]<nowiki>]</nowiki></code> table.
It should contain a value in the <code>ID</code> column of the <code>ObjectType</code> table or you can use a [[Object Types | defined constant.]]
+
It should contain a value in the <code>[ID]</code> column of the <code>[ObjectType]</code> table or you can use a [[Object Types | defined constant.]]
  
 
==<code>relation</code>==
 
==<code>relation</code>==
 
This provides the reason why <code>a</code> and <code>b</code> are related.
 
This provides the reason why <code>a</code> and <code>b</code> are related.
This corresponds to the <code>RelationTypeID</code> column of the [[Relation Table | <code>Relation</code>]] table.
+
This corresponds to the <code>[RelationTypeID]</code> column of the <code><nowiki>[</nowiki>[[Relation Table|Relation]]<nowiki>]</nowiki></code> table.
It should be a value in the <code>ID</code> column of the <code>RelationType</code> table or you can use a [[Relation Types | defined constant.]]
+
It should be a value in the <code>[ID]</code> column of the <code>[RelationType]</code> table or you can use a [[Relation Types | defined constant.]]
 
It is known as an [https://en.wikipedia.org/wiki/Vertex_(graph_theory) edge] in a graph.
 
It is known as an [https://en.wikipedia.org/wiki/Vertex_(graph_theory) edge] in a graph.
  
 
==<code>source</code>==
 
==<code>source</code>==
 
This is the [https://en.wikipedia.org/wiki/Universally_unique_identifier GUID] of the object this relation came from.
 
This is the [https://en.wikipedia.org/wiki/Universally_unique_identifier GUID] of the object this relation came from.
This corresponds to the <code>SourceID</code> column of the [[Relation Table | <code>Relation</code>]] table.
+
This corresponds to the <code>[SourceID]</code> column of the <code><nowiki>[</nowiki>[[Relation Table|Relation]]<nowiki>]</nowiki></code> table.
 
This combined with <code>sourcetype</code> allows Truxton to retrieve the correct record from the database.
 
This combined with <code>sourcetype</code> allows Truxton to retrieve the correct record from the database.
  
 
==<code>sourcetype</code>==
 
==<code>sourcetype</code>==
 
The type of the thing that <code>source</code> represents.
 
The type of the thing that <code>source</code> represents.
This corresponds to the <code>SourceObjectTypeID</code> column of the [[Relation Table | <code>Relation</code>]] table.
+
This corresponds to the <code>[SourceObjectTypeID]</code> column of the <code><nowiki>[</nowiki>[[Relation Table|Relation]]<nowiki>]</nowiki></code> table.
It should contain a value in the <code>ID</code> column of the <code>ObjectType</code> table or you can use a [[Object Types | defined constant.]]
+
It should contain a value in the <code>[ID]</code> column of the <code>[ObjectType]</code> table or you can use a [[Object Types | defined constant.]]
  
 
==<code>save()</code>==
 
==<code>save()</code>==
This will commit the information to the [[Relation Table | <code>Relation</code>]] table.
+
This will commit the information to the <code><nowiki>[</nowiki>[[Relation Table|Relation]]<nowiki>]</nowiki></code> table.
 
It will return [https://docs.python.org/3/library/constants.html#True True] if the record was saved to the database, [https://docs.python.org/3/library/constants.html#False False] if there was an error.
 
It will return [https://docs.python.org/3/library/constants.html#True True] if the record was saved to the database, [https://docs.python.org/3/library/constants.html#False False] if there was an error.
  
Line 50: Line 50:
  
 
=Sample=
 
=Sample=
 
+
<source lang="Python" highlight="61-67">
<syntaxhighlight lang="Python" highlight="61-67">
 
 
import truxton
 
import truxton
 
import shutil
 
import shutil
Line 132: Line 131:
 
if __name__ == "__main__":
 
if __name__ == "__main__":
 
   main()
 
   main()
</syntaxhighlight>
+
</source>

Revision as of 17:17, 30 November 2020

This class lets you add to the [Relation] table in Truxton. This is how to establish some sort of relation between items in Truxton to create a graph.

Attributes and Methods

a

This is the GUID of the object. This corresponds to the [A_ID] column of the [Relation] table. This combined with atype allows Truxton to retrieve the correct record from the database. This is also known as a vertex in a graph.

atype

The type of the thing that a represents. This corresponds to the [A_ObjectTypeID] column of the [Relation] table. It should contain a value in the [ID] column of the [ObjectType] table or you can use a defined constant.

b

This is the GUID of the object. This corresponds to the [B_ID] column of the [Relation] table. This combined with btype allows Truxton to retrieve the correct record from the database This is also known as a vertex in a graph.

btype

The type of the thing that b represents. This corresponds to the [B_ObjectTypeID] column of the [Relation] table. It should contain a value in the [ID] column of the [ObjectType] table or you can use a defined constant.

relation

This provides the reason why a and b are related. This corresponds to the [RelationTypeID] column of the [Relation] table. It should be a value in the [ID] column of the [RelationType] table or you can use a defined constant. It is known as an edge in a graph.

source

This is the GUID of the object this relation came from. This corresponds to the [SourceID] column of the [Relation] table. This combined with sourcetype allows Truxton to retrieve the correct record from the database.

sourcetype

The type of the thing that source represents. This corresponds to the [SourceObjectTypeID] column of the [Relation] table. It should contain a value in the [ID] column of the [ObjectType] table or you can use a defined constant.

save()

This will commit the information to the [Relation] table. It will return True if the record was saved to the database, False if there was an error.

Remarks

When creating a relationship between objects in Truxton, the relationship should read "A is a XXX of B"

Sample

import truxton
import shutil

from datetime import datetime
from calendar import timegm
from pathlib import Path

EPOCH_AS_FILETIME = 116444736000000000
HUNDREDS_OF_NANOSECONDS = 10000000

def date_to_filetime(dt):
  return EPOCH_AS_FILETIME + (timegm(dt.timetuple()) * HUNDREDS_OF_NANOSECONDS)

def create_event_type(t, id, name):
  event_type = t.neweventtype()
  event_type.id = id
  event_type.name = name
  event_type.save()

def add_file(parent_truxton_file, filename):
  source_file = open(filename, "rb")
  child = parent_truxton_file.newchild()
  child.name = Path(filename).name
  shutil.copyfileobj(source_file, child)
  source_file.close()
  child.save()

  return child

def add_media(t):
  media = t.newmedia()
  media.name = "Public Documents"
  media.description = "Publicly available documents"
  media.case = "DC-SNAFU-2016.2020"
  media.evidencebag = "EV-0937459386623-a"
  media.originator = "Jeffrey Jensen"
  media.latitude = 38.897661
  media.longitude = -77.036458
  media.type = truxton.MEDIA_TYPE_LOGICAL_FILES
  media.save()

  return media

def add_ec(parent_file ):
  child_file = add_file(parent_file, "JW-v-DOJ-reply-02743.pdf")

  a = child_file.newartifact()
  a.type = truxton.ENTITY_TYPE_ACCOUNT
  a.value = "r0cker"
  a.datatype = truxton.DATA_TYPE_ASCII
  a.length = 6
  a.save()

  b = child_file.newartifact()
  b.type = truxton.ENTITY_TYPE_PERSON
  b.value = "Bob Smith"
  b.datatype = truxton.DATA_TYPE_ASCII
  b.length = 9
  b.save()

  relation = child_file.newrelation()
  relation.a = a.id
  relation.atype = truxton.OBJECT_TYPE_ENTITY
  relation.b = b.id
  relation.btype = truxton.OBJECT_TYPE_ENTITY
  relation.relation = truxton.RELATION_LOGON_ACCOUNT
  relation.save()

def main():
  t = truxton.create()

  media = add_media(t)

  root_file = media.addroot()
  root_file.save()

  add_ec(root_file)

if __name__ == "__main__":
  main()