dor-rights-auth 1.1.0 → 1.2.0
Sign up to get free protection for your applications and to get access to all the features.
- 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
|