pg_audit_log 0.5.4 → 0.5.5
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/pg_audit_log/function.rb +16 -4
- data/lib/pg_audit_log/version.rb +1 -1
- data/spec/function_spec.rb +22 -2
- metadata +4 -4
@@ -23,12 +23,24 @@ module PgAuditLog
|
|
23
23
|
"last_accessed_at"
|
24
24
|
end
|
25
25
|
|
26
|
+
def pg_audit_log_old_style_user_id
|
27
|
+
defined?(Rails) && Rails.configuration.pg_audit_log_old_style_user_id rescue false
|
28
|
+
end
|
29
|
+
|
26
30
|
def user_identifier_temporary_function(user_id)
|
27
|
-
|
31
|
+
if pg_audit_log_old_style_user_id
|
32
|
+
"SET audit.user_id = #{user_id || -1};"
|
33
|
+
else
|
34
|
+
"CREATE OR REPLACE FUNCTION pg_temp.pg_audit_log_user_identifier() RETURNS integer AS 'SELECT #{user_id}' LANGUAGE SQL STABLE;"
|
35
|
+
end
|
28
36
|
end
|
29
37
|
|
30
38
|
def user_unique_name_temporary_function(username)
|
31
|
-
|
39
|
+
if pg_audit_log_old_style_user_id
|
40
|
+
"SET audit.user_unique_name = '#{PGconn.escape_bytea(username)}';"
|
41
|
+
else
|
42
|
+
"CREATE OR REPLACE FUNCTION pg_temp.pg_audit_log_user_unique_name() RETURNS varchar AS $_$ SELECT '#{PGconn.escape_bytea(username)}'::varchar $_$ LANGUAGE SQL STABLE;"
|
43
|
+
end
|
32
44
|
end
|
33
45
|
|
34
46
|
def install
|
@@ -47,11 +59,11 @@ module PgAuditLog
|
|
47
59
|
unique_name varchar;
|
48
60
|
column_name varchar;
|
49
61
|
BEGIN
|
50
|
-
user_identifier := pg_temp.pg_audit_log_user_identifier();
|
62
|
+
user_identifier := #{pg_audit_log_old_style_user_id ? "current_setting('audit.user_id')" : 'pg_temp.pg_audit_log_user_identifier()'};
|
51
63
|
IF user_identifier = #{DISABLED_USER} THEN
|
52
64
|
RETURN NULL;
|
53
65
|
END IF;
|
54
|
-
unique_name := pg_temp.pg_audit_log_user_unique_name();
|
66
|
+
unique_name := #{pg_audit_log_old_style_user_id ? "current_setting('audit.user_unique_name')" : 'pg_temp.pg_audit_log_user_unique_name()'};
|
55
67
|
primary_key_column := NULL;
|
56
68
|
EXECUTE 'SELECT pg_attribute.attname
|
57
69
|
FROM pg_index, pg_class, pg_attribute
|
data/lib/pg_audit_log/version.rb
CHANGED
data/spec/function_spec.rb
CHANGED
@@ -22,8 +22,28 @@ describe PgAuditLog::Function do
|
|
22
22
|
subject { PgAuditLog::Function.user_unique_name_temporary_function(email) }
|
23
23
|
let(:email) { "o'connell@fred.com" }
|
24
24
|
|
25
|
-
|
26
|
-
|
25
|
+
context "new style" do
|
26
|
+
it "escapes the email" do
|
27
|
+
subject.should_not match("SET")
|
28
|
+
|
29
|
+
subject.should match("FUNCTION")
|
30
|
+
subject.should match("'o''connell@fred.com'::varchar")
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
context "old style" do
|
35
|
+
before do
|
36
|
+
Rails = double
|
37
|
+
Rails.stub_chain(:configuration, :pg_audit_log_old_style_user_id).and_return(true)
|
38
|
+
end
|
39
|
+
after { Object.send(:remove_const, :Rails) }
|
40
|
+
it "escapes the email" do
|
41
|
+
subject.should match("SET")
|
42
|
+
subject.should match("'o''connell@fred.com'")
|
43
|
+
|
44
|
+
subject.should_not match("FUNCTION")
|
45
|
+
subject.should_not match("'o''connell@fred.com'::varchar")
|
46
|
+
end
|
27
47
|
end
|
28
48
|
end
|
29
49
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: pg_audit_log
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.5.
|
4
|
+
version: 0.5.5
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-
|
12
|
+
date: 2012-06-28 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: rails
|
@@ -143,7 +143,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
143
143
|
version: '0'
|
144
144
|
segments:
|
145
145
|
- 0
|
146
|
-
hash:
|
146
|
+
hash: 4555192677821680411
|
147
147
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
148
148
|
none: false
|
149
149
|
requirements:
|
@@ -152,7 +152,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
152
152
|
version: '0'
|
153
153
|
segments:
|
154
154
|
- 0
|
155
|
-
hash:
|
155
|
+
hash: 4555192677821680411
|
156
156
|
requirements: []
|
157
157
|
rubyforge_project:
|
158
158
|
rubygems_version: 1.8.19
|