Class: Panoptes::Client

Inherits:
Object
  • Object
show all
Includes:
Cellect, Classifications, Collections, Comments, Discussions, Me, ProjectPreferences, Projects, SubjectSets, Subjects, UserGroups, Users, Workflows
Defined in:
lib/panoptes/client.rb,
lib/panoptes/client/me.rb,
lib/panoptes/client/users.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,
lib/panoptes/client/project_preferences.rb

Direct Known Subclasses

TalkClient

Defined Under Namespace

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

Constant Summary collapse

VERSION =
"0.3.6".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 Users

#user

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 ProjectPreferences

#project_preferences, #promote_user_to_workflow, #user_project_preferences

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, #get_user_classifications

Methods included from Me

#me

Constructor Details

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

Returns a new instance of Client.



49
50
51
52
53
54
55
56
57
58
59
60
61
62
# File 'lib/panoptes/client.rb', line 49

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.



47
48
49
# File 'lib/panoptes/client.rb', line 47

def auth
  @auth
end

#cellectObject (readonly)

Returns the value of attribute cellect.



47
48
49
# File 'lib/panoptes/client.rb', line 47

def cellect
  @cellect
end

#envObject (readonly)

Returns the value of attribute env.



47
48
49
# File 'lib/panoptes/client.rb', line 47

def env
  @env
end

#panoptesObject (readonly)

Returns the value of attribute panoptes.



47
48
49
# File 'lib/panoptes/client.rb', line 47

def panoptes
  @panoptes
end

#talkObject (readonly)

Returns the value of attribute talk.



47
48
49
# File 'lib/panoptes/client.rb', line 47

def talk
  @talk
end

Instance Method Details

#current_userObject

Raises:



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

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



71
72
73
# File 'lib/panoptes/client.rb', line 71

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

#panoptes_urlObject



86
87
88
89
90
91
92
93
# File 'lib/panoptes/client.rb', line 86

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



75
76
77
78
79
80
81
82
83
84
# File 'lib/panoptes/client.rb', line 75

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



95
96
97
98
99
100
101
102
# File 'lib/panoptes/client.rb', line 95

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