local-openid 0.2.0 → 0.3.0

Sign up to get free protection for your applications and to get access to all the features.
data/.gitignore CHANGED
@@ -12,3 +12,4 @@ pkg/
12
12
  /man
13
13
  tags
14
14
  TAGS
15
+ /LATEST
@@ -0,0 +1,6 @@
1
+ ---
2
+ cgit_url: http://bogomips.org/local-openid.git
3
+ git_url: git://bogomips.org/local-openid.git
4
+ rdoc_url: http://bogomips.org/local-openid/
5
+ public_email: local-openid@librelist.org
6
+ private_email: normalperson@yhbt.net
@@ -1,7 +1,7 @@
1
1
  #!/bin/sh
2
2
 
3
3
  GVF=GIT-VERSION-FILE
4
- DEF_VER=v0.2.0.GIT
4
+ DEF_VER=v0.3.0.GIT
5
5
 
6
6
  LF='
7
7
  '
@@ -1,145 +1,10 @@
1
1
  all::
2
- RUBY = ruby
3
- RAKE = rake
4
- RSYNC = rsync
5
- GIT_URL = git://git.bogomips.org/local-openid.git
6
-
7
- GIT-VERSION-FILE: .FORCE-GIT-VERSION-FILE
8
- @./GIT-VERSION-GEN
9
- -include GIT-VERSION-FILE
10
-
11
- pkg_extra := GIT-VERSION-FILE NEWS ChangeLog
12
- manifest: $(pkg_extra)
13
- $(RM) .manifest
14
- $(MAKE) .manifest
15
-
16
- .manifest:
17
- (git ls-files && \
18
- for i in $@ $(pkg_extra) $(man1_paths); \
19
- do echo $$i; done) | LC_ALL=C sort > $@+
20
- cmp $@+ $@ || mv $@+ $@
21
- $(RM) $@+
22
-
23
- NEWS: GIT-VERSION-FILE
24
- $(RAKE) -s news_rdoc > $@+
25
- mv $@+ $@
26
-
27
- SINCE = 0.1.0
28
- ChangeLog: LOG_VERSION = \
29
- $(shell git rev-parse -q "$(GIT_VERSION)" >/dev/null 2>&1 && \
30
- echo $(GIT_VERSION) || git describe)
31
- ifneq ($(SINCE),)
32
- ChangeLog: log_range = v$(SINCE)..$(LOG_VERSION)
33
- endif
34
- ChangeLog: GIT-VERSION-FILE
35
- @echo "ChangeLog from $(GIT_URL) ($(log_range))" > $@+
36
- @echo >> $@+
37
- git log $(log_range) | sed -e 's/^/ /' >> $@+
38
- mv $@+ $@
39
-
40
- news_atom := http://bogomips.org/local-openid/NEWS.atom.xml
41
- cgit_atom := http://git.bogomips.org/cgit/local-openid.git/atom/?h=master
42
- atom = <link rel="alternate" title="Atom feed" href="$(1)" \
43
- type="application/atom+xml"/>
44
-
45
- doc: .document NEWS ChangeLog
46
- find bin lib -type f -name '*.rbc' -exec rm -f '{}' ';'
47
- rdoc -a -t "$(shell sed -ne '1s/^= //p' README)"
48
- install -m644 COPYING doc/COPYING
49
- install -m644 $(shell grep '^[A-Z]' .document) doc/
50
- $(RUBY) -i -p -e \
51
- '$$_.gsub!("</title>",%q{\&$(call atom,$(cgit_atom))})' \
52
- doc/ChangeLog.html
53
- $(RUBY) -i -p -e \
54
- '$$_.gsub!("</title>",%q{\&$(call atom,$(news_atom))})' \
55
- doc/NEWS.html doc/README.html
56
- $(RAKE) -s news_atom > doc/NEWS.atom.xml
57
- cd doc && ln README.html tmp && mv tmp index.html
58
-
59
- publish_doc:
60
- -git set-file-times
61
- $(RM) -r doc ChangeLog NEWS
62
- $(MAKE) doc LOG_VERSION=$(shell git tag -l | tail -1)
63
- @awk 'BEGIN{RS="=== ";ORS=""}NR==2{sub(/\n$$/,"");print RS""$$0 }' \
64
- < NEWS > doc/LATEST
65
- find doc/images doc/js -type f | \
66
- TZ=UTC xargs touch -d '1970-01-01 00:00:00' doc/rdoc.css
67
- $(MAKE) doc_gz
68
- chmod 644 $$(find doc -type f)
69
- $(RSYNC) -av --delete doc/ bogomips.org:/srv/bogomips/local-openid/
70
- git ls-files | xargs touch
71
-
72
- ifneq ($(VERSION),)
2
+ RSYNC_DEST := bogomips.org:/srv/bogomips/local-openid
73
3
  rfproject := qrp
74
4
  rfpackage := local-openid
