icfs 0.2.0 → 0.3.0

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.
data/lib/icfs.rb CHANGED
@@ -22,7 +22,7 @@ require_relative 'icfs/validate'
22
22
  module ICFS
23
23
 
24
24
  # version: major, minor, patch
25
- Version = [0, 2, 0].freeze
25
+ Version = [0, 3, 0].freeze
26
26
 
27
27
  # version pre-release
28
28
  VersionPre = nil
@@ -233,6 +233,75 @@ module ICFS
233
233
  end # def self.time_parse()
234
234
 
235
235
 
236
+ ###############################################
237
+ # Get epoch time as local
238
+ #
239
+ # @param tme [Integer] the epoch time
240
+ # @param cfg [Config] the config
241
+ #
242
+ def self.time_local(tme, cfg)
243
+ Time.at(tme).getlocal(cfg.get('tz')).strftime('%F %T')
244
+ end # def self.time_local()
245
+
246
+
247
+ ###############################################
248
+ # Get epoch time as local with weekday
249
+ #
250
+ # @param tme [Integer] the epoch time
251
+ # @param cfg [Config] the config
252
+ #
253
+ def self.time_weekday(tme, cfg)
254
+ Time.at(tme).getlocal(cfg.get('tz')).strftime('%F %T (%a)')
255
+ end # def self.time_weekday()
256
+
257
+
258
+ ###############################################
259
+ # Get relative display time from epoch
260
+ #
261
+ # @param tme [Integer] the epoch time
262
+ # @return [String] Relative time string
263
+ #
264
+ def self.time_relative(tme)
265
+ rel = Time.now.to_i - tme
266
+ abs = rel.abs
267
+
268
+ # time periods
269
+ if abs >= (2*365*24*60*60)
270
+ num = abs / (365*24*60*60)
271
+ txt = 'years'
272
+ elsif abs >= (3*7*24*60*60)
273
+ num = abs / (7*24*60*60)
274
+ txt = 'weeks'
275
+ elsif abs >= (3*24*60*60)
276
+ num = abs / (24*60*60)
277
+ txt = 'days'
278
+ elsif abs >= (3*60*60)
279
+ num = abs / (60*60)
280
+ txt = 'hours'
281
+ elsif abs >= 2*60
282
+ num = abs / 60
283
+ txt = 'minutes'
284
+ else
285
+ num = 0
286
+ txt = 'just now'
287
+ end
288
+
289
+ # description
290
+ desc = '%d %s' % [num, txt]
291
+
292
+ # before/after
293
+ if num == 0
294
+ final = 'just now'
295
+ elsif rel < 0
296
+ final = 'in ' + desc
297
+ else
298
+ final = desc + ' ago'
299
+ end
300
+
301
+ return final
302
+ end # def self.time_relative()
303
+
304
+
236
305
  ##########################################################################
237
306
  # Error
238
307
  #
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: icfs
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.0
4
+ version: 0.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Graham A. Field
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2019-06-29 00:00:00.000000000 Z
11
+ date: 2019-07-04 00:00:00.000000000 Z
12
12
  dependencies: []
13
13
  description: |2-
14
14
 
@@ -24,7 +24,6 @@ extensions: []
24
24
  extra_rdoc_files: []
25
25
  files:
26
26
  - LICENSE.txt
27
- - bin/icfs_demo_fcgi.rb
28
27
  - data/icfs.css
29
28
  - data/icfs.js
30
29
  - devel/demo/ssl_gen.rb
@@ -33,11 +32,14 @@ files:
33
32
  - devel/icfs
34
33
  - devel/icfs-wrk/Dockerfile
35
34
  - devel/run/base.rb
35
+ - devel/run/case-backup.rb
36
+ - devel/run/case-restore.rb
36
37
  - devel/run/copy-s3.rb
37
38
  - devel/run/email.rb
38
39
  - devel/run/email_imap.rb
39
40
  - devel/run/email_smime.rb
40
41
  - devel/run/init-icfs.rb
42
+ - devel/run/init-template.rb
41
43
  - devel/run/webrick.rb
42
44
  - lib/icfs.rb
43
45
  - lib/icfs/api.rb
@@ -1,53 +0,0 @@
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
- # frozen_string_literal: true
14
-
15
- require 'yaml'
16
- require 'faraday'
17
-
18
- require_relative '../lib/icfs'
19
- require_relative '../lib/icfs/cache_elastic'
20
- require_relative '../lib/icfs/store_fs'
21
- require_relative '../lib/icfs/users_fs'
22
- require_relative '../lib/icfs/web/client'
23
- require_relative '../lib/icfs/web/auth_ssl'
24
- require_relative '../lib/icfs/demo/timezone'
25
-
26
- # load the config file
27
- cfg = YAML.load_file(ARGV[0])
28
- map = {}
29
- cfg['cache']['map'].each do |key, val|
30
- map[key.to_sym] = val
31
- end
32
-
33
- es = Faraday.new(cfg['elastic']['base'])
34
- cache = ICFS::CacheElastic.new(map, es)
35
- store = ICFS::StoreFs.new(cfg['store']['dir'])
36
- users = ICFS::UsersFs.new(cfg['users']['dir'])
37
- api = ICFS::Api.new([], users, cache, store)
38
- web = ICFS::Web::Client.new(cfg['web']['css'], cfg['web']['script'])
39
-
40
- user_map = {
41
- 'CN=client 1,OU=Test Client,OU=example,OU=org' => 'user1',
42
- 'CN=client 2,OU=Test Client,OU=example,OU=org' => 'user2',
43
- 'CN=client 3,OU=Test Client,OU=example,OU=org' => 'user3'
44
- }
45
-
46
- app = Rack::Builder.new do
47
- use(ICFS::Web::AuthSsl, user_map, api)
48
- use(ICFS::Demo::Timezone, cfg['web']['tz'])
49
- run web
50
- end
51
-
52
- puts 'try to run'
53
- Rack::Handler::FastCGI.run(app, {Host: '127.0.0.1', Port: 9000} )