ixtlan-audit 0.3.3 → 0.4.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -25,14 +25,17 @@ module Ixtlan
25
25
  module Audit
26
26
  class Cuba < ::CubaAPI
27
27
  define do
28
- on get, 'last' do |number|
29
- write Ixtlan::Audit::Audit.all.last
28
+ on get, 'last' do
29
+ write Ixtlan::Audit::Audit.last
30
30
  end
31
- on get, :numder do |number|
31
+ on get, :number do |number|
32
32
  write Ixtlan::Audit::Audit.get!( number.to_i )
33
33
  end
34
34
  on get do
35
- write Ixtlan::Audit::Audit.all.reverse
35
+ query = {}
36
+ query[ :login ] = req[ :login ] if req[ :login ]
37
+ query[ :path.like ] = '%' + req[ :path ] + '%' if req[ :path ]
38
+ write Ixtlan::Audit::Audit.all( query ).reverse
36
39
  end
37
40
  end
38
41
  end
@@ -27,7 +27,8 @@ module Ixtlan
27
27
  if options[ :audit ] != false
28
28
  username = options[ :username ]
29
29
  username ||= current_user_name if respond_to?( :current_user_name )
30
- audit_manager.push( username, env['SCRIPT_NAME'], obj )
30
+ user = respond_to?( :current_user ) ? current_user : nil
31
+ audit_manager.push( username, req.request_method, env['SCRIPT_NAME'], obj, user )
31
32
  end
32
33
  obj
33
34
  end
@@ -65,7 +65,7 @@ module Ixtlan
65
65
  @keep_logs
66
66
  end
67
67
 
68
- def push( username, path, obj )
68
+ def push( username, http_method, path, obj, user = nil )
69
69
  if model
70
70
  message =
71
71
  if !obj.is_a?( String ) && obj.respond_to?( :collect )
@@ -77,9 +77,12 @@ module Ixtlan
77
77
  else
78
78
  obj.to_s
79
79
  end
80
- list << model.new( :path => path,
81
- :message => message,
82
- :login => username || '???' )
80
+ m = model.new( :http_method => http_method,
81
+ :path => path,
82
+ :message => message,
83
+ :login => username || '???' )
84
+ m.created_by = user if user && m.respond_to?( :created_by ) && user.respond_to?( :new? ) && !user.new?
85
+ list << m
83
86
  end
84
87
  list.last
85
88
  end
@@ -89,7 +92,9 @@ module Ixtlan
89
92
  list.each do |audit|
90
93
  begin
91
94
  audit.save
92
- warn audit.errors.inspect unless audit.valid?
95
+ if ( audit.respond_to?( :errors ) && audit.errors.size > 0 )
96
+ warn audit.errors.inspect
97
+ end
93
98
  rescue => e
94
99
  warn "unexpected error - skip entry"
95
100
  warn e.message
@@ -24,14 +24,24 @@ module Ixtlan
24
24
  class Audit
25
25
  include DataMapper::Resource
26
26
 
27
+ def self.storage_name(arg)
28
+ 'ixtlan_audits'
29
+ end
30
+
27
31
  property :id, Serial
28
32
 
29
- property :login, String
30
- property :path, String
31
- property :message, String
32
-
33
+ property :login, String, :length => 32
34
+ property :http_method, String, :length => 8, :field => 'method'
35
+ property :path, String, :length => 64
36
+ property :message, String, :length => 192
33
37
  property :created_at, DateTime
34
38
 
39
+ if defined?( ::User ) && ::User.respond_to?( :properties ) # DataMapper
40
+ belongs_to :created_by, ::User, :required => false
41
+ elsif defined?( Ixtlan::UserManagement::User ) && Ixtlan::UserManagement::User.respond_to?( :properties ) # DataMapper
42
+ belongs_to :created_by, Ixtlan::UserManagement::User, :required => false
43
+ end
44
+
35
45
  before :save do