75
- pkggem := pkg/$(rfpackage)-$(VERSION).gem
76
- pkgtgz := pkg/$(rfpackage)-$(VERSION).tgz
77
- release_notes := release_notes-$(VERSION)
78
- release_changes := release_changes-$(VERSION)
79
-
80
- release-notes: $(release_notes)
81
- release-changes: $(release_changes)
82
- $(release_changes):
83
- $(RAKE) -s release_changes > $@+
84
- $(VISUAL) $@+ && test -s $@+ && mv $@+ $@
85
- $(release_notes):
86
- GIT_URL=$(GIT_URL) $(RAKE) -s release_notes > $@+
87
- $(VISUAL) $@+ && test -s $@+ && mv $@+ $@
88
-
89
- # ensures we're actually on the tagged $(VERSION), only used for release
90
- verify:
91
- test x"$(shell umask)" = x0022
92
- git rev-parse --verify refs/tags/v$(VERSION)^{}
93
- git diff-index --quiet HEAD^0
94
- test `git rev-parse --verify HEAD^0` = \
95
- `git rev-parse --verify refs/tags/v$(VERSION)^{}`
96
-
97
- fix-perms:
98
- -git ls-tree -r HEAD | awk '/^100644 / {print $$NF}' | xargs chmod 644
99
- -git ls-tree -r HEAD | awk '/^100755 / {print $$NF}' | xargs chmod 755
100
-
101
- gem: $(pkggem)
102
-
103
- install-gem: $(pkggem)
104
- gem install $(CURDIR)/$<
105
-
106
- $(pkggem): manifest fix-perms
107
- gem build $(rfpackage).gemspec
108
- mkdir -p pkg
109
- mv $(@F) $@
110
-
111
- $(pkgtgz): distdir = $(basename $@)
112
- $(pkgtgz): HEAD = v$(VERSION)
113
- $(pkgtgz): manifest fix-perms
114
- @test -n "$(distdir)"
115
- $(RM) -r $(distdir)
116
- mkdir -p $(distdir)
117
- tar cf - `cat .manifest` | (cd $(distdir) && tar xf -)
118
- cd pkg && tar c $(basename $(@F)) | gzip -9 > $(@F)+
119
- mv $@+ $@
120
-
121
- package: $(pkgtgz) $(pkggem)
122
-
123
- test-release: verify package $(release_notes) $(release_changes)
124
- release: verify package $(release_notes) $(release_changes)
125
- # make tgz release on RubyForge
126
- rubyforge add_release -f -n $(release_notes) -a $(release_changes) \
127
- $(rfproject) $(rfpackage) $(VERSION) $(pkgtgz)
128
- # push gem to Gemcutter
129
- gem push $(pkggem)
130
- # in case of gem downloads from RubyForge releases page
131
- -rubyforge add_file \
132
- $(rfproject) $(rfpackage) $(VERSION) $(pkggem)
133
- else
134
- gem install-gem: GIT-VERSION-FILE
135
- $(MAKE) $@ VERSION=$(GIT_VERSION)
5
+ include pkg.mk
6
+ ifneq ($(VERSION),)
7
+ release::
8
+ $(RAKE) raa_update VERSION=$(VERSION)
9
+ $(RAKE) publish_news VERSION=$(VERSION)
136
10
  endif
137
-
138
- # Create gzip variants of the same timestamp as the original so nginx
139
- # "gzip_static on" can serve the gzipped versions directly.
140
- doc_gz: docs = $(shell find doc -type f ! -regex '^.*\.\(gif\|jpg\|png\|gz\)$$')
141
- doc_gz:
142
- touch doc/NEWS.atom.xml -d "$$(awk 'NR==1{print $$4,$$5,$$6}' NEWS)"
143
- for i in $(docs); do \
144
- gzip --rsyncable -9 < $$i > $$i.gz; touch -r $$i $$i.gz; done
145
- .PHONY: .FORCE-GIT-VERSION-FILE doc manifest
data/README CHANGED
@@ -10,6 +10,8 @@ instead of authenticating through HTTP/HTTPS.
10
10
  4. Login using your OpenID (on the consumer)
11
11
  - you should be redirected to your local-openid application
12
12
  5. edit ~/.local-openid/config.yml on your server to approve the consumer
13
+ This config file is only created after the consumer makes a successful
14
+ request to your server.
13
15
  6. Reload the local-openid page your browser was on.
14
16
  - you should be logged in to the OpenID consumer site
15
17
  - If not, check the error log (usually stderr) of local-openid
@@ -63,7 +65,7 @@ I don't have any plans for more development with local-openid. It was
63
65
  after all, just a weekend hack. It does what I want it to and nothing
64
66
  more.
65
67
 
66
- You can use the {mailing list}[mailto:local.openid@librelist.com] to
68
+ You can use the {mailing list}[mailto:local.openid@librelist.org] to
67
69
  share ideas, patches, pull requests with other users. Remember, I
68
70
  wrote local-openid because I find the web difficult to use. So I'll
69
71
  only accept communication about local-openid via email :)
@@ -73,14 +75,14 @@ a line if you fix any bugs or notice any security holes in it.
73
75
 
74
76
  You can get the latest source via git from the following locations:
75
77
 
76
- git://git.bogomips.org/local-openid.git
77
- http://git.bogomips.org/local-openid.git
78
+ git://bogomips.org/local-openid.git
79
+ http://bogomips.org/local-openid.git
78
80
  git://repo.or.cz/local-openid.git (mirror)
79
81
  http://repo.or.cz/r/local-openid.git (mirror)
80
82
 
81
83
  You may browse the code from the web and download the latest tarballs here:
82
84
 
83
- * http://git.bogomips.org/cgit/local-openid.git
85
+ * http://bogomips.org/local-openid.git
84
86
  * http://repo.or.cz/w/local-openid.git (gitweb mirror)
