require "httparty" require "json" module Twtxt module Yarn def api_endpoint(yarnpod) "https://#{yarnpod}/api/v1" end def get_jwt_token(username, password, endpoint) response = HTTParty.post("#{endpoint}/auth", body: { username: username, password: password }.to_json, headers: { "Content-Type" => "application/json" }) JSON.parse(response.body)["token"] end def authenticated_headers(token) { "Token" => "#{token}", "Content-Type" => "application/json" } end class Credentials attr_reader :username, :password, :yarnpod def initialize(username, password, yarnpod) @username = username @password = password @yarnpod = yarnpod end end class Session include HTTParty include Yarn attr_reader :credentials, :endpoint, :token, :headers def initialize(credentials) @credentials = credentials @endpoint = api_endpoint(credentials.yarnpod) @token = get_jwt_token(credentials.username, credentials.password, self.endpoint) @headers = authenticated_headers(self.token) end def ping self.class.get("#{@endpoint}/ping", headers: @headers) end def whoami self.class.get("#{@endpoint}/whoami", headers: @headers) end # def get_profile_twts(username, page) # self.class.get("#{@endpoint}/profile/#{username}/twts?page=#{page}", headers: @headers) # end def get_profile(username) self.class.get("#{@endpoint}/profile/#{username}", headers: @headers) end def get_twtxt(profile) self.class.get("https://#{credentials.yarnpod}/user/#{profile}/twtxt.txt", headers: @headers) end def post_twt(twt_text) self.class.post("#{@endpoint}/post", body: { text: twt_text, post_as: "#{@credentials.username}" }.to_json, headers: @headers) end end end end