dor-rights-auth 1.1.0 → 1.2.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.
- checksums.yaml +4 -4
- data/lib/dor/rights_auth.rb +98 -19
- metadata +3 -3
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA1:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 5cf8440dedbe7f16ab7b4c9e6ddb7b2915469fed
|
|
4
|
+
data.tar.gz: f9af60728a4c488eebfd37f4812cedc90f243675
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 318fbc547f7abd9bd91dc0199b3f5acd71985c04324cb2cdf7ebee64e324e10687ec727475a4ecb9e5523ba8e970ef55904fc9a63133dc7f2fce8454d9255e15
|
|
7
|
+
data.tar.gz: df90d1277ddf87928a34ab995bbb596faaeb0c56b86f79f316a8589eb08e37154277b688dd69229dc98e0033c470c68242b7329aeb143364505fa0a2f9bed2dd
|
data/lib/dor/rights_auth.rb
CHANGED
|
@@ -44,7 +44,7 @@ module Dor
|
|
|
44
44
|
|
|
45
45
|
# Returns true if the object is under embargo.
|
|
46
46
|
# @return [Boolean]
|
|
47
|
-
def embargoed?
|
|
47
|
+
def embargoed?
|
|
48
48
|
@embargoed
|
|
49
49
|
end
|
|
50
50
|
|
|
@@ -257,6 +257,17 @@ module Dor
|
|
|
257
257
|
terms.push "group|#{machine.at_xpath('./group').value.downcase}"
|
|
258
258
|
end
|
|
259
259
|
|
|
260
|
+
['location', 'agent'].each do |access_type|
|
|
261
|
+
if machine.at_xpath("./#{access_type}")
|
|
262
|
+
terms.push access_type
|
|
263
|
+
terms.push "#{access_type}_with_rule" if machine.at_xpath("./#{access_type}")
|
|
264
|
+
end
|
|
265
|
+
end
|
|
266
|
+
|
|
267
|
+
if doc.at_xpath("//rightsMetadata/access[@type='read' and file]/machine/none")
|
|
268
|
+
terms.push "none_read_file"
|
|
269
|
+
end
|
|
270
|
+
|
|
260
271
|
if machine.at_xpath('./none')
|
|
261
272
|
terms.push 'none_read'
|
|
262
273
|
elsif machine.at_xpath('./world')
|
|
@@ -293,12 +304,26 @@ module Dor
|
|
|
293
304
|
# :errors => [...], # known error cases
|
|
294
305
|
# :terms => [...] # array of non-error characterizations and stats strings
|
|
295
306
|
# }
|
|
296
|
-
def self.
|
|
307
|
+
def self.init_index_elements(doc)
|
|
297
308
|
errors = validate_lite(doc)
|
|
298
309
|
stuff = {
|
|
299
|
-
:primary
|
|
300
|
-
:errors
|
|
301
|
-
:terms
|
|
310
|
+
:primary => nil,
|
|
311
|
+
:errors => errors,
|
|
312
|
+
:terms => [],
|
|
313
|
+
:obj_groups => [],
|
|
314
|
+
:obj_locations => [],
|
|
315
|
+
:obj_agents => [],
|
|
316
|
+
:file_groups => [],
|
|
317
|
+
:file_locations => [],
|
|
318
|
+
:file_agents => [],
|
|
319
|
+
:obj_world_qualified => [],
|
|
320
|
+
:obj_groups_qualified => [],
|
|
321
|
+
:obj_locations_qualified => [],
|
|
322
|
+
:obj_agents_qualified => [],
|
|
323
|
+
:file_world_qualified => [],
|
|
324
|
+
:file_groups_qualified => [],
|
|
325
|
+
:file_locations_qualified => [],
|
|
326
|
+
:file_agents_qualified => []
|
|
302
327
|
}
|
|
303
328
|
|
|
304
329
|
if errors.include? 'no_rightsMetadata'
|
|
@@ -307,22 +332,31 @@ module Dor
|
|
|
307
332
|
end
|
|
308
333
|
|
|
309
334
|
stuff[:terms] = extract_index_terms(doc)
|
|
310
|
-
|
|
335
|
+
stuff[:primary] = primary_access_rights stuff[:terms], errors
|
|
311
336
|
|
|
312
|
-
|
|
313
|
-
|
|
337
|
+
stuff
|
|
338
|
+
end
|
|
339
|
+
|
|
340
|
+
# "primary" access is a somewhat crude way of summarizing a whole
|
|
341
|
+
# object (possibly with many disparate interacting rights types)
|
|
342
|
+
# using one rights label. but it should still do a good job of capturing
|
|
343
|
+
# rights that make more sense at the object level (e.g. 'dark').
|
|
344
|
+
def self.primary_access_rights(index_terms, errors)
|
|
345
|
+
has_rule = index_terms.include? 'has_rule'
|
|
346
|
+
if index_terms.include?('none_discover')
|
|
347
|
+
'dark'
|
|
314
348
|
elsif errors.include?('no_discover_access') || errors.include?('no_discover_machine')
|
|
315
|
-
|
|
316
|
-
elsif errors.include?('no_read_machine') ||
|
|
317
|
-
|
|
318
|
-
elsif
|
|
319
|
-
|
|
320
|
-
elsif
|
|
321
|
-
|
|
349
|
+
'dark'
|
|
350
|
+
elsif errors.include?('no_read_machine') || index_terms.include?('none_read')
|
|
351
|
+
'citation'
|
|
352
|
+
elsif index_terms.include? 'world_read'
|
|
353
|
+
has_rule ? 'world_qualified' : 'world'
|
|
354
|
+
elsif index_terms.include?('has_group_rights') ||
|
|
355
|
+
index_terms.include?('location') || index_terms.include?('agent')
|
|
356
|
+
has_rule ? 'access_restricted_qualified' : 'access_restricted'
|
|
322
357
|
else # should never happen, but we might as well note it if it does
|
|
323
|
-
|
|
358
|
+
has_rule ? 'UNKNOWN_qualified' : 'UNKNOWN'
|
|
324
359
|
end
|
|
325
|
-
stuff
|
|
326
360
|
end
|
|
327
361
|
|
|
328
362
|
# Create a Dor::RightsAuth object from xml
|
|
@@ -335,22 +369,28 @@ module Dor
|
|
|
335
369
|
rights.obj_lvl.world = Rights.new
|
|
336
370
|
|
|
337
371
|
doc = xml.is_a?(Nokogiri::XML::Document) ? xml.clone : Nokogiri::XML(xml)
|
|
372
|
+
|
|
373
|
+
rights.index_elements = init_index_elements(doc) if forindex
|
|
374
|
+
|
|
338
375
|
if doc.at_xpath("//rightsMetadata/access[@type='read' and not(file)]/machine/world")
|
|
339
376
|
rights.obj_lvl.world.value = true
|
|
340
377
|
rule = doc.at_xpath("//rightsMetadata/access[@type='read' and not(file)]/machine/world/@rule")
|
|
341
378
|
rights.obj_lvl.world.rule = rule.value if rule
|
|
379
|
+
rights.index_elements[:obj_world_qualified] << { :rule => (rule ? rule.value : nil) } if forindex
|
|
342
380
|
else
|
|
343
381
|
rights.obj_lvl.world.value = false
|
|
344
382
|
end
|
|
345
383
|
|
|
346
384
|
rights.obj_lvl.group = { :stanford => Rights.new }
|
|
347
|
-
rights.index_elements = extract_access_rights(doc) if forindex
|
|
348
|
-
|
|
349
385
|
xpath = "//rightsMetadata/access[@type='read' and not(file)]/machine/group[#{CONTAINS_STANFORD_XPATH}]"
|
|
350
386
|
if doc.at_xpath(xpath)
|
|
351
387
|
rights.obj_lvl.group[:stanford].value = true
|
|
352
388
|
rule = doc.at_xpath("#{xpath}/@rule")
|
|
353
389
|
rights.obj_lvl.group[:stanford].rule = rule.value if rule
|
|
390
|
+
if forindex
|
|
391
|
+
rights.index_elements[:obj_groups_qualified] << { :group => 'stanford', :rule => (rule ? rule.value : nil) }
|
|
392
|
+
rights.index_elements[:obj_groups] << 'stanford'
|
|
393
|
+
end
|
|
354
394
|
else
|
|
355
395
|
rights.obj_lvl.group[:stanford].value = false
|
|
356
396
|
end
|
|
@@ -361,6 +401,10 @@ module Dor
|
|
|
361
401
|
r.value = true
|
|
362
402
|
r.rule = node['rule']
|
|
363
403
|
rights.obj_lvl.location[node.content] = r
|
|
404
|
+
if forindex
|
|
405
|
+
rights.index_elements[:obj_locations_qualified] << { :location => node.content, :rule => node['rule'] }
|
|
406
|
+
rights.index_elements[:obj_locations] << node.content
|
|
407
|
+
end
|
|
364
408
|
end
|
|
365
409
|
|
|
366
410
|
rights.obj_lvl.agent = {}
|
|
@@ -369,6 +413,10 @@ module Dor
|
|
|
369
413
|
r.value = true
|
|
370
414
|
r.rule = node['rule']
|
|
371
415
|
rights.obj_lvl.agent[node.content] = r
|
|
416
|
+
if forindex
|
|
417
|
+
rights.index_elements[:obj_agents_qualified] << { :agent => node.content, :rule => node['rule'] }
|
|
418
|
+
rights.index_elements[:obj_agents] << node.content
|
|
419
|
+
end
|
|
372
420
|
end
|
|
373
421
|
|
|
374
422
|
# Initialze embargo_status to false
|
|
@@ -387,6 +435,11 @@ module Dor
|
|
|
387
435
|
stanford_access.value = true
|
|
388
436
|
rule = access_node.at_xpath("machine/group[#{CONTAINS_STANFORD_XPATH}]/@rule")
|
|
389
437
|
stanford_access.rule = rule.value if rule
|
|
438
|
+
if forindex
|
|
439
|
+
rights.index_elements[:file_groups_qualified] <<
|
|
440
|
+
{ :group => 'stanford', :rule => (rule ? rule.value : nil) }
|
|
441
|
+
rights.index_elements[:file_groups] << 'stanford'
|
|
442
|
+
end
|
|
390
443
|
else
|
|
391
444
|
stanford_access.value = false
|
|
392
445
|
end
|
|
@@ -395,6 +448,7 @@ module Dor
|
|
|
395
448
|
world_access.value = true
|
|
396
449
|
rule = access_node.at_xpath('machine/world/@rule')
|
|
397
450
|
world_access.rule = rule.value if rule
|
|
451
|
+
rights.index_elements[:file_world_qualified] << { :rule => (rule ? rule.value : nil) } if forindex
|
|
398
452
|
else
|
|
399
453
|
world_access.value = false
|
|
400
454
|
end
|
|
@@ -405,6 +459,10 @@ module Dor
|
|
|
405
459
|
r.value = true
|
|
406
460
|
r.rule = node['rule']
|
|
407
461
|
file_locations[node.content] = r
|
|
462
|
+
if forindex
|
|
463
|
+
rights.index_elements[:file_locations_qualified] << { :location => node.content, :rule => node['rule'] }
|
|
464
|
+
rights.index_elements[:file_locations] << node.content
|
|
465
|
+
end
|
|
408
466
|
end
|
|
409
467
|
|
|
410
468
|
file_agents = {}
|
|
@@ -413,6 +471,10 @@ module Dor
|
|
|
413
471
|
r.value = true
|
|
414
472
|
r.rule = node['rule']
|
|
415
473
|
file_agents[node.content] = r
|
|
474
|
+
if forindex
|
|
475
|
+
rights.index_elements[:file_agents_qualified] << { :agent => node.content, :rule => node['rule'] }
|
|
476
|
+
rights.index_elements[:file_agents] << node.content
|
|
477
|
+
end
|
|
416
478
|
end
|
|
417
479
|
|
|
418
480
|
access_node.xpath('file').each do |f|
|
|
@@ -426,6 +488,23 @@ module Dor
|
|
|
426
488
|
end
|
|
427
489
|
end
|
|
428
490
|
|
|
491
|
+
if forindex
|
|
492
|
+
[:obj_groups,
|
|
493
|
+
:obj_locations,
|
|
494
|
+
:obj_agents,
|
|
495
|
+
:file_groups,
|
|
496
|
+
:file_locations,
|
|
497
|
+
:file_agents,
|
|
498
|
+
:obj_world_qualified,
|
|
499
|
+
:obj_groups_qualified,
|
|
500
|
+
:obj_locations_qualified,
|
|
501
|
+
:obj_agents_qualified,
|
|
502
|
+
:file_world_qualified,
|
|
503
|
+
:file_groups_qualified,
|
|
504
|
+
:file_locations_qualified,
|
|
505
|
+
:file_agents_qualified].each { |index_elt| rights.index_elements[index_elt].uniq! }
|
|
506
|
+
end
|
|
507
|
+
|
|
429
508
|
rights
|
|
430
509
|
end
|
|
431
510
|
|
metadata
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: dor-rights-auth
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 1.
|
|
4
|
+
version: 1.2.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Willy Mene
|
|
@@ -9,7 +9,7 @@ authors:
|
|
|
9
9
|
autorequire:
|
|
10
10
|
bindir: bin
|
|
11
11
|
cert_chain: []
|
|
12
|
-
date: 2016-
|
|
12
|
+
date: 2016-07-06 00:00:00.000000000 Z
|
|
13
13
|
dependencies:
|
|
14
14
|
- !ruby/object:Gem::Dependency
|
|
15
15
|
name: nokogiri
|
|
@@ -131,7 +131,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
|
131
131
|
version: 1.3.6
|
|
132
132
|
requirements: []
|
|
133
133
|
rubyforge_project:
|
|
134
|
-
rubygems_version: 2.4.
|
|
134
|
+
rubygems_version: 2.4.8
|
|
135
135
|
signing_key:
|
|
136
136
|
specification_version: 4
|
|
137
137
|
summary: Parses rightsMetadata xml into a useable object
|