85
87
 
86
88
  == Disclaimer
@@ -95,4 +97,4 @@ credentials when your provider implementation has 99.999% downtime :)
95
97
 
96
98
  * Original author: Eric Wong, normalperson@yhbt.net
97
99
  * OpenID: http://e.yhbt.net/
98
- * mailing list: local.openid@librelist.com
100
+ * mailing list: local.openid@librelist.org
data/Rakefile CHANGED
@@ -1,110 +1,26 @@
1
1
  # -*- encoding: binary -*-
2
- autoload :Gem, 'rubygems'
2
+ require 'wrongdoc'
3
+ cgit_url = Wrongdoc.config[:cgit_url]
4
+ git_url = Wrongdoc.config[:git_url]
3
5
 
4
- def tags
5
- timefmt = '%Y-%m-%dT%H:%M:%SZ'
6
- @tags ||= `git tag -l`.split(/\n/).map do |tag|
7
- if %r{\Av[\d\.]+\z} =~ tag
8
- header, subject, body = `git cat-file tag #{tag}`.split(/\n\n/, 3)
9
- header = header.split(/\n/)
10
- tagger = header.grep(/\Atagger /).first
11
- body ||= "initial"
12
- {
13
- :time => Time.at(tagger.split(/ /)[-2].to_i).utc.strftime(timefmt),
14
- :tagger_name => %r{^tagger ([^<]+)}.match(tagger)[1].strip,
15
- :tagger_email => %r{<([^>]+)>}.match(tagger)[1].strip,
16
- :id => `git rev-parse refs/tags/#{tag}`.chomp!,
17
- :tag => tag,
18
- :subject => subject,
19
- :body => body,
20
- }
21
- end
22
- end.compact.sort { |a,b| b[:time] <=> a[:time] }
23
- end
24
-
25
- cgit_url = "http://git.bogomips.org/cgit/local-openid.git"
26
- git_url = ENV['GIT_URL'] || 'git://git.bogomips.org/local-openid.git'
27
-
28
- desc 'prints news as an Atom feed'
29
- task :news_atom do
30
- require 'nokogiri'
31
- new_tags = tags[0,10]
32
- puts(Nokogiri::XML::Builder.new do
33
- feed :xmlns => "http://www.w3.org/2005/Atom" do
34
- id! "http://bogomips.org/local-openid/NEWS.atom.xml"
35
- title "local-openid news"
36
- subtitle %q{Single User, Ephemeral OpenID Provider}
37
- link! :rel => 'alternate', :type => 'text/html',
38
- :href => 'http://bogomips.org/local-openid/NEWS.html'
39
- updated(new_tags.empty? ? "1970-01-01T00:00:00Z" : new_tags.first[:time])
40
- new_tags.each do |tag|
41
- entry do
42
- title tag[:subject]
43
- updated tag[:time]
44
- published tag[:time]
45
- author {
46
- name tag[:tagger_name]
47
- email tag[:tagger_email]
48
- }
49
- url = "#{cgit_url}/tag/?id=#{tag[:tag]}"
50
- link! :rel => "alternate", :type => "text/html", :href =>url
51
- id! url
52
- message_only = tag[:body].split(/\n.+\(\d+\):\n {6}/s).first.strip
53
- content({:type =>:text}, message_only)
54
- content(:type =>:xhtml) { pre tag[:body] }
55
- end
56
- end
57
- end
58
- end.to_xml)
59
- end
60
-
61
- desc 'prints RDoc-formatted news'
62
- task :news_rdoc do
63
- tags.each do |tag|
64
- time = tag[:time].tr!('T', ' ').gsub!(/:\d\dZ/, ' UTC')
65
- puts "=== #{tag[:tag].sub(/^v/, '')} / #{time}"
66
- puts ""
67
-
68
- body = tag[:body]
69
- puts tag[:body].gsub(/^/sm, " ").gsub(/[ \t]+$/sm, "")
70
- puts ""
71
- end
72
- end
73
-
74
- desc "print release changelog for Rubyforge"
75
- task :release_changes do
76
- version = ENV['VERSION'] or abort "VERSION= needed"
77
- version = "v#{version}"
78
- vtags = tags.map { |tag| tag[:tag] =~ /\Av/ and tag[:tag] }.sort
79
- prev = vtags[vtags.index(version) - 1]
80
- if prev
81
- system('git', 'diff', '--stat', prev, version) or abort $?
82
- puts ""
83
- system('git', 'log', "#{prev}..#{version}") or abort $?
84
- else
85
- system('git', 'log', version) or abort $?
86
- end
87
- end
88
-
89
- desc "print release notes for Rubyforge"
90
- task :release_notes do
91
- spec = Gem::Specification.load('local-openid.gemspec')
92
- puts spec.description.strip
93
- puts ""
94
- puts "* #{spec.homepage}"
95
- puts "* #{spec.email}"
96
- puts "* #{git_url}"
97
-
98
- _, _, body = `git cat-file tag v#{spec.version}`.split(/\n\n/, 3)
99
- print "\nChanges:\n\n"
100
- puts body
101
- end
102
-
103
- desc "read news article from STDIN and post to rubyforge"
6
+ desc "post news article to rubyforge"
104
7
  task :publish_news do
105
8
  require 'rubyforge'