36
46
  self.created_at = DateTime.now
37
47
  end
@@ -25,9 +25,15 @@ module Ixtlan
25
25
 
26
26
  root 'audit'
27
27
 
28
- add_context( :single )
28
+ add_context( :single,
29
+ :except => [:created_by_id],
30
+ :include => {
31
+ :created_by => {
32
+ :only => [:id, :login, :name]
33
+ }
34
+ } )
29
35
 
30
- add_context( :collection, :except => [:created_at] )
36
+ add_context( :collection, :except => [:created_at, :created_by_id] )
31
37
  end
32
38
  end
33
- end
39
+ end
@@ -85,7 +85,7 @@ module Ixtlan
85
85
  def log_user(user, message = nil, &block)
86
86
  user ||= "???"
87
87
  msg = "#{message}#{block.call if block}"
88
- @manager.push( user, msg.sub(/\ .*$/, ''), msg.sub(/^[^\ ]*\ /, '') )
88
+ @manager.push( user, '', msg.sub(/\ .*$/, ''), msg.sub(/^[^\ ]*\ /, '') )
89
89
  logger.debug {"[#{user}] #{msg}" }
90
90
  end
91
91
  end
@@ -2,22 +2,9 @@ require 'dm-core'
2
2
  require 'dm-migrations'
3
3
  require 'slf4r/ruby_logger'
4
4
  require 'ixtlan/audit/manager'
5
+ require 'ixtlan/audit/resource'
5
6
 
6
- class Audit
7
- include DataMapper::Resource
8
-
9
- property :id, Serial
10
-
11
- property :login, String
12
- property :path, String
13
- property :message, String
14
-
15
- property :created_at, DateTime
16
-
17
- before :save do
18
- self.created_at = DateTime.now
19
- end
20
- end
7
+ Audit = Ixtlan::Audit::Audit
21
8
 
22
9
  DataMapper.setup(:default, "sqlite3::memory:")
23
10
  DataMapper.finalize
@@ -29,9 +16,9 @@ describe Ixtlan::Audit::Manager do
29
16
 
30
17
  it 'should collect log events and the save them all in one go' do
31
18
  size = Audit.all.size
32
- subject.push( "login1", "path1", "msg1" )
33
- subject.push( "login2", "path2", "msg2" )
34
- subject.push( "login3", "path3", "msg3" )
19
+ subject.push( "login1", "POST", "path1", "msg1" )
20
+ subject.push( "login2", "DELETE", "path2", "msg2" )
21
+ subject.push( "login3", "GET", "path3", "msg3" )
35
22
  subject.save_all
36
23
 
37
24
  Audit.all.size.should == size + 3
@@ -42,8 +29,8 @@ describe Ixtlan::Audit::Manager do
42
29
  Audit.all.size.should > 0
43
30
  subject.keep_logs = 0
44
31
  Audit.all.size.should == 0
45
- subject.push( "login1", "path1", "msg1" )
46
- subject.push( "login2", "path2", "msg2" )
32
+ subject.push( "login1", "PUT", "path1", "msg1" )
33
+ subject.push( "login2", "OPTION", "path2", "msg2" )
47
34
  subject.save_all
48
35
  Audit.all.size.should == 2
49
36
  end
metadata CHANGED
@@ -1,127 +1,119 @@
1
- --- !ruby/object:Gem::Specification
1
+ --- !ruby/object:Gem::Specification
2
2
  name: ixtlan-audit
3
- version: !ruby/object:Gem::Version
4
- hash: 21
5
- prerelease:
6
- segments:
7
- - 0
8
- - 3
9
- - 3
10
- version: 0.3.3
3
+ version: !ruby/object:Gem::Version
4
+ prerelease:
5
+ version: 0.4.0
11
6
  platform: ruby
12
- authors:
7
+ authors:
13
8
  - Christian Meier
14
- autorequire:
9
+ autorequire:
15
10
  bindir: bin
