File: builder.rb

package info (click to toggle)
mikutter 3.8.6%2Bdfsg-1
  • links: PTS, VCS
  • area: main
  • in suites: buster
  • size: 10,544 kB
  • sloc: ruby: 20,548; sh: 99; makefile: 19
file content (51 lines) | stat: -rw-r--r-- 1,368 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
# -*- coding: utf-8 -*-
require_relative 'model/world'

module Plugin::Twitter
  class Builder
    def initialize(consumer_key, consumer_secret)
      super()
      @twitter = MikuTwitter.new
      @twitter.consumer_key = consumer_key
      @twitter.consumer_secret = consumer_secret
    end

    def request_token
      @request_token ||= @twitter.request_oauth_token
    end

    def authorize_url
      request_token.authorize_url
    end

    def build(verifier)
      verify(verifier)
    end

    private

    def verify(verifier)
      Thread.new{
        request_token.get_access_token(oauth_token: request_token.token,
                                       oauth_verifier: verifier)
      }.next{|access_token|
        @twitter.a_token = access_token.token
        @twitter.a_secret = access_token.secret
        (@twitter/:account/:verify_credentials).user
      }.next{|user|
        Plugin::Twitter::World.new(
          id: "twitter#{user.id}",
          slug: "twitter#{user.id}",
          token: @twitter.a_token,
          secret: @twitter.a_secret,
          user: user)
      }.trap{|err|
        if err.is_a?(OAuth::Error)
          Deferred.fail(Plugin[:twitter]._("認証に失敗しました。トークンを確認してもう一度やり直してください"))
        else
          Deferred.fail(err)
        end
      }
    end
  end
end