106
- IO.select([STDIN], nil, nil, 1) or abort "E: news must be read from stdin"
107
- msg = STDIN.readlines
9
+ spec = Gem::Specification.load('local-openid.gemspec')
10
+ tmp = Tempfile.new('rf-news')
11
+ _, subject, body = `git cat-file tag v#{spec.version}`.split(/\n\n/, 3)
12
+ tmp.puts subject
13
+ tmp.puts
14
+ tmp.puts spec.description.strip
15
+ tmp.puts ""
16
+ tmp.puts "* #{spec.homepage}"
17
+ tmp.puts "* #{spec.email}"
18
+ tmp.puts "* #{git_url}"
19
+ tmp.print "\nChanges:\n\n"
20
+ tmp.puts body
21
+ tmp.flush
22
+ system(ENV["VISUAL"], tmp.path) or abort "#{ENV["VISUAL"]} failed: #$?"
23
+ msg = File.readlines(tmp.path)
108
24
  subject = msg.shift
109
25
  blank = msg.shift
110
26
  blank == "\n" or abort "no newline after subject!"
@@ -23,9 +23,12 @@ class LocalOpenID < Sinatra::Base
23
23
  Dir.mkdir(@@dir) unless File.directory?(@@dir)
24
24
 
25
25
  # all the sinatra endpoints:
26
- get('/xrds') { big_lock { render_xrds(true) } }
27
- get('/') { big_lock { get_or_post } }
28
- post('/') { big_lock { get_or_post } }
26
+ get('/xrds') { big_lock { render_identity_xrds(true) } }
27
+ get('/provider/xrds') { big_lock { render_provider_xrds(true) } }
28
+ get('/provider') { big_lock { get_or_post_provider } }
29
+ post('/provider') { big_lock { get_or_post_provider } }
30
+ get('/') { big_lock { render_identity_xrds } }
31
+ post('/') { big_lock { render_identity_xrds } }
29
32
 
30
33
  private
31
34
 
@@ -35,21 +38,44 @@ class LocalOpenID < Sinatra::Base
35
38
  <body><h1>reload this page when approved: %s</h1></body>
36
39
  </html>!
37
40
 
38
- XRDS_HTML = %q!<html><head>
39
- <link rel="openid.server" href="%s" />
40
- <link rel="openid2.provider" href="%s" />
41
- <meta http-equiv="X-XRDS-Location" content="%sxrds" />
41
+ PROVIDER_XRDS_HTML = %q!<html><head>
42
+ <meta http-equiv="X-XRDS-Location" content="%sprovider/xrds" />
42
43
  <title>OpenID server endpoint</title>
43
44
  </head><body>OpenID server endpoint</body></html>!
44
45
 
45
- XRDS_XML = %q!<?xml version="1.0" encoding="UTF-8"?>
46
+ IDENTITY_XRDS_HTML = %q!<html><head>
47
+ <link rel="openid.server" href="%sprovider" />
48
+ <link rel="openid2.provider" href="%sprovider" />
49
+ <link rel="openid2.local_id" href="%s" />
50
+ <link rel="openid.delegate" href="%s" />
51
+ <meta http-equiv="X-XRDS-Location" content="%sxrds" />
52
+ <title>OpenID identity</title>
53
+ </head><body>OpenID identity</body></html>!
54
+
55
+ PROVIDER_XRDS_XML = %q!<?xml version="1.0" encoding="UTF-8"?>
56
+ <xrds:XRDS
57
+ xmlns:xrds="xri://$xrds"
58
+ xmlns:openid="http://openid.net/xmlns/1.0"
59
+ xmlns="xri://$xrd*($v*2.0)">
60
+ <XRD version="2.0">
61
+ <Service priority="0">
62
+ %types
63
+ <URI>%sprovider</URI>
64
+ </Service>
65
+ </XRD>
66
+ </xrds:XRDS>!
67
+
68
+ IDENTITY_XRDS_XML = %q!<?xml version="1.0" encoding="UTF-8"?>
46
69
  <xrds:XRDS
47
70
  xmlns:xrds="xri://$xrds"
71
+ xmlns:openid="http://openid.net/xmlns/1.0"
48
72
  xmlns="xri://$xrd*($v*2.0)">
49
- <XRD>
73
+ <XRD version="2.0">
50
74
  <Service priority="0">
51
75
  %types
52
- <URI>%s</URI>
76
+ <URI>%sprovider</URI>
77
+ <LocalID>%s</LocalID>
78
+ <openid:Delegate>%s</openid:Delegate>
53
79
  </Service>
54
80
  </XRD>
55
81
  </xrds:XRDS>!
@@ -81,7 +107,7 @@ class LocalOpenID < Sinatra::Base
81
107
  - updated Time this entry was updated, strictly informational.
82
108
  - session_id Unique identifier in your session cookie to prevent
83
109
  other users from hijacking your session. You may
84
- delete this if you've changed browsers or computers.
110
+ delete this if you have changed browsers or computers.
85
111
  - assoc_handle See the OpenID specs, may be empty. Do not edit this.
86
112
 
87
113
  SReg keys supported by the Ruby OpenID implementation should be
@@ -97,14 +123,14 @@ class LocalOpenID < Sinatra::Base
97
123
 
98
124
  # this is the heart of our provider logic, adapted from the
99
125
  # Ruby OpenID gem Rails example
100
- def get_or_post
126
+ def get_or_post_provider
101
127
  oidreq = begin
102
128
  server.decode_request(params)
103
129
  rescue ProtocolError => err
104
130
  halt(500, err.to_s)
105
131
  end
106
132
 
107
- oidreq or return render_xrds
133
+ oidreq or return render_provider_xrds
108
134
 
109
135
  oidresp = case oidreq
110
136
  when CheckIDRequest
@@ -116,7 +142,7 @@ class LocalOpenID < Sinatra::Base
116
142
  add_pape(oidreq, resp)
117
143
  resp
118
144
  elsif oidreq.immediate
119
- oidreq.answer(false, server_root)
145
+ oidreq.answer(false, server_root + "provider")
120
146
  else
121
147
  session[:id] ||= "#{Time.now.to_i}.#$$.#{rand}"
122
148
  session[:ip] = request.ip
@@ -144,7 +170,7 @@ class LocalOpenID < Sinatra::Base
144
170
  def server
145
171
  @server ||= Server.new(
146
172
  OpenID::Store::Filesystem.new("#@@dir/store"),
147
- server_root)
173
+ server_root + "provider")
148
174
  end
149
175
 
150
176
  # support the simple registration extension if possible,
@@ -264,22 +290,35 @@ class LocalOpenID < Sinatra::Base
264
290
  end
265
291
 
266
292
  # this output is designed to be parsed by OpenID consumers
267
- def render_xrds(force = false)
293
+ def render_provider_xrds(force = false)
294
+ if force || request.accept.include?('application/xrds+xml')
295
+
296
+ # this seems to work...
297
+ types = [ OpenID::OPENID_IDP_2_0_TYPE ]
298
+
299
+ headers['Content-Type'] = 'application/xrds+xml'
300
+ types = types.map { |uri| "<Type>#{uri}</Type>" }.join("\n")
301
+ PROVIDER_XRDS_XML.gsub(/%s/, server_root).gsub!(/%types/, types)
302
+ else # render a browser-friendly page with an XRDS pointer
303
+ headers['X-XRDS-Location'] = "#{server_root}provider/xrds"
304
+ PROVIDER_XRDS_HTML.gsub(/%s/, server_root)
305
+ end
306
+ end
307
+
308
+ def render_identity_xrds(force = false)
268
309
  if force || request.accept.include?('application/xrds+xml')
269
310
 
270
311
  # this seems to work...
271
- types = request.accept.include?('application/xrds+xml') ?
272
- [ OpenID::OPENID_2_0_TYPE,
273
- OpenID::OPENID_1_0_TYPE,
274
- OpenID::SREG_URI ] :
275
- [ OpenID::OPENID_IDP_2_0_TYPE ]
312
+ types = [ OpenID::OPENID_2_0_TYPE,
313
+ OpenID::OPENID_1_0_TYPE,
314
+ OpenID::SREG_URI ]
276
315
 
277
316
  headers['Content-Type'] = 'application/xrds+xml'
278
317
  types = types.map { |uri| "<Type>#{uri}</Type>" }.join("\n")
279
- XRDS_XML.gsub(/%s/, server_root).gsub!(/%types/, types)
318
+ IDENTITY_XRDS_XML.gsub(/%s/, server_root).gsub!(/%types/, types)
280
319
  else # render a browser-friendly page with an XRDS pointer
281
320
  headers['X-XRDS-Location'] = "#{server_root}xrds"
282
- XRDS_HTML.gsub(/%s/, server_root)
321
+ IDENTITY_XRDS_HTML.gsub(/%s/, server_root)
283
322
  end
284
323
  end
285
324
 
@@ -1,34 +1,26 @@
1
1
  ENV["VERSION"] or abort "VERSION= must be specified"
2
2
  manifest = File.readlines('.manifest').map! { |x| x.chomp! }
3
+ require 'wrongdoc'
4
+ extend Wrongdoc::Gemspec
5
+ name, summary, title = readme_metadata
3
6
 
4
7
  Gem::Specification.new do |s|
5
8
  s.name = %q{local-openid}
6
- s.version = ENV["VERSION"]
9
+ s.version = ENV["VERSION"].dup
7
10
 
8
11
  s.authors = ["Eric Wong"]
9
12
  s.date = Time.now.utc.strftime('%Y-%m-%d')
10
- s.description = File.read("README").split(/\n\n/)[1]
11
- s.email = %q{local-openid@librelist.com}
13
+ s.description = readme_description
14
+ s.email = %q{local.openid@librelist.org}
12
15
  s.executables = %w(local-openid)
13
16
 
14
- s.extra_rdoc_files = File.readlines('.document').map! do |x|
15
- x.chomp!
16
- if File.directory?(x)
17
- manifest.grep(%r{\A#{x}/})
18
- elsif File.file?(x)
19
- x
20
- else
21
- nil
22
- end
23
- end.flatten.compact
24
-
17
+ s.extra_rdoc_files = extra_rdoc_files(manifest)
25
18
  s.files = manifest
26
- s.homepage = %q{http://bogomips.org/local-openid/}
27
- s.summary = %q{Single User, Ephemeral OpenID Provider}
28
- s.rdoc_options = [ "-a", "-t", "local-openid - #{s.summary}" ]
29
- s.require_paths = %w(lib)
19
+ s.homepage = Wrongdoc.config[:rdoc_url]
20
+ s.summary = summary
21
+ s.rdoc_options = rdoc_options
30
22
  s.rubyforge_project = %q{qrp}
31
- s.add_dependency(%q<sinatra>, ["~> 1.0.0"])
23
+ s.add_dependency(%q<sinatra>, ["~> 1.0"])
32
24
  s.add_dependency(%q<ruby-openid>, ["~> 2.1.7"])
33
25
  # s.licenses = %w(AGPLv3) # accessor not compatible with older RubyGems
34
26
  end
data/pkg.mk ADDED
@@ -0,0 +1,175 @@
1
+ RUBY = ruby
2
+ RAKE = rake
3
+ RSYNC = rsync
4
+ WRONGDOC = wrongdoc
5
+
6
+ GIT-VERSION-FILE: .FORCE-GIT-VERSION-FILE
7
+ @./GIT-VERSION-GEN
8
+ -include GIT-VERSION-FILE
9
+ -include local.mk
10
+ DLEXT := $(shell $(RUBY) -rrbconfig -e 'puts RbConfig::CONFIG["DLEXT"]')
11
+ RUBY_VERSION := $(shell $(RUBY) -e 'puts RUBY_VERSION')
12
+ RUBY_ENGINE := $(shell $(RUBY) -e 'puts((RUBY_ENGINE rescue "ruby"))')
13
+ lib := lib
14
+
15
+ ifeq ($(shell test -f script/isolate_for_tests && echo t),t)
16
+ isolate_libs := tmp/isolate/$(RUBY_ENGINE)-$(RUBY_VERSION)/isolate.mk
17
+ $(isolate_libs): script/isolate_for_tests
18
+ @$(RUBY) script/isolate_for_tests
19
+ -include $(isolate_libs)
20
+ lib := $(lib):$(ISOLATE_LIBS)
21
+ endif
22
+
23
+ ext := $(firstword $(wildcard ext/*))
24
+ ifneq ($(ext),)
25
+ ext_pfx := tmp/ext/$(RUBY_ENGINE)-$(RUBY_VERSION)
26
+ ext_h := $(wildcard $(ext)/*/*.h $(ext)/*.h)
27
+ ext_src := $(wildcard $(ext)/*.c $(ext_h))
28
+ ext_pfx_src := $(addprefix $(ext_pfx)/,$(ext_src))
29
+ ext_d := $(ext_pfx)/$(ext)/.d
30
+ $(ext)/extconf.rb: $(wildcard $(ext)/*.h)
31
+ @>> $@
32
+ $(ext_d):
33
+ @mkdir -p $(@D)
34
+ @> $@
35
+ $(ext_pfx)/$(ext)/%: $(ext)/% $(ext_d)
36
+ install -m 644 $< $@
37
+ $(ext_pfx)/$(ext)/Makefile: $(ext)/extconf.rb $(ext_d) $(ext_h)
38
+ $(RM) -f $(@D)/*.o
39
+ cd $(@D) && $(RUBY) $(CURDIR)/$(ext)/extconf.rb
40
+ ext_sfx := _ext.$(DLEXT)
41
+ ext_dl := $(ext_pfx)/$(ext)/$(notdir $(ext)_ext.$(DLEXT))
42
+ $(ext_dl): $(ext_src) $(ext_pfx_src) $(ext_pfx)/$(ext)/Makefile
43
+ @echo $^ == $@
44
+ $(MAKE) -C $(@D)
45
+ lib := $(lib):$(ext_pfx)/$(ext)
46
+ build: $(ext_dl)
47
+ else
48
+ build:
49
+ endif
50
+
51
+ pkg_extra += GIT-VERSION-FILE NEWS ChangeLog LATEST
52
+ ChangeLog: GIT-VERSION-FILE .wrongdoc.yml
53
+ $(WRONGDOC) prepare
54
+ NEWS LATEST: ChangeLog
55
+
56
+ manifest:
57
+ $(RM) .manifest
58
+ $(MAKE) .manifest
59
+
60
+ .manifest: $(pkg_extra)
61
+ (git ls-files && for i in $@ $(pkg_extra); do echo $$i; done) | \
62
+ LC_ALL=C sort > $@+
63
+ cmp $@+ $@ || mv $@+ $@
64
+ $(RM) $@+
65
+
66
+ doc:: .document .wrongdoc.yml $(pkg_extra)
67
+ -find lib -type f -name '*.rbc' -exec rm -f '{}' ';'
68
+ -find ext -type f -name '*.rbc' -exec rm -f '{}' ';'
69
+ $(RM) -r doc
70
+ $(WRONGDOC) all
71
+ install -m644 COPYING doc/COPYING
72
+ install -m644 $(shell LC_ALL=C grep '^[A-Z]' .document) doc/
73
+
74
+ ifneq ($(VERSION),)
75
+ pkggem := pkg/$(rfpackage)-$(VERSION).gem
76
+ pkgtgz := pkg/$(rfpackage)-$(VERSION).tgz
77
+ release_notes := release_notes-$(VERSION)
78
+ release_changes := release_changes-$(VERSION)
79
+
80
+ release-notes: $(release_notes)
81
+ release-changes: $(release_changes)
82
+ $(release_changes):
83
+ $(WRONGDOC) release_changes > $@+
84
+ $(VISUAL) $@+ && test -s $@+ && mv $@+ $@
85
+ $(release_notes):
86
+ $(WRONGDOC) release_notes > $@+
87
+ $(VISUAL) $@+ && test -s $@+ && mv $@+ $@
88
+
89
+ # ensures we're actually on the tagged $(VERSION), only used for release
90
+ verify:
91
+ test x"$(shell umask)" = x0022
92
+ git rev-parse --verify refs/tags/v$(VERSION)^{}
93
+ git diff-index --quiet HEAD^0
94
+ test $$(git rev-parse --verify HEAD^0) = \
95
+ $$(git rev-parse --verify refs/tags/v$(VERSION)^{})
96
+
97
+ fix-perms:
98
+ -git ls-tree -r HEAD | awk '/^100644 / {print $$NF}' | xargs chmod 644
99
+ -git ls-tree -r HEAD | awk '/^100755 / {print $$NF}' | xargs chmod 755
100
+
101
+ gem: $(pkggem)
102
+
103
+ install-gem: $(pkggem)
104
+ gem install $(CURDIR)/$<
105
+
106
+ $(pkggem): manifest fix-perms
107
+ gem build $(rfpackage).gemspec
108
+ mkdir -p pkg
109
+ mv $(@F) $@
110
+
111
+ $(pkgtgz): distdir = $(basename $@)
112
+ $(pkgtgz): HEAD = v$(VERSION)
113
+ $(pkgtgz): manifest fix-perms
114
+ @test -n "$(distdir)"
115
+ $(RM) -r $(distdir)
116
+ mkdir -p $(distdir)
117
+ tar cf - $$(cat .manifest) | (cd $(distdir) && tar xf -)
118
+ cd pkg && tar cf - $(basename $(@F)) | gzip -9 > $(@F)+
119
+ mv $@+ $@
120
+
121
+ package: $(pkgtgz) $(pkggem)
122
+
123
+ test-release:: verify package $(release_notes) $(release_changes)
124
+ # make tgz release on RubyForge
125
+ @echo rubyforge add_release -f \
126
+ -n $(release_notes) -a $(release_changes) \
127
+ $(rfproject) $(rfpackage) $(VERSION) $(pkgtgz)
128
+ @echo gem push $(pkggem)
129
+ @echo rubyforge add_file \
130
+ $(rfproject) $(rfpackage) $(VERSION) $(pkggem)
131
+ release:: verify package $(release_notes) $(release_changes)
132
+ # make tgz release on RubyForge
133
+ rubyforge add_release -f -n $(release_notes) -a $(release_changes) \
134
+ $(rfproject) $(rfpackage) $(VERSION) $(pkgtgz)
135
+ # push gem to RubyGems.org
136
+ gem push $(pkggem)
137
+ # in case of gem downloads from RubyForge releases page
138
+ rubyforge add_file \
139
+ $(rfproject) $(rfpackage) $(VERSION) $(pkggem)
140
+ else
141
+ gem install-gem: GIT-VERSION-FILE
142
+ $(MAKE) $@ VERSION=$(GIT_VERSION)
143
+ endif
144
+
145
+ all:: test
146
+ test_units := $(wildcard test/test_*.rb)
147
+ test: test-unit
148
+ test-unit: $(test_units)
149
+ $(test_units): build
150
+ $(RUBY) -I $(lib) $@ $(RUBY_TEST_OPTS)
151
+
152
+ # this requires GNU coreutils variants
153
+ ifneq ($(RSYNC_DEST),)
154
+ publish_doc:
155
+ -git set-file-times
156
+ $(MAKE) doc
157
+ find doc/images -type f | \
158
+ TZ=UTC xargs touch -d '1970-01-01 00:00:06' doc/rdoc.css
159
+ $(MAKE) doc_gz
160
+ $(RSYNC) -av doc/ $(RSYNC_DEST)/
161
+ git ls-files | xargs touch
162
+ endif
163
+
164
+ # Create gzip variants of the same timestamp as the original so nginx
165
+ # "gzip_static on" can serve the gzipped versions directly.
166
+ doc_gz: docs = $(shell find doc -type f ! -regex '^.*\.\(gif\|jpg\|png\|gz\)$$')
167
+ doc_gz:
168
+ for i in $(docs); do \
169
+ gzip --rsyncable -9 < $$i > $$i.gz; touch -r $$i $$i.gz; done
170
+ check-warnings:
171
+ @(for i in $$(git ls-files '*.rb'| grep -v '^setup\.rb$$'); \
172
+ do $(RUBY) -d -W2 -c $$i; done) | grep -v '^Syntax OK$$' || :
173
+
174
+ .PHONY: all .FORCE-GIT-VERSION-FILE doc test $(test_units) manifest
175
+ .PHONY: check-warnings
metadata CHANGED
@@ -1,78 +1,73 @@
1
- --- !ruby/object:Gem::Specification
1
+ --- !ruby/object:Gem::Specification
2
2
  name: local-openid
3
- version: !ruby/object:Gem::Version
4
- hash: 23
5
- prerelease: false
6
- segments:
7
- - 0
8
- - 2
9
- - 0
10
- version: 0.2.0
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.3.0
5
+ prerelease:
11
6
  platform: ruby
12
- authors:
7
+ authors:
13
8
  - Eric Wong
14
9
  autorequire:
15
10
  bindir: bin
16
11
  cert_chain: []
17
-
18
- date: 2010-06-26 00:00:00 +00:00
19
- default_executable:
20
- dependencies:
21
- - !ruby/object:Gem::Dependency
12
+ date: 2012-07-01 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
22
15
  name: sinatra
23
- prerelease: false
24
- requirement: &id001 !ruby/object:Gem::Requirement
16
+ requirement: !ruby/object:Gem::Requirement
25
17
  none: false
26
- requirements:
18
+ requirements:
27
19
  - - ~>
28
- - !ruby/object:Gem::Version
29
- hash: 23
30
- segments:
31
- - 1
32
- - 0
33
- - 0
34
- version: 1.0.0
20
+ - !ruby/object:Gem::Version
21
+ version: '1.0'
35
22
  type: :runtime
36
- version_requirements: *id001
37
- - !ruby/object:Gem::Dependency
38
- name: ruby-openid
39
23
  prerelease: false
40
- requirement: &id002 !ruby/object:Gem::Requirement
24
+ version_requirements: !ruby/object:Gem::Requirement
41
25
  none: false
42
- requirements:
26
+ requirements:
43
27
  - - ~>
44
- - !ruby/object:Gem::Version
45
- hash: 5
46
- segments:
47
- - 2
48
- - 1
49
- - 7
28
+ - !ruby/object:Gem::Version
29
+ version: '1.0'
30
+ - !ruby/object:Gem::Dependency
31
+ name: ruby-openid
32
+ requirement: !ruby/object:Gem::Requirement
33
+ none: false
34
+ requirements:
35
+ - - ~>
36
+ - !ruby/object:Gem::Version
50
37
  version: 2.1.7
51
38
  type: :runtime
52
- version_requirements: *id002
53
- description: |-
54
- local-openid allows users with shell accounts on servers to authenticate
39
+ prerelease: false
40
+ version_requirements: !ruby/object:Gem::Requirement
41
+ none: false
42
+ requirements:
43
+ - - ~>
44
+ - !ruby/object:Gem::Version
45
+ version: 2.1.7
46
+ description: ! 'local-openid allows users with shell accounts on servers to authenticate
47
+
55
48
  with OpenID consumers by editing a YAML file in their home directory
56
- instead of authenticating through HTTP/HTTPS.
57
- email: local-openid@librelist.com
58
- executables:
49
+
50
+ instead of authenticating through HTTP/HTTPS.'
51
+ email: local.openid@librelist.org
52
+ executables:
59
53
  - local-openid
60
54
  extensions: []
61
-
62
- extra_rdoc_files:
55
+ extra_rdoc_files:
63
56
  - NEWS
64
57
  - LICENSE
65
58
  - ChangeLog
66
59
  - README
67
- files:
60
+ files:
68
61
  - .document
69
62
  - .gitignore
70
63
  - .manifest
64
+ - .wrongdoc.yml
71
65
  - COPYING
72
66
  - ChangeLog
73
67
  - GIT-VERSION-FILE
74
68
  - GIT-VERSION-GEN
75
69
  - GNUmakefile
70
+ - LATEST
76
71
  - LICENSE
77
72
  - NEWS
78
73
  - README
@@ -80,42 +75,34 @@ files:
80
75
  - bin/local-openid
81
76
  - lib/local_openid.rb
82
77
  - local-openid.gemspec
78
+ - pkg.mk
83
79
  - setup.rb
84
- has_rdoc: true
85
80
  homepage: http://bogomips.org/local-openid/
86
81
  licenses: []
87
-
88
82
  post_install_message:
89
- rdoc_options:
90
- - -a
83
+ rdoc_options:
91
84
  - -t
92
- - local-openid - Single User, Ephemeral OpenID Provider
93
- require_paths:
85
+ - ! 'local-openid: Single User, Ephemeral OpenID Provider'
86
+ - -W
87
+ - http://bogomips.org/local-openid.git/tree/%s
88
+ require_paths:
94
89
  - lib
95
- required_ruby_version: !ruby/object:Gem::Requirement
90
+ required_ruby_version: !ruby/object:Gem::Requirement
96
91
  none: false
97
- requirements:
98
- - - ">="
99
- - !ruby/object:Gem::Version
100
- hash: 3
101
- segments:
102
- - 0
103
- version: "0"
104
- required_rubygems_version: !ruby/object:Gem::Requirement
92
+ requirements:
93
+ - - ! '>='
94
+ - !ruby/object:Gem::Version
95
+ version: '0'
96
+ required_rubygems_version: !ruby/object:Gem::Requirement
105
97
  none: false
106
- requirements:
107
- - - ">="
108
- - !ruby/object:Gem::Version
109
- hash: 3
110
- segments:
111
- - 0
112
- version: "0"
98
+ requirements:
99
+ - - ! '>='
100
+ - !ruby/object:Gem::Version
101
+ version: '0'
113
102
  requirements: []
114
-
115
103
  rubyforge_project: qrp
116
- rubygems_version: 1.3.7
104
+ rubygems_version: 1.8.23
117
105
  signing_key:
118
106
  specification_version: 3
119
- summary: Single User, Ephemeral OpenID Provider
107
+ summary: ! 'openid: Single User, Ephemeral OpenID Provider'
120
108
  test_files: []
121
-