# frozen_string_literal: true module Mattermost ClientError = Class.new(::Mattermost::Error) class Client attr_reader :user def initialize(user) @user = user end def with_session(&blk) ::Mattermost::Session.new(user).with_session(&blk) end private # Should be used in a session manually def get(session, path, options = {}) json_response session.get(path, options) end # Should be used in a session manually def post(session, path, options = {}) json_response session.post(path, options) end def delete(session, path, options) json_response session.delete(path, options) end def session_get(path, options = {}) with_session do |session| get(session, path, options) end end def session_post(path, options = {}) with_session do |session| post(session, path, options) end end def session_delete(path, options = {}) with_session do |session| delete(session, path, options) end end def json_response(response) json_response = Gitlab::Json.parse(response.body, legacy_mode: true) unless response.success? raise ::Mattermost::ClientError, json_response['message'] || 'Undefined error' end json_response rescue JSON::JSONError raise ::Mattermost::ClientError, 'Cannot parse response' end end end