icfs 0.1.0 → 0.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 9baaf0f9a648c931471f897b8115705720dc5cff6408275821101864cdc9f397
4
- data.tar.gz: 8c4c2b8e4cbc2bb7690479537455be38b7e39a5d615d4ce5b0e2769d31ebd9c5
3
+ metadata.gz: ecd555ee72ea33e646323a37019652a7fb111c4aec34146c92825fbe30fd7ded
4
+ data.tar.gz: 2c53ec9caf008aa4a6a1f187a7b2d2d4a631d19081ed83c497717f4386facbca
5
5
  SHA512:
6
- metadata.gz: 21db3f31c1c4c285b6a66ccda41c21c7816b09184bf02443b2a06951e1af84c0320ccd240e82deed200ed45dcf666a84b6676c167189657890a77dff46d2b929
7
- data.tar.gz: 0b5a75bb922177b8e0e53bc0a3f6478fd7379f28f129ec9ba16e59f88875fb1ac4815efed70531daa984cac47cd775e215b763ad930c5b39edc02756fa7d21c7
6
+ metadata.gz: 5ae5fc9857d14845419257717150815b3deb7ae55e17d72e0990928916c0561dbe6c56e99bdaa4a74c3d8d92b99ead2b3f3bfcb9b34190de0dd1ac12c3d56e32
7
+ data.tar.gz: 4d98034fe142019aaed7cd7208fa6d8841942361755e58eb49fa04dbfd6b678aeea44299800ed8536088b7e5addcaa4ccc68adb94c39e63f60ded95d7bccf263
@@ -0,0 +1,29 @@
1
+ #!/usr/bin/env ruby
2
+ #
3
+ # Investigative Case File System
4
+ #
5
+ # Copyright 2019 by Graham A. Field
6
+ #
7
+ # This program is free software: you can redistribute it and/or modify
8
+ # it under the terms of the GNU General Public License version 3.
9
+ #
10
+ # This program is distributed WITHOUT ANY WARRANTY; without even the
11
+ # implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
12
+
13
+ require 'yaml'
14
+ require 'logger'
15
+
16
+ require_relative '../lib/icfs'
17
+ require_relative '../lib/icfs/utils/check'
18
+ require_relative '../lib/icfs/store_fs'
19
+
20
+ # load the config file
21
+ cfg = YAML.load_file(ARGV[0])
22
+
23
+ # objects
24
+ store = ICFS::StoreFs.new(cfg['store']['dir'])
25
+ log = Logger.new(STDOUT, level: Logger::INFO)
26
+ check = ICFS::Utils::Check.new(store, log)
27
+
28
+ # check
29
+ check.check(ARGV[1], ARGV[2].to_i, nil, {hash_all: true})
@@ -0,0 +1,27 @@
1
+ #!/bin/bash
2
+ #
3
+ # Investigative Case File System
4
+ #
5
+ # Copyright 2019 by Graham A. Field
6
+ #
7
+ # This program is free software: you can redistribute it and/or modify
8
+ # it under the terms of the GNU General Public License version 3.
9
+ #
10
+ # This program is distributed WITHOUT ANY WARRANTY; without even the
11
+ # implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
12
+
13
+ # make certs
14
+ ../../bin/icfs_demo_ssl_gen.rb
15
+
16
+ # copy static content
17
+ mkdir web
18
+ mkdir web/static
19
+ mkdir web/static/static
20
+ cp ../icfs.css web/static/static/
21
+ cp ../icfs.js web/static/static/
22
+
23
+ # config files
24
+ mkdir web/config
25
+ mv ca_cert.pem web/config/
26
+ mv srv_cert.pem web/config/
27
+ mv srv_key.pem web/config/
@@ -0,0 +1,41 @@
1
+ #
2
+ # Investigative Case File System
3
+ #
4
+ # Copyright 2019 by Graham A. Field
5
+ #
6
+ # This program is free software: you can redistribute it and/or modify
7
+ # it under the terms of the GNU General Public License version 3.
8
+ #
9
+ # This program is distributed WITHOUT ANY WARRANTY; without even the
10
+ # implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
11
+
12
+ version: '3'
13
+
14
+ services:
15
+
16
+ icfs-web:
17
+ image: nginx:alpine
18
+ ports:
19
+ - "443:443"
20
+ volumes:
21
+ - ./nginx.conf:/etc/nginx/nginx.conf:ro
22
+ - ./web:/usr/share/icfs:ro
23
+
24
+ icfs-app:
25
+ image: icfs-ruby
26
+ volumes:
27
+ - icfs-app:/var/lib/icfs
28
+ - ./icfs-app.rb:/usr/local/bin/icfs
29
+ - ./icfs-cfg.yml:/etc/icfs.yml
30
+ command: ["/usr/local/bin/icfs"]
31
+
32
+ icfs-elastic:
33
+ image: docker.elastic.co/elasticsearch/elasticsearch:6.7.2
34
+ environment:
35
+ - discovery.type=single-node
36
+ volumes:
37
+ - icfs-es:/usr/share/elasticsearch/data
38
+
39
+ volumes:
40
+ icfs-app:
41
+ icfs-es:
@@ -0,0 +1,32 @@
1
+ #
2
+ # Investigative Case File System
3
+ #
4
+ # Copyright 2019 by Graham A. Field
5
+ #
6
+ # This program is free software: you can redistribute it and/or modify
7
+ # it under the terms of the GNU General Public License version 3.
8
+ #
9
+ # This program is distributed WITHOUT ANY WARRANTY; without even the
10
+ # implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
11
+
12
+ version: '3'
13
+
14
+ services:
15
+ icfs-init:
16
+ image: icfs-ruby
17
+ volumes:
18
+ - ./icfs-init.rb:/usr/local/bin/icfs
19
+ - ./icfs-cfg.yml:/etc/icfs.yml
20
+ - icfs-app:/var/lib/icfs
21
+ command: ["/usr/local/bin/icfs"]
22
+
23
+ icfs-elastic:
24
+ image: docker.elastic.co/elasticsearch/elasticsearch:6.7.2
25
+ environment:
26
+ - discovery.type=single-node
27
+ volumes:
28
+ - icfs-es:/usr/share/elasticsearch/data
29
+
30
+ volumes:
31
+ icfs-app:
32
+ icfs-es:
@@ -0,0 +1,50 @@
1
+ #!/usr/bin/env ruby
2
+ #
3
+ # Investigative Case File System
4
+ #
5
+ # Copyright 2019 by Graham A. Field
6
+ #
7
+ # This program is free software: you can redistribute it and/or modify
8
+ # it under the terms of the GNU General Public License version 3.
9
+ #
10
+ # This program is distributed WITHOUT ANY WARRANTY; without even the
11
+ # implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
12
+
13
+ require 'faraday'
14
+ require 'rack'
15
+ require 'yaml'
16
+
17
+ require 'icfs'
18
+ require 'icfs/cache_elastic'
19
+ require 'icfs/store_fs'
20
+ require 'icfs/users_fs'
21
+ require 'icfs/web/client'
22
+ require 'icfs/web/auth_ssl'
23
+ require 'icfs/demo/timezone'
24
+
25
+
26
+ # load the config file
27
+ cfg = YAML.load_file('/etc/icfs.yml')
28
+ map = {}
29
+ cfg['cache']['map'].each{|key, val| map[key.to_sym] = val }
30
+
31
+ es = Faraday.new(cfg['elastic']['base'])
32
+ cache = ICFS::CacheElastic.new(map, es)
33
+ store = ICFS::StoreFs.new(cfg['store']['dir'])
34
+ users = ICFS::UsersFs.new(cfg['users']['dir'])
35
+ api = ICFS::Api.new([], users, cache, store)
36
+ web = ICFS::Web::Client.new(cfg['web']['css'], cfg['web']['script'])
37
+
38
+ user_map = {
39
+ 'CN=client 1,OU=Test Client,OU=example,OU=org' => 'user1',
40
+ 'CN=client 2,OU=Test Client,OU=example,OU=org' => 'user2',
41
+ 'CN=client 3,OU=Test Client,OU=example,OU=org' => 'user3'
42
+ }
43
+
44
+ app = Rack::Builder.new do
45
+ use(ICFS::Web::AuthSsl, user_map, api)
46
+ use(ICFS::Demo::Timezone, cfg['web']['tz'])
47
+ run web
48
+ end
49
+
50
+ Rack::Handler::FastCGI.run(app, {Host: '0.0.0.0', Port: 9000})
@@ -0,0 +1,88 @@
1
+ #
2
+ # Investigative Case File System
3
+ #
4
+ # Copyright 2019 by Graham A. Field
5
+ #
6
+ # This program is free software: you can redistribute it and/or modify
7
+ # it under the terms of the GNU General Public License version 3.
8
+ #
9
+ # This program is distributed WITHOUT ANY WARRANTY; without even the
10
+ # implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
11
+
12
+ sleep: 15.0
13
+
14
+ cache:
15
+ map:
16
+ entry: entry
17
+ case: case
18
+ action: action
19
+ index: index
20
+ log: log
21
+ lock: lock
22
+ current: current
23
+
24
+ elastic:
25
+ base: "http://icfs-elastic:9200"
26
+
27
+ store:
28
+ dir: /var/lib/icfs/store
29
+
30
+ users:
31
+ dir: /var/lib/icfs/users
32
+
33
+ web:
34
+ css: "/static/icfs.css"
35
+ script: "/static/icfs.js"
36
+ tz: "-04:00"
37
+
38
+ init:
39
+ user: user1
40
+ urg:
41
+ - name: role1
42
+ type: role
43
+
44
+ - name: role2
45
+ type: role
46
+
47
+ - name: role3
48
+ type: role
49
+
50
+ - name: group1
51
+ type: group
52
+
53
+ - name: group2
54
+ type: group
55
+
56
+ - name: user1
57
+ type: user
58
+ roles:
59
+ - role2
60
+ - role3
61
+ groups:
62
+ - group2
63
+ perms:
64
+ - "{perm_a}"
65
+ - "{perm_b}"
66
+
67
+ - name: user2
68
+ type: user
69
+ roles:
70
+ - role1
71
+ - role2
72
+ groups:
73
+ - group1
74
+ perms:
75
+ - "{perm_b}"
76
+
77
+ templates:
78
+ - caseid: template1
79
+ template: "New Template"
80
+ access:
81
+ - perm: "[manage]"
82
+ grant:
83
+ - user1
84
+ - perm: "[write]"
85
+ grant:
86
+ - group1
87
+ entry: "Create new template"
88
+ content: "New template being created"
@@ -0,0 +1,75 @@
1
+ #!/usr/bin/env ruby
2
+ #
3
+ # Investigative Case File System
4
+ #
5
+ # Copyright 2019 by Graham A. Field
6
+ #
7
+ # This program is free software: you can redistribute it and/or modify
8
+ # it under the terms of the GNU General Public License version 3.
9
+ #
10
+ # This program is distributed WITHOUT ANY WARRANTY; without even the
11
+ # implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
12
+
13
+ require 'faraday'
14
+ require 'rack'
15
+ require 'yaml'
16
+ require 'fileutils'
17
+
18
+ require 'icfs'
19
+ require 'icfs/cache_elastic'
20
+ require 'icfs/store_fs'
21
+ require 'icfs/users_fs'
22
+
23
+
24
+ # load the config file
25
+ cfg = YAML.load_file('/etc/icfs.yml')
26
+ map = {}
27
+ cfg['cache']['map'].each{|key, val| map[key.to_sym] = val }
28
+
29
+ # sleep to allow elasticsearch to come up
30
+ if cfg['sleep']
31
+ puts 'sleeping: %f' % cfg['sleep']
32
+ sleep(cfg['sleep'])
33
+ end
34
+
35
+ es = Faraday.new(cfg['elastic']['base'])
36
+ cache = ICFS::CacheElastic.new(map, es)
37
+ store = ICFS::StoreFs.new(cfg['store']['dir'])
38
+ users = ICFS::UsersFs.new(cfg['users']['dir'])
39
+ api = ICFS::Api.new([], users, cache, store)
40
+
41
+ # create store and users
42
+ FileUtils.mkdir(cfg['store']['dir'])
43
+ puts "Created store directory: %s" % cfg['store']['dir']
44
+ FileUtils.mkdir(cfg['users']['dir'])
45
+ puts "Created users directory: %s" % cfg['users']['dir']
46
+
47
+ # add the users
48
+ cfg['init']['urg'].each do |usr|
49
+ users.write(usr)
50
+ puts "Added user/role/group: %s" % usr['name']
51
+ end
52
+
53
+ # create the indexes
54
+ cache.create(ICFS::CacheElastic::Maps)
55
+ puts "Indexes created"
56
+
57
+ # set initial user
58
+ api.user = cfg['init']['user']
59
+
60
+ # add the templates
61
+ cfg['init']['templates'].each do |tmpl|
62
+ tp = {
63
+ 'template' => true,
64
+ 'status' => true,
65
+ 'title' => tmpl['template'],
66
+ 'access' => tmpl['access'],
67
+ }
68
+ ent = {
69
+ 'caseid' => tmpl['caseid'],
70
+ 'title' => tmpl['entry'],
71
+ 'content' => tmpl['content']
72
+ }
73
+ api.case_create(ent, tp)
74
+ puts "Created template: %s" % tmpl['caseid']
75
+ end
@@ -0,0 +1,22 @@
1
+ #
2
+ # Investigative Case File System
3
+ #
4
+ # Copyright 2019 by Graham A. Field
5
+ #
6
+ # This program is free software: you can redistribute it and/or modify
7
+ # it under the terms of the GNU General Public License version 3.
8
+ #
9
+ # This program is distributed WITHOUT ANY WARRANTY; without even the
10
+ # implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
11
+ FROM alpine
12
+
13
+ RUN apk update && apk upgrade && \
14
+ apk add ruby fcgi ruby-json tzdata && \
15
+ apk --update add --virtual build-deps ruby-dev build-base fcgi-dev && \
16
+ gem install -N rack faraday fcgi && \
17
+ apk del build-deps && \
18
+ rm -rf /var/cache/apk/*
19
+
20
+ COPY ./icfs-0.1.1.gem /icfs.gem
21
+
22
+ RUN gem install -N --local /icfs.gem && rm /icfs.gem
@@ -0,0 +1,14 @@
1
+ #!/bin/bash
2
+ #
3
+ # Investigative Case File System
4
+ #
5
+ # Copyright 2019 by Graham A. Field
6
+ #
7
+ # This program is free software: you can redistribute it and/or modify
8
+ # it under the terms of the GNU General Public License version 3.
9
+ #
10
+ # This program is distributed WITHOUT ANY WARRANTY; without even the
11
+ # implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
12
+
13
+ cp ../../../icfs-0.1.1.gem .
14
+ docker build -t icfs-ruby .
@@ -0,0 +1,68 @@
1
+ #
2
+ # Investigative Case File System
3
+ #
4
+ # Copyright 2019 by Graham A. Field
5
+ #
6
+ # This program is free software: you can redistribute it and/or modify
7
+ # it under the terms of the GNU General Public License version 3.
8
+ #
9
+ # This program is distributed WITHOUT ANY WARRANTY; without even the
10
+ # implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
11
+
12
+ user nginx;
13
+ worker_processes 1;
14
+
15
+ error_log /var/log/nginx/error.log warn;
16
+ pid /var/run/nginx.pid;
17
+
18
+
19
+ events {
20
+ worker_connections 1024;
21
+ }
22
+
23
+
24
+ http {
25
+ include /etc/nginx/mime.types;
26
+ default_type application/octet-stream;
27
+
28
+ log_format main '$remote_addr - $remote_user [$time_local] "$request" '
29
+ '$status $body_bytes_sent "$http_referer" '
30
+ '"$http_user_agent" "$http_x_forwarded_for"';
31
+
32
+ access_log /var/log/nginx/access.log main;
33
+
34
+ sendfile on;
35
+ #tcp_nopush on;
36
+
37
+ keepalive_timeout 65;
38
+
39
+ #gzip on;
40
+
41
+ server {
42
+ listen 443 ssl http2;
43
+ server_name localhost;
44
+
45
+ ssl_certificate /usr/share/icfs/config/srv_cert.pem;
46
+ ssl_certificate_key /usr/share/icfs/config/srv_key.pem;
47
+ ssl_client_certificate /usr/share/icfs/config/ca_cert.pem;
48
+ ssl_ciphers 'ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:ECDHE-RSA-RC4-SHA:ECDHE-ECDSA-RC4-SHA:RC4-SHA:HIGH:!aNULL:!eNULL:!EXPORT:!DES:!3DES:!MD5:!PSK';
49
+
50
+ ssl_protocols TLSv1.1 TLSv1.2;
51
+ ssl_verify_client on;
52
+
53
+ location /static/ {
54
+ root /usr/share/icfs/static;
55
+ }
56
+
57
+ location /icfs/ {
58
+ fastcgi_split_path_info ^(/icfs)(.*)$;
59
+ include /etc/nginx/fastcgi.conf;
60
+ fastcgi_param SSL_CLIENT_VERIFY $ssl_client_verify;
61
+ fastcgi_param SSL_CLIENT_S_DN $ssl_client_s_dn;
62
+ fastcgi_param PATH_INFO $fastcgi_path_info;
63
+
64
+ fastcgi_pass icfs-app:9000;
65
+ }
66
+
67
+ }
68
+ }