16
11
  cert_chain: []
17
-
18
- date: 2013-01-16 00:00:00 Z
19
- dependencies:
20
- - !ruby/object:Gem::Dependency
12
+ date: 2013-01-30 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
21
15
  name: slf4r
22
- prerelease: false
23
- requirement: &id001 !ruby/object:Gem::Requirement
16
+ version_requirements: !ruby/object:Gem::Requirement
17
+ requirements:
18
+ - - "~>"
19
+ - !ruby/object:Gem::Version
20
+ version: 0.4.2
24
21
  none: false
25
- requirements:
26
- - - ~>
27
- - !ruby/object:Gem::Version
28
- hash: 11
29
- segments:
30
- - 0
31
- - 4
32
- - 2
22
+ requirement: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
33
26
  version: 0.4.2
27
+ none: false
28
+ prerelease: false
34
29
  type: :runtime
35
- version_requirements: *id001
36
- - !ruby/object:Gem::Dependency
30
+ - !ruby/object:Gem::Dependency
37
31
  name: rspec
38
- prerelease: false
39
- requirement: &id002 !ruby/object:Gem::Requirement
32
+ version_requirements: !ruby/object:Gem::Requirement
33
+ requirements:
34
+ - - "~>"
35
+ - !ruby/object:Gem::Version
36
+ version: '2.6'
37
+ none: false
38
+ requirement: !ruby/object:Gem::Requirement
39
+ requirements:
40
+ - - "~>"
41
+ - !ruby/object:Gem::Version
42
+ version: '2.6'
40
43
  none: false
41
- requirements:
42
- - - ~>
43
- - !ruby/object:Gem::Version
44
- hash: 15
45
- segments:
46
- - 2
47
- - 6
48
- version: "2.6"
44
+ prerelease: false
49
45
  type: :development
50
- version_requirements: *id002
51
- - !ruby/object:Gem::Dependency
46
+ - !ruby/object:Gem::Dependency
52
47
  name: rake
53
- prerelease: false
54
- requirement: &id003 !ruby/object:Gem::Requirement
48
+ version_requirements: !ruby/object:Gem::Requirement
49
+ requirements:
50
+ - - "~>"
51
+ - !ruby/object:Gem::Version
52
+ version: 10.0.3
55
53
  none: false
56
- requirements:
57
- - - ~>
58
- - !ruby/object:Gem::Version
59
- hash: 73
60
- segments:
61
- - 10
62
- - 0
63
- - 3
54
+ requirement: !ruby/object:Gem::Requirement
55
+ requirements:
56
+ - - "~>"
57
+ - !ruby/object:Gem::Version
64
58
  version: 10.0.3
59
+ none: false
60
+ prerelease: false
65
61
  type: :development
66
- version_requirements: *id003
67
- - !ruby/object:Gem::Dependency
62
+ - !ruby/object:Gem::Dependency
68
63
  name: dm-core
69
- prerelease: false
70
- requirement: &id004 !ruby/object:Gem::Requirement
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - '='
67
+ - !ruby/object:Gem::Version
68
+ version: 1.2.0
71
69
  none: false
72
- requirements:
73
- - - "="
74
- - !ruby/object:Gem::Version
75
- hash: 31
76
- segments:
77
- - 1
78
- - 2
79
- - 0
70
+ requirement: !ruby/object:Gem::Requirement
71
+ requirements:
72
+ - - '='
73
+ - !ruby/object:Gem::Version
80
74
  version: 1.2.0
75
+ none: false
76
+ prerelease: false
81
77
  type: :development
82
- version_requirements: *id004
83
- - !ruby/object:Gem::Dependency
78
+ - !ruby/object:Gem::Dependency
84
79
  name: dm-migrations
85
- prerelease: false
86
- requirement: &id005 !ruby/object:Gem::Requirement
80
+ version_requirements: !ruby/object:Gem::Requirement
81
+ requirements:
82
+ - - '='
83
+ - !ruby/object:Gem::Version
84
+ version: 1.2.0
87
85
  none: false
88
- requirements:
89
- - - "="
90
- - !ruby/object:Gem::Version
91
- hash: 31
92
- segments:
93
- - 1
94
- - 2
95
- - 0
86
+ requirement: !ruby/object:Gem::Requirement
87
+ requirements:
88
+ - - '='
89
+ - !ruby/object:Gem::Version
96
90
  version: 1.2.0
91
+ none: false
92
+ prerelease: false
97
93
  type: :development
98
- version_requirements: *id005
99
- - !ruby/object:Gem::Dependency
94
+ - !ruby/object:Gem::Dependency
100
95
  name: dm-sqlite-adapter
101
- prerelease: false
102
- requirement: &id006 !ruby/object:Gem::Requirement
96
+ version_requirements: !ruby/object:Gem::Requirement
97
+ requirements:
98
+ - - '='
99
+ - !ruby/object:Gem::Version
100
+ version: 1.2.0
103
101
  none: false
104
- requirements:
105
- - - "="
106
- - !ruby/object:Gem::Version
107
- hash: 31
108
- segments:
109
- - 1
110
- - 2
111
- - 0
102
+ requirement: !ruby/object:Gem::Requirement
103
+ requirements:
104
+ - - '='
105
+ - !ruby/object:Gem::Version
112
106
  version: 1.2.0
107
+ none: false
108
+ prerelease: false
113
109
  type: :development
114
- version_requirements: *id006
115
110
  description: audit the controller actions for the current user. log that data into the database and allow to expire this log files (privacy protection) and be able to browse it from the UI
116
- email:
111
+ email:
117
112
  - m.kristian@web.de
118
113
  executables: []
119
-
120
114
  extensions: []
121
-
122
115
  extra_rdoc_files: []
123
-
124
- files:
116
+ files:
125
117
  - MIT-LICENSE
126
118
  - lib/ixtlan-audit.rb~
127
119
  - lib/ixtlan-audit.rb
@@ -145,38 +137,33 @@ files:
145
137
  - spec/audit_manager_spec.rb
146
138
  - spec/audit_manager_spec.rb~
147
139
  homepage: http://github.com/mkristian/ixtlan-audit
148
- licenses:
140
+ licenses:
149
141
  - MIT
150
- post_install_message:
151
- rdoc_options:
152
- - --main
142
+ post_install_message:
143
+ rdoc_options:
144
+ - "--main"
153
145
  - README.textile
154
- require_paths:
146
+ require_paths:
155
147
  - lib
156
- required_ruby_version: !ruby/object:Gem::Requirement
157
- none: false
158
- requirements:
148
+ required_ruby_version: !ruby/object:Gem::Requirement
149
+ requirements:
159
150
  - - ">="
160
- - !ruby/object:Gem::Version
161
- hash: 3
162
- segments:
163
- - 0
164
- version: "0"
165
- required_rubygems_version: !ruby/object:Gem::Requirement
151
+ - !ruby/object:Gem::Version
152
+ version: !binary |-
153
+ MA==
166
154
  none: false
167
- requirements:
155
+ required_rubygems_version: !ruby/object:Gem::Requirement
156
+ requirements:
168
157
  - - ">="
169
- - !ruby/object:Gem::Version
170
- hash: 3
171
- segments:
172
- - 0
173
- version: "0"
158
+ - !ruby/object:Gem::Version
159
+ version: !binary |-
160
+ MA==
161
+ none: false
174
162
  requirements: []
175
-
176
- rubyforge_project:
177
- rubygems_version: 1.8.15
178
- signing_key:
163
+ rubyforge_project:
164
+ rubygems_version: 1.8.24
165
+ signing_key:
179
166
  specification_version: 3
180
167
  summary: audit the controller actions for the current user
181
- test_files:
168
+ test_files:
182
169
  - spec/audit_manager_spec.rb