crossdomain 0.0.1
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 +7 -0
- data/.gitignore +17 -0
- data/Gemfile +4 -0
- data/LICENSE.txt +22 -0
- data/README.md +41 -0
- data/Rakefile +10 -0
- data/bin/crossdomain +43 -0
- data/crossdomain.gemspec +27 -0
- data/lib/crossdomain/XML.rb +28 -0
- data/lib/crossdomain/config.rb +23 -0
- data/lib/crossdomain/logging.rb +32 -0
- data/lib/crossdomain/service.rb +52 -0
- data/lib/crossdomain/version.rb +3 -0
- data/lib/crossdomain.rb +28 -0
- data/spec/files/invalid.xml +3 -0
- data/spec/files/invalid_spec.xml +5 -0
- data/spec/files/valid.xml +4 -0
- data/spec/integration/service.rb +5 -0
- data/spec/spec_helper.rb +11 -0
- data/spec/unit/xml_spec.rb +25 -0
- data/vendor/PolicyFile.xsd +143 -0
- metadata +141 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: c4547edd7129c7d8236bcb838981cc767af5f1e5
|
4
|
+
data.tar.gz: 86bad3c77b96f8dd500b91d7fd2d64360c01f4e2
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 9057cf7826dfa80b0cb3640895ad2520e8a09fa83e1bd5cf0128154cfcf78a9ad0620f37e54cf9b1fa75fc12452fa2431eb5cf9916f66e8f705542b73a8d1bac
|
7
|
+
data.tar.gz: d824bac43608c72cc3923c1d4d27c335d2d63fc1eab44b737b337c7bbe46d1ad478d01669f21d1aee2d6933abac0ceb5d9874e34f4f9ea6a53ff3db0a91804ef
|
data/.gitignore
ADDED
data/Gemfile
ADDED
data/LICENSE.txt
ADDED
@@ -0,0 +1,22 @@
|
|
1
|
+
Copyright (c) 2014 Alexander Dimitrov
|
2
|
+
|
3
|
+
MIT License
|
4
|
+
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining
|
6
|
+
a copy of this software and associated documentation files (the
|
7
|
+
"Software"), to deal in the Software without restriction, including
|
8
|
+
without limitation the rights to use, copy, modify, merge, publish,
|
9
|
+
distribute, sublicense, and/or sell copies of the Software, and to
|
10
|
+
permit persons to whom the Software is furnished to do so, subject to
|
11
|
+
the following conditions:
|
12
|
+
|
13
|
+
The above copyright notice and this permission notice shall be
|
14
|
+
included in all copies or substantial portions of the Software.
|
15
|
+
|
16
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
17
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
18
|
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
19
|
+
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
20
|
+
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
21
|
+
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
22
|
+
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
data/README.md
ADDED
@@ -0,0 +1,41 @@
|
|
1
|
+
# Crossdomain
|
2
|
+
|
3
|
+
## Typical usage
|
4
|
+
|
5
|
+
```
|
6
|
+
gem install crossdomain
|
7
|
+
sudo crossdomain --policy-path "/path/to/crossdomain.xml"
|
8
|
+
```
|
9
|
+
|
10
|
+
`Crossdomain` is a standalone daemon to serve flash policy file on the default flash port (843). It uses a crossdomain.xml file you provide, which is validated against adobes schema before served. It requires `root` so it can bind to 843, but after this drops privileges to `nobody`.
|
11
|
+
|
12
|
+
## Who needs this?
|
13
|
+
If you use flash fallback for websockets and you can't serve crossdomain.xml on the same port you probably need this.
|
14
|
+
|
15
|
+
## Requirements
|
16
|
+
|
17
|
+
- Ruby 2.1.2 or greater
|
18
|
+
- root access to bind to port 843
|
19
|
+
|
20
|
+
## Configuration optiosn
|
21
|
+
```
|
22
|
+
-p, --port PORT Port to bind to (Default: 843).
|
23
|
+
-H, --host HOST Address to bind to (Default: 0.0.0.0)
|
24
|
+
-x, --policy-path PATH crossdomain.xml policy file path (Default: pwd + /crossdomain.xml)
|
25
|
+
|
26
|
+
```
|
27
|
+
|
28
|
+
|
29
|
+
## Contributing
|
30
|
+
|
31
|
+
1. Fork it
|
32
|
+
2. Create your feature branch (`git checkout -b my-new-feature`)
|
33
|
+
3. Commit your changes (`git commit -am 'Add some feature'`)
|
34
|
+
4. Push to the branch (`git push origin my-new-feature`)
|
35
|
+
5. Create new Pull Request
|
36
|
+
|
37
|
+
# Author
|
38
|
+
|
39
|
+
- Alexander Dimitrov
|
40
|
+
|
41
|
+
Copyright (c) 2014 Alexander Dimitrov. See LICENSE.txt for further details.
|
data/Rakefile
ADDED
data/bin/crossdomain
ADDED
@@ -0,0 +1,43 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
# encoding: utf-8
|
3
|
+
|
4
|
+
require 'optparse'
|
5
|
+
require 'bundler/setup'
|
6
|
+
|
7
|
+
|
8
|
+
options = {
|
9
|
+
host: '0.0.0.0', port: '843', xml_path: File.join(Dir.pwd, 'crossdomain.xml')
|
10
|
+
}
|
11
|
+
|
12
|
+
|
13
|
+
OptionParser.new do |opts|
|
14
|
+
opts.on '-h', '--help', 'Display this screen' do
|
15
|
+
puts opts
|
16
|
+
exit
|
17
|
+
end
|
18
|
+
|
19
|
+
opts.on '-p', '--port PORT', "Port to bind to (Default: 843)." do |k|
|
20
|
+
options[:app_key] = k
|
21
|
+
end
|
22
|
+
|
23
|
+
opts.on '-H', '--host HOST', "Address to bind to (Default: 0.0.0.0)" do |k|
|
24
|
+
options[:secret] = k
|
25
|
+
end
|
26
|
+
|
27
|
+
opts.on '-x', '--policy-path PATH', 'crossdomain.xml policy file path (Default: `pwd` + /crossdomain.xml)' do |h|
|
28
|
+
options[:xml_path] = h
|
29
|
+
end
|
30
|
+
|
31
|
+
opts.parse!
|
32
|
+
end
|
33
|
+
|
34
|
+
File.tap { |f| require f.expand_path(f.join(f.dirname(__FILE__),'..', 'lib', 'crossdomain.rb')) }
|
35
|
+
Crossdomain::Config.load options
|
36
|
+
|
37
|
+
puts "\n"
|
38
|
+
puts "\n"
|
39
|
+
|
40
|
+
puts "Running Crossdomain v.#{Crossdomain::VERSION}"
|
41
|
+
puts "\n"
|
42
|
+
|
43
|
+
Crossdomain::Service.start
|
data/crossdomain.gemspec
ADDED
@@ -0,0 +1,27 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
lib = File.expand_path('../lib', __FILE__)
|
3
|
+
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
4
|
+
require 'crossdomain/version'
|
5
|
+
|
6
|
+
Gem::Specification.new do |spec|
|
7
|
+
spec.name = "crossdomain"
|
8
|
+
spec.version = Crossdomain::VERSION
|
9
|
+
spec.authors = ["Alexander Dimitrov"]
|
10
|
+
spec.email = ["dimitrov@loggator.com"]
|
11
|
+
spec.description = %q{Daemon to serve crossdomain.xml on the flashport}
|
12
|
+
spec.summary = %q{crossdomain.xml flashsocket daemon}
|
13
|
+
spec.homepage = "https://loggator.com"
|
14
|
+
spec.license = "MIT"
|
15
|
+
|
16
|
+
spec.files = `git ls-files`.split($/)
|
17
|
+
spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
|
18
|
+
spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
|
19
|
+
spec.require_paths = ["lib"]
|
20
|
+
|
21
|
+
spec.add_development_dependency "bundler", "~> 1.3"
|
22
|
+
spec.add_development_dependency "rake"
|
23
|
+
spec.add_development_dependency "rspec"
|
24
|
+
|
25
|
+
spec.add_dependency 'nokogiri', '~> 1.6'
|
26
|
+
spec.add_dependency 'activesupport', '~> 3.1'
|
27
|
+
end
|
@@ -0,0 +1,28 @@
|
|
1
|
+
require 'nokogiri'
|
2
|
+
require 'open-uri'
|
3
|
+
|
4
|
+
module Crossdomain
|
5
|
+
module XML
|
6
|
+
CROSSDOMAIN_SCHEMA_FILE = '/Users/alex/Sites/Social/crossdomain/vendor/PolicyFile.xsd'
|
7
|
+
def validate!(xml_path)
|
8
|
+
|
9
|
+
begin
|
10
|
+
xml = File.read(xml_path)
|
11
|
+
rescue Errno::ENOENT
|
12
|
+
return false
|
13
|
+
end
|
14
|
+
doc = Nokogiri::XML(xml)
|
15
|
+
return false if doc.errors.size > 0
|
16
|
+
|
17
|
+
xsd = Nokogiri::XML::Schema(File.read(CROSSDOMAIN_SCHEMA_FILE))
|
18
|
+
|
19
|
+
|
20
|
+
xsd.validate(doc).each do |error|
|
21
|
+
Crossdomain.logger.warning error.message
|
22
|
+
end
|
23
|
+
|
24
|
+
xml
|
25
|
+
end
|
26
|
+
extend self
|
27
|
+
end
|
28
|
+
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
module Crossdomain
|
2
|
+
module Config
|
3
|
+
def load(opts={})
|
4
|
+
options.update opts
|
5
|
+
end
|
6
|
+
|
7
|
+
def [](key)
|
8
|
+
options[key]
|
9
|
+
end
|
10
|
+
|
11
|
+
def options
|
12
|
+
@options ||= {
|
13
|
+
host: '0.0.0.0', port: '843', xml_path: File.join(Dir.pwd, 'crossdomain.xml')
|
14
|
+
}
|
15
|
+
end
|
16
|
+
|
17
|
+
def method_missing(meth, *args, &blk)
|
18
|
+
options[meth]
|
19
|
+
end
|
20
|
+
|
21
|
+
extend self
|
22
|
+
end
|
23
|
+
end
|
@@ -0,0 +1,32 @@
|
|
1
|
+
require 'time'
|
2
|
+
require 'logger'
|
3
|
+
|
4
|
+
module Crossdomain
|
5
|
+
module Logging
|
6
|
+
|
7
|
+
class Pretty < Logger::Formatter
|
8
|
+
# Provide a call() method that returns the formatted message.
|
9
|
+
def call(severity, time, program_name, message)
|
10
|
+
"#{time.utc.iso8601} #{Process.pid} #{severity}: #{message}\n"
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
def self.logger
|
15
|
+
@logger ||= begin
|
16
|
+
log = Logger.new(STDOUT)
|
17
|
+
log.level = Logger::INFO
|
18
|
+
log.formatter = Pretty.new
|
19
|
+
log
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
def self.logger=(log)
|
24
|
+
@logger = (log ? log : Logger.new('/dev/null'))
|
25
|
+
end
|
26
|
+
|
27
|
+
def logger
|
28
|
+
Crossdomain::Logging.logger
|
29
|
+
end
|
30
|
+
|
31
|
+
end
|
32
|
+
end
|
@@ -0,0 +1,52 @@
|
|
1
|
+
require 'socket'
|
2
|
+
|
3
|
+
module Crossdomain
|
4
|
+
module Service
|
5
|
+
def start
|
6
|
+
|
7
|
+
# Validates XML against Adobe's schema
|
8
|
+
xml = Crossdomain::XML.validate!(Crossdomain::Config[:xml_path])
|
9
|
+
|
10
|
+
unless xml
|
11
|
+
Crossdomain.logger.error "Missing or malformed xml at #{Crossdomain::Config[:xml_path]}"
|
12
|
+
return
|
13
|
+
end
|
14
|
+
|
15
|
+
if Crossdomain::Config[:port].to_i < 1000 and Process.uid != 0
|
16
|
+
Crossdomain.logger.error "You need to be root to bind to port #{Crossdomain::Config[:port]}"
|
17
|
+
return
|
18
|
+
end
|
19
|
+
|
20
|
+
Crossdomain.logger.info "Binding to #{Crossdomain::Config[:host]}:#{Crossdomain::Config[:port]}"
|
21
|
+
@server = TCPServer.new Crossdomain::Config[:host], Crossdomain::Config[:port]
|
22
|
+
|
23
|
+
# Drop privileges
|
24
|
+
Crossdomain.logger.info "Dropping privileges to nobody"
|
25
|
+
uid = Etc.getpwnam("nobody").uid
|
26
|
+
Process::Sys.setuid(uid)
|
27
|
+
|
28
|
+
begin
|
29
|
+
|
30
|
+
loop do
|
31
|
+
Thread.start(@server.accept) do |client|
|
32
|
+
client.puts xml
|
33
|
+
client.close
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
rescue Interrupt
|
38
|
+
#@server.stop
|
39
|
+
Crossdomain.logger.info "Shutting down..."
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
def check_permissions
|
44
|
+
end
|
45
|
+
|
46
|
+
def stop
|
47
|
+
@server.stop
|
48
|
+
end
|
49
|
+
|
50
|
+
extend self
|
51
|
+
end
|
52
|
+
end
|
data/lib/crossdomain.rb
ADDED
@@ -0,0 +1,28 @@
|
|
1
|
+
require 'bundler/setup'
|
2
|
+
require "crossdomain/version"
|
3
|
+
require 'active_support/core_ext/string'
|
4
|
+
require 'nokogiri'
|
5
|
+
require 'net/http'
|
6
|
+
|
7
|
+
module Crossdomain
|
8
|
+
end
|
9
|
+
|
10
|
+
|
11
|
+
module Crossdomain
|
12
|
+
|
13
|
+
def self.logger
|
14
|
+
Crossdomain::Logging.logger
|
15
|
+
end
|
16
|
+
|
17
|
+
def self.logger=(log)
|
18
|
+
Crossdomain::Logging.logger = log
|
19
|
+
end
|
20
|
+
|
21
|
+
end
|
22
|
+
|
23
|
+
|
24
|
+
File.tap do |f|
|
25
|
+
Dir[f.expand_path(f.join(f.dirname(__FILE__), 'crossdomain', '*.rb'))].each do |file|
|
26
|
+
Crossdomain.autoload File.basename(file, '.rb').camelize, file
|
27
|
+
end
|
28
|
+
end
|
data/spec/spec_helper.rb
ADDED
@@ -0,0 +1,25 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
require 'crossdomain'
|
3
|
+
|
4
|
+
describe 'Crossdomain::XML' do
|
5
|
+
describe "#validate!" do
|
6
|
+
it 'should output schema errors as warnings' do
|
7
|
+
expect(Crossdomain.logger).to receive(:warning).with(an_instance_of(String)).at_least(:once)
|
8
|
+
expect(Crossdomain::XML.validate!('spec/files/invalid_spec.xml')).to eq(File.read('spec/files/invalid_spec.xml'))
|
9
|
+
end
|
10
|
+
|
11
|
+
it 'should return string for valid xml' do
|
12
|
+
expect(Crossdomain::XML.validate!('spec/files/valid.xml')).to eq(File.read('spec/files/valid.xml'))
|
13
|
+
end
|
14
|
+
|
15
|
+
it 'should return false for invalid xml' do
|
16
|
+
expect(Crossdomain::XML.validate!('spec/files/invalid.xml')).to eq(false)
|
17
|
+
end
|
18
|
+
|
19
|
+
it 'should throw error for missing file' do
|
20
|
+
expect {
|
21
|
+
Crossdomain::XML.validate!('spec/files/missing.xml')
|
22
|
+
}.to raise_error
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
@@ -0,0 +1,143 @@
|
|
1
|
+
|
2
|
+
<?xml version="1.0"?>
|
3
|
+
|
4
|
+
<!-- Copyright (c) 2007-2009 Adobe Systems Incorporated. All Rights Reserved. -->
|
5
|
+
|
6
|
+
<!-- XML Schema for policy files -->
|
7
|
+
<!-- Generic version for all policy files; see more specific schemas at
|
8
|
+
PolicyFileHttp.xsd, PolicyFileHttps.xsd, PolicyFileFtp.xsd, PolicyFileSocket.xsd -->
|
9
|
+
<!-- Note that several different user-agents support policy files, and each may support
|
10
|
+
a different set of the tags described here. Consult the documentation for your
|
11
|
+
particular user-agent in order to verify that you are using syntax it supports.
|
12
|
+
The rules here only help validate that a policy file is well-formed. -->
|
13
|
+
|
14
|
+
<!-- No target namespace. Flash Player will not parse policy files that
|
15
|
+
use explicit namespace qualification (e.g. <pf:cross-domain-policy>),
|
16
|
+
so we place our types in the unqualified namespace to discourage
|
17
|
+
qualification in policy files. -->
|
18
|
+
|
19
|
+
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
|
20
|
+
|
21
|
+
<!-- Meta-policy: a policy on policies.
|
22
|
+
A declaration in a master policy file, controlling what other policy files
|
23
|
+
may exist on the server. -->
|
24
|
+
<xsd:simpleType name="meta-policy-attribute">
|
25
|
+
<xsd:restriction base="xsd:string">
|
26
|
+
<xsd:enumeration value="all"/>
|
27
|
+
<xsd:enumeration value="by-content-type"/>
|
28
|
+
<xsd:enumeration value="by-ftp-filename"/>
|
29
|
+
<xsd:enumeration value="master-only"/>
|
30
|
+
<xsd:enumeration value="none"/>
|
31
|
+
</xsd:restriction>
|
32
|
+
</xsd:simpleType>
|
33
|
+
|
34
|
+
<!-- DNS domain name.
|
35
|
+
Wildcard forms "*" and "*.foo.com" also allowed. -->
|
36
|
+
<xsd:simpleType name="domain-attribute">
|
37
|
+
<xsd:restriction base="xsd:string">
|
38
|
+
<xsd:pattern value="\*|(\*?[A-Za-z0-9\-\.]+)"/>
|
39
|
+
</xsd:restriction>
|
40
|
+
</xsd:simpleType>
|
41
|
+
|
42
|
+
<!-- TCP/UDP port range -->
|
43
|
+
<xsd:simpleType name="ports-attribute">
|
44
|
+
<xsd:restriction base="xsd:string">
|
45
|
+
<xsd:pattern value="\*|([0-9]+(-[0-9]+)?(,[0-9]+(-[0-9]+)?)*)"/>
|
46
|
+
</xsd:restriction>
|
47
|
+
</xsd:simpleType>
|
48
|
+
|
49
|
+
<!-- secure attribute: permits override of default rule
|
50
|
+
that HTTPS resources require HTTPS accessors -->
|
51
|
+
<xsd:simpleType name="secure-attribute">
|
52
|
+
<xsd:restriction base="xsd:string">
|
53
|
+
<xsd:enumeration value="true"/>
|
54
|
+
<xsd:enumeration value="false"/>
|
55
|
+
</xsd:restriction>
|
56
|
+
</xsd:simpleType>
|
57
|
+
|
58
|
+
<!-- Set of HTTP header names.
|
59
|
+
Wildcard forms "*" and "Prefix-*" also allowed. -->
|
60
|
+
<xsd:simpleType name="headers-attribute">
|
61
|
+
<xsd:restriction base="xsd:string">
|
62
|
+
<!-- What is a legal header name?
|
63
|
+
RFC2616, which defines HTTP/1.1, refers to RFC822, which defines email.
|
64
|
+
RFC822 says that anything from ASCII 33 - 126 (decimal), minus the colon, is legal.
|
65
|
+
From this, we subtract the comma, since we interpret it as a separator,
|
66
|
+
and the asterisk, since we interpret it as a wildcard. -->
|
67
|
+
</xsd:restriction>
|
68
|
+
</xsd:simpleType>
|
69
|
+
|
70
|
+
<!-- SHA-1 fingerprint: 40 hex digits, with optional spaces and colons as separators -->
|
71
|
+
<xsd:simpleType name="sha1-fingerprint-attribute">
|
72
|
+
<xsd:restriction base="xsd:string">
|
73
|
+
<xsd:pattern value="([0-9a-fA-F][: ]?){40}"/>
|
74
|
+
</xsd:restriction>
|
75
|
+
</xsd:simpleType>
|
76
|
+
|
77
|
+
<!-- SHA-1 fingerprint algorithm designation: case insensitive -->
|
78
|
+
<xsd:simpleType name="sha1-fingerprint-algorithm-attribute">
|
79
|
+
<xsd:restriction base="xsd:string">
|
80
|
+
<xsd:pattern value="[Ss][Hh][Aa]-1"/>
|
81
|
+
</xsd:restriction>
|
82
|
+
</xsd:simpleType>
|
83
|
+
|
84
|
+
<!-- site-control tag: site-wide declarations for master policy file -->
|
85
|
+
<xsd:complexType name="site-control-element">
|
86
|
+
<xsd:attribute name="permitted-cross-domain-policies" use="required" type="meta-policy-attribute"/>
|
87
|
+
</xsd:complexType>
|
88
|
+
|
89
|
+
<!-- allow-access-from tag: permit access by documents from specified domains -->
|
90
|
+
<xsd:complexType name="allow-access-element">
|
91
|
+
<xsd:attribute name="domain" use="required" type="domain-attribute"/>
|
92
|
+
<xsd:attribute name="to-ports" use="optional" type="ports-attribute"/>
|
93
|
+
<xsd:attribute name="secure" use="optional" type="secure-attribute"/>
|
94
|
+
</xsd:complexType>
|
95
|
+
|
96
|
+
<!-- allow-http-request-headers-from tag: permit HTTP request header sending
|
97
|
+
by documents from specified domains -->
|
98
|
+
<xsd:complexType name="allow-headers-element">
|
99
|
+
<xsd:attribute name="domain" use="required" type="domain-attribute"/>
|
100
|
+
<xsd:attribute name="headers" use="required" type="headers-attribute"/>
|
101
|
+
<xsd:attribute name="secure" use="optional" type="secure-attribute"/>
|
102
|
+
</xsd:complexType>
|
103
|
+
|
104
|
+
<!-- certificate tag: identifies a signing certificate by its fingerprint.
|
105
|
+
For now, the only fingerprint algorithm supported is SHA-1.
|
106
|
+
The fingerprint is to be computed over the DER encoding of an X.509 certificate. -->
|
107
|
+
<xsd:complexType name="certificate-element">
|
108
|
+
<xsd:attribute name="fingerprint" use="required" type="sha1-fingerprint-attribute"/>
|
109
|
+
<xsd:attribute name="fingerprint-algorithm" use="required" type="sha1-fingerprint-algorithm-attribute"/>
|
110
|
+
</xsd:complexType>
|
111
|
+
|
112
|
+
<!-- signatory tag: permit access by documents signed with specified credentials -->
|
113
|
+
<xsd:complexType name="signatory-element">
|
114
|
+
<xsd:choice>
|
115
|
+
<xsd:element name="certificate" type="certificate-element" minOccurs="1" maxOccurs="1"/>
|
116
|
+
</xsd:choice>
|
117
|
+
</xsd:complexType>
|
118
|
+
|
119
|
+
<!-- allow-access-from-identity tag: permit access by documents identified by
|
120
|
+
cryptographic means.
|
121
|
+
For now, these means are limited to signatures. -->
|
122
|
+
<xsd:complexType name="allow-access-identity-element">
|
123
|
+
<xsd:choice>
|
124
|
+
<xsd:element name="signatory" type="signatory-element" minOccurs="1" maxOccurs="1"/>
|
125
|
+
</xsd:choice>
|
126
|
+
</xsd:complexType>
|
127
|
+
|
128
|
+
<!-- cross-domain-policy tag: top-level tag in the file -->
|
129
|
+
<xsd:complexType name="cross-domain-policy-element">
|
130
|
+
<xsd:sequence>
|
131
|
+
<xsd:element name="site-control" minOccurs="0" maxOccurs="1" type="site-control-element"/>
|
132
|
+
<xsd:element name="allow-access-from" minOccurs="0" maxOccurs="unbounded" type="allow-access-element"/>
|
133
|
+
<xsd:element name="allow-http-request-headers-from" minOccurs="0" maxOccurs="unbounded" type="allow-headers-element"/>
|
134
|
+
<xsd:element name="allow-access-from-identity" minOccurs="0" maxOccurs="unbounded" type="allow-access-identity-element"/>
|
135
|
+
</xsd:sequence>
|
136
|
+
</xsd:complexType>
|
137
|
+
|
138
|
+
<!-- specify top-level tag -->
|
139
|
+
<xsd:element name="cross-domain-policy" type="cross-domain-policy-element"/>
|
140
|
+
|
141
|
+
</xsd:schema>
|
142
|
+
|
143
|
+
<!-- End of file. -->
|
metadata
ADDED
@@ -0,0 +1,141 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: crossdomain
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.1
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Alexander Dimitrov
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2014-08-09 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: bundler
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - "~>"
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '1.3'
|
20
|
+
type: :development
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - "~>"
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '1.3'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: rake
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - ">="
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '0'
|
34
|
+
type: :development
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - ">="
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '0'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: rspec
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - ">="
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '0'
|
48
|
+
type: :development
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - ">="
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '0'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: nokogiri
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - "~>"
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '1.6'
|
62
|
+
type: :runtime
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - "~>"
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '1.6'
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: activesupport
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - "~>"
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: '3.1'
|
76
|
+
type: :runtime
|
77
|
+
prerelease: false
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - "~>"
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: '3.1'
|
83
|
+
description: Daemon to serve crossdomain.xml on the flashport
|
84
|
+
email:
|
85
|
+
- dimitrov@loggator.com
|
86
|
+
executables:
|
87
|
+
- crossdomain
|
88
|
+
extensions: []
|
89
|
+
extra_rdoc_files: []
|
90
|
+
files:
|
91
|
+
- ".gitignore"
|
92
|
+
- Gemfile
|
93
|
+
- LICENSE.txt
|
94
|
+
- README.md
|
95
|
+
- Rakefile
|
96
|
+
- bin/crossdomain
|
97
|
+
- crossdomain.gemspec
|
98
|
+
- lib/crossdomain.rb
|
99
|
+
- lib/crossdomain/XML.rb
|
100
|
+
- lib/crossdomain/config.rb
|
101
|
+
- lib/crossdomain/logging.rb
|
102
|
+
- lib/crossdomain/service.rb
|
103
|
+
- lib/crossdomain/version.rb
|
104
|
+
- spec/files/invalid.xml
|
105
|
+
- spec/files/invalid_spec.xml
|
106
|
+
- spec/files/valid.xml
|
107
|
+
- spec/integration/service.rb
|
108
|
+
- spec/spec_helper.rb
|
109
|
+
- spec/unit/xml_spec.rb
|
110
|
+
- vendor/PolicyFile.xsd
|
111
|
+
homepage: https://loggator.com
|
112
|
+
licenses:
|
113
|
+
- MIT
|
114
|
+
metadata: {}
|
115
|
+
post_install_message:
|
116
|
+
rdoc_options: []
|
117
|
+
require_paths:
|
118
|
+
- lib
|
119
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
120
|
+
requirements:
|
121
|
+
- - ">="
|
122
|
+
- !ruby/object:Gem::Version
|
123
|
+
version: '0'
|
124
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
125
|
+
requirements:
|
126
|
+
- - ">="
|
127
|
+
- !ruby/object:Gem::Version
|
128
|
+
version: '0'
|
129
|
+
requirements: []
|
130
|
+
rubyforge_project:
|
131
|
+
rubygems_version: 2.2.2
|
132
|
+
signing_key:
|
133
|
+
specification_version: 4
|
134
|
+
summary: crossdomain.xml flashsocket daemon
|
135
|
+
test_files:
|
136
|
+
- spec/files/invalid.xml
|
137
|
+
- spec/files/invalid_spec.xml
|
138
|
+
- spec/files/valid.xml
|
139
|
+
- spec/integration/service.rb
|
140
|
+
- spec/spec_helper.rb
|
141
|
+
- spec/unit/xml_spec.rb
|