Class: Panoptes::Client

Inherits:
Object
  • Object
show all
Includes:
Cellect, Classifications, Collections, Comments, Discussions, Me, Projects, SubjectSets, Subjects, UserGroups, Workflows
Defined in:
lib/panoptes/client.rb,
lib/panoptes/client/me.rb,
lib/panoptes/client/cellect.rb,
lib/panoptes/client/version.rb,
lib/panoptes/client/comments.rb,
lib/panoptes/client/projects.rb,
lib/panoptes/client/subjects.rb,
lib/panoptes/client/workflows.rb,
lib/panoptes/client/collections.rb,
lib/panoptes/client/discussions.rb,
lib/panoptes/client/user_groups.rb,
lib/panoptes/client/subject_sets.rb,
lib/panoptes/client/classifications.rb

Direct Known Subclasses

TalkClient

Defined Under Namespace

Modules: Cellect, Classifications, Collections, Comments, Discussions, Me, Projects, SubjectSets, Subjects, UserGroups, Workflows Classes: ConnectionFailed, GenericError, NotLoggedIn, ResourceNotFound, ServerError

Constant Summary collapse

VERSION =
"0.3.4".freeze

Instance Attribute Summary collapse

Instance Method Summary collapse

Methods included from Cellect

#cellect_subjects, #cellect_workflows

Methods included from Discussions

#discussions

Methods included from Comments

#create_comment

Methods included from Workflows

#add_subject_set_to_workflow, #create_workflow, #workflow

Methods included from UserGroups

#create_user_group, #delete_user_group, #join_user_group, #remove_user_from_user_group, #user_groups

Methods included from SubjectSets

#add_subjects_to_subject_set, #create_subject_set, #subject_set, #update_subject_set

Methods included from Subjects

#retire_subject, #subjects

Methods included from Projects

#create_aggregations_export, #create_classifications_export, #create_subjects_export, #create_workflow_contents_export, #create_workflows_export, #projects

Methods included from Collections

#add_subjects_to_collection

Methods included from Classifications

#get_subject_classifications

Methods included from Me

#me

Constructor Details

#initialize(env: :production, auth: {}, public_key_path: nil, params: {}) ⇒ Client

Returns a new instance of Client.



45
46
47
48
49
50
51
52
53
54
55
56
57
58
# File 'lib/panoptes/client.rb', line 45

def initialize(env: :production, auth: {}, public_key_path: nil, params: {})
  @env = env
  @auth = auth
  @public_key_path = public_key_path || public_key_for_env(env)
  @panoptes = Panoptes::Endpoints::JsonApiEndpoint.new(
    auth: auth, url: panoptes_url, prefix: '/api', params: params
  )
  @talk = Panoptes::Endpoints::JsonApiEndpoint.new(
    auth: auth, url: talk_url, params: params
  )
  @cellect = Panoptes::Endpoints::JsonEndpoint.new(
    url: panoptes_url, prefix: '/cellect'
  )
end

Instance Attribute Details

#authObject (readonly)

Returns the value of attribute auth.



43
44
45
# File 'lib/panoptes/client.rb', line 43

def auth
  @auth
end

#cellectObject (readonly)

Returns the value of attribute cellect.



43
44
45
# File 'lib/panoptes/client.rb', line 43

def cellect
  @cellect
end

#envObject (readonly)

Returns the value of attribute env.



43
44
45
# File 'lib/panoptes/client.rb', line 43

def env
  @env
end

#panoptesObject (readonly)

Returns the value of attribute panoptes.



43
44
45
# File 'lib/panoptes/client.rb', line 43

def panoptes
  @panoptes
end

#talkObject (readonly)

Returns the value of attribute talk.



43
44
45
# File 'lib/panoptes/client.rb', line 43

def talk
  @talk
end

Instance Method Details

#current_userObject

Raises:



60
61
62
63
64
65
# File 'lib/panoptes/client.rb', line 60

def current_user
  raise NotLoggedIn unless @auth[:token]

  payload, = JWT.decode @auth[:token], jwt_signing_public_key, algorithm: 'RS512'
  payload.fetch('data')
end

#jwt_signing_public_keyObject



67
68
69
# File 'lib/panoptes/client.rb', line 67

def jwt_signing_public_key
  @jwt_signing_public_key ||= OpenSSL::PKey::RSA.new(File.read(@public_key_path))
end

#panoptes_urlObject



82
83
84
85
86
87
88
89
# File 'lib/panoptes/client.rb', line 82

def panoptes_url
  case env
  when :production, 'production'.freeze
    'https://panoptes.zooniverse.org'.freeze
  else
    'https://panoptes-staging.zooniverse.org'.freeze
  end
end

#public_key_for_env(env) ⇒ Object



71
72
73
74
75
76
77
78
79
80
# File 'lib/panoptes/client.rb', line 71

def public_key_for_env(env)
  case env.to_s
  when "staging"
    File.expand_path(File.join("..", "..", "..", "data", "doorkeeper-jwt-staging.pub"), __FILE__)
  when "production"
    File.expand_path(File.join("..", "..", "..", "data", "doorkeeper-jwt-production.pub"), __FILE__)
  else
    nil
  end
end

#talk_urlObject



91
92
93
94
95
96
97
98
# File 'lib/panoptes/client.rb', line 91

def talk_url
  case env
  when :production, 'production'.freeze
    'https://talk.zooniverse.org'.freeze
  else
    'https://talk-staging.zooniverse.org'.freeze
  end
end