Commit c31de66e673411ea8536708ccff83f5866ac844a
1 parent
7826abb9
Exists in
staging
and in
4 other branches
virtuoso: added an option to configure a virtuoso read-only account
Showing
5 changed files
with
44 additions
and
16 deletions
Show diff stats
plugins/virtuoso/lib/virtuoso_plugin.rb
@@ -17,15 +17,25 @@ class VirtuosoPlugin < Noosfero::Plugin | @@ -17,15 +17,25 @@ class VirtuosoPlugin < Noosfero::Plugin | ||
17 | end | 17 | end |
18 | 18 | ||
19 | def virtuoso_client | 19 | def virtuoso_client |
20 | - @virtuoso_client ||= RDF::Virtuoso::Repository.new("#{settings.virtuoso_uri}/sparql", :update_uri => "#{settings.virtuoso_uri}/sparql-auth", :username => settings.virtuoso_username, :password => settings.virtuoso_password, :auth_method => 'digest', :timeout => 30) | 20 | + @virtuoso_client ||= virtuoso_client_builder(settings.virtuoso_uri, settings.virtuoso_username, settings.virtuoso_password) |
21 | end | 21 | end |
22 | - | 22 | + |
23 | + def virtuoso_readonly_client | ||
24 | + @virtuoso_readonly_client ||= virtuoso_client_builder(settings.virtuoso_uri, settings.virtuoso_readonly_username, settings.virtuoso_readonly_password) | ||
25 | + end | ||
26 | + | ||
23 | def js_files | 27 | def js_files |
24 | ['edit-server-list'] | 28 | ['edit-server-list'] |
25 | - end | 29 | + end |
26 | 30 | ||
27 | def stylesheet? | 31 | def stylesheet? |
28 | true | 32 | true |
29 | end | 33 | end |
30 | 34 | ||
35 | + protected | ||
36 | + | ||
37 | + def virtuoso_client_builder(uri, username, password) | ||
38 | + RDF::Virtuoso::Repository.new("#{uri}/sparql", :update_uri => "#{uri}/sparql-auth", :username => username, :password => password, :auth_method => 'digest', :timeout => 30) | ||
39 | + end | ||
40 | + | ||
31 | end | 41 | end |
plugins/virtuoso/lib/virtuoso_plugin/triples_template.rb
@@ -37,7 +37,7 @@ class VirtuosoPlugin::TriplesTemplate < Article | @@ -37,7 +37,7 @@ class VirtuosoPlugin::TriplesTemplate < Article | ||
37 | 37 | ||
38 | def template_content | 38 | def template_content |
39 | begin | 39 | begin |
40 | - results = plugin.virtuoso_client.query(query) | 40 | + results = plugin.virtuoso_readonly_client.query(query) |
41 | liquid_template = Liquid::Template.parse(template) | 41 | liquid_template = Liquid::Template.parse(template) |
42 | page = liquid_template.render('results' => results) | 42 | page = liquid_template.render('results' => results) |
43 | transform_html(page) | 43 | transform_html(page) |
plugins/virtuoso/test/unit/triples_template_test.rb
@@ -10,8 +10,8 @@ class TriplesTemplateTest < ActiveSupport::TestCase | @@ -10,8 +10,8 @@ class TriplesTemplateTest < ActiveSupport::TestCase | ||
10 | 10 | ||
11 | should 'evaluate template using query results' do | 11 | should 'evaluate template using query results' do |
12 | article.stubs(:plugin).returns(mock) | 12 | article.stubs(:plugin).returns(mock) |
13 | - article.plugin.expects(:virtuoso_client).at_least_once.returns(mock) | ||
14 | - article.plugin.virtuoso_client.expects(:query).returns([{'var' => 'Hello '}, {'var' => 'World'}]) | 13 | + article.plugin.expects(:virtuoso_readonly_client).at_least_once.returns(mock) |
14 | + article.plugin.virtuoso_readonly_client.expects(:query).returns([{'var' => 'Hello '}, {'var' => 'World'}]) | ||
15 | article.template = "{% for row in results %}{{row.var}}{% endfor %}" | 15 | article.template = "{% for row in results %}{{row.var}}{% endfor %}" |
16 | 16 | ||
17 | assert_match /Hello World/, article.template_content | 17 | assert_match /Hello World/, article.template_content |
@@ -19,8 +19,8 @@ class TriplesTemplateTest < ActiveSupport::TestCase | @@ -19,8 +19,8 @@ class TriplesTemplateTest < ActiveSupport::TestCase | ||
19 | 19 | ||
20 | should 'display error message when failed to execute the query' do | 20 | should 'display error message when failed to execute the query' do |
21 | article.stubs(:plugin).returns(mock) | 21 | article.stubs(:plugin).returns(mock) |
22 | - article.plugin.expects(:virtuoso_client).at_least_once.returns(mock) | ||
23 | - article.plugin.virtuoso_client.expects(:query).raises(RuntimeError.new) | 22 | + article.plugin.expects(:virtuoso_readonly_client).at_least_once.returns(mock) |
23 | + article.plugin.virtuoso_readonly_client.expects(:query).raises(RuntimeError.new) | ||
24 | article.template = "{% for row in results %}{{row.var}}{% endfor %}" | 24 | article.template = "{% for row in results %}{{row.var}}{% endfor %}" |
25 | 25 | ||
26 | assert_equal "Failed to process the template", article.template_content | 26 | assert_equal "Failed to process the template", article.template_content |
@@ -28,8 +28,8 @@ class TriplesTemplateTest < ActiveSupport::TestCase | @@ -28,8 +28,8 @@ class TriplesTemplateTest < ActiveSupport::TestCase | ||
28 | 28 | ||
29 | should 'transform css into inline stylesheet' do | 29 | should 'transform css into inline stylesheet' do |
30 | article.stubs(:plugin).returns(mock) | 30 | article.stubs(:plugin).returns(mock) |
31 | - article.plugin.expects(:virtuoso_client).at_least_once.returns(mock) | ||
32 | - article.plugin.virtuoso_client.expects(:query).returns([{'var' => 'Hello '}, {'var' => 'World'}]) | 31 | + article.plugin.expects(:virtuoso_readonly_client).at_least_once.returns(mock) |
32 | + article.plugin.virtuoso_readonly_client.expects(:query).returns([{'var' => 'Hello '}, {'var' => 'World'}]) | ||
33 | article.template = "{% for row in results %}<p>{{row.var}}</p>{% endfor %}" | 33 | article.template = "{% for row in results %}<p>{{row.var}}</p>{% endfor %}" |
34 | article.stylesheet = "p {color: red}" | 34 | article.stylesheet = "p {color: red}" |
35 | 35 | ||
@@ -40,8 +40,8 @@ class TriplesTemplateTest < ActiveSupport::TestCase | @@ -40,8 +40,8 @@ class TriplesTemplateTest < ActiveSupport::TestCase | ||
40 | 40 | ||
41 | should 'do not allow js injection' do | 41 | should 'do not allow js injection' do |
42 | article.stubs(:plugin).returns(mock) | 42 | article.stubs(:plugin).returns(mock) |
43 | - article.plugin.expects(:virtuoso_client).at_least_once.returns(mock) | ||
44 | - article.plugin.virtuoso_client.expects(:query).returns([{'var' => RDF::Literal.new('<script>alert("hello");</script>')}]) | 43 | + article.plugin.expects(:virtuoso_readonly_client).at_least_once.returns(mock) |
44 | + article.plugin.virtuoso_readonly_client.expects(:query).returns([{'var' => RDF::Literal.new('<script>alert("hello");</script>')}]) | ||
45 | article.template = "{% for row in results %}{{row.var}}{% endfor %}" | 45 | article.template = "{% for row in results %}{{row.var}}{% endfor %}" |
46 | 46 | ||
47 | assert_no_match /<script>/, article.template_content | 47 | assert_no_match /<script>/, article.template_content |
plugins/virtuoso/test/unit/virtuoso_plugin_test.rb
@@ -4,13 +4,29 @@ class VirtuosoPluginTest < ActiveSupport::TestCase | @@ -4,13 +4,29 @@ class VirtuosoPluginTest < ActiveSupport::TestCase | ||
4 | 4 | ||
5 | def setup | 5 | def setup |
6 | @environment = Environment.default | 6 | @environment = Environment.default |
7 | - @plugin = VirtuosoPlugin.new | 7 | + @plugin = VirtuosoPlugin.new(self) |
8 | end | 8 | end |
9 | 9 | ||
10 | - attr_reader :plugin | 10 | + attr_reader :plugin, :environment |
11 | 11 | ||
12 | should 'define a new content' do | 12 | should 'define a new content' do |
13 | assert_equal [VirtuosoPlugin::TriplesTemplate], plugin.content_types | 13 | assert_equal [VirtuosoPlugin::TriplesTemplate], plugin.content_types |
14 | end | 14 | end |
15 | 15 | ||
16 | + should 'create a client for virtuoso using admin account' do | ||
17 | + plugin.stubs(:settings).returns(mock) | ||
18 | + plugin.settings.expects(:virtuoso_uri) | ||
19 | + plugin.settings.expects(:virtuoso_username) | ||
20 | + plugin.settings.expects(:virtuoso_password) | ||
21 | + plugin.virtuoso_client | ||
22 | + end | ||
23 | + | ||
24 | + should 'create a client for virtuoso using a read-only account' do | ||
25 | + plugin.stubs(:settings).returns(mock) | ||
26 | + plugin.settings.expects(:virtuoso_uri) | ||
27 | + plugin.settings.expects(:virtuoso_readonly_username) | ||
28 | + plugin.settings.expects(:virtuoso_readonly_password) | ||
29 | + plugin.virtuoso_readonly_client | ||
30 | + end | ||
31 | + | ||
16 | end | 32 | end |
plugins/virtuoso/views/virtuoso_plugin_admin/index.html.erb
@@ -6,8 +6,10 @@ | @@ -6,8 +6,10 @@ | ||
6 | 6 | ||
7 | <strong> | 7 | <strong> |
8 | <%= labelled_form_field _('Virtuoso URL:'), f.text_field(:virtuoso_uri) %> | 8 | <%= labelled_form_field _('Virtuoso URL:'), f.text_field(:virtuoso_uri) %> |
9 | - <%= labelled_form_field _('Virtuoso Username:'), f.text_field(:virtuoso_username) %> | ||
10 | - <%= labelled_form_field _('Virtuoso Password:'), f.password_field(:virtuoso_password) %> | 9 | + <%= labelled_form_field _('Virtuoso Admin Username:'), f.text_field(:virtuoso_username) %> |
10 | + <%= labelled_form_field _('Virtuoso Admin Password:'), f.password_field(:virtuoso_password) %> | ||
11 | + <%= labelled_form_field _('Virtuoso Read-Only Username:'), f.text_field(:virtuoso_readonly_username) %> | ||
12 | + <%= labelled_form_field _('Virtuoso Read-Only Password:'), f.password_field(:virtuoso_readonly_password) %> | ||
11 | <%= labelled_form_field _('DSpace URL:'), f.text_field(:dspace_uri) %> | 13 | <%= labelled_form_field _('DSpace URL:'), f.text_field(:dspace_uri) %> |
12 | </strong> | 14 | </strong> |
13 | 15 |