Merge branch 'develop' of github.com:martini/zammad into develop

This commit is contained in:
Martin Edenhofer 2015-12-15 11:15:46 +01:00
commit 54f90b171d
4 changed files with 157 additions and 0 deletions

View file

@ -0,0 +1,129 @@
# Copyright (C) 2012-2014 Zammad Foundation, http://zammad-foundation.org/
require 'twitter_oauth'
class ExternalCredentialsTwitterController < ApplicationController
before_action :authentication_check
def index
return if deny_if_not_role(Z_ROLENAME_ADMIN)
twitter_credential = ExternalCredential.find_by(name: 'Twitter')
# TODO: refactor
result = {
# consumer_key: nil,
# consumer_secret: nil,
}
if !twitter_credential.nil?
# p twitter_credential.credentials.inspect
result[:consumer_key] = twitter_credential.credentials[:consumer_key]
result[:consumer_secret] = twitter_credential.credentials[:consumer_secret]
result[:authorize_url] = twitter_credential.credentials[:authorize_url]
end
render json: result, status: :ok
end
def show
return if deny_if_not_role(Z_ROLENAME_ADMIN)
model_show_render(ExternalCredential, params)
end
def create
return if deny_if_not_role(Z_ROLENAME_ADMIN)
credentials = handle_credentials(params)
# create object
twitter_credential = ExternalCredential.new( name: 'Twitter', credentials: credentials )
# save object
twitter_credential.save!
redirect_to credentials[:authorize_url]
end
def update
return if deny_if_not_role(Z_ROLENAME_ADMIN)
credentials = handle_credentials(params)
# find object
twitter_credential = ExternalCredential.find(params[:id])
# update object
twitter_credential.update_attributes!( name: 'Twitter', credentials: credentials )
redirect_to credentials.authorize_url
end
def destroy
return if deny_if_not_role(Z_ROLENAME_ADMIN)
model_destory_render(ExternalCredential, params)
end
def auth
# https://zammad.tld/twitter_auth?oauth_token=uP15WgAAAAAAivjgAAABUSUkP5Y&oauth_verifier=OlKro1xj7gBQ5cwdvlcYQEniiEm1THsd
params[:oauth_token]
params[:oauth_verifier]
params.require(:name, :oauth_token, :oauth_verifier)
params.permit(:name, :oauth_token, :oauth_verifier)
twitter_credential = ExternalCredential.find_by( name: 'Twitter' )
if ( twitter_credential[:credentials][:oauth_token] != params[:oauth_token] )
# TODO: ERROR
end
access_token = client.authorize(
twitter_credential[:credentials][:oauth_token],
twitter_credential[:credentials][:oauth_token_secret],
oauth_verifier: params[:oauth_verifier]
)
credentials = {
consumer_key: twitter_credential[:credentials][:consumer_key],
consumer_secret: twitter_credential[:credentials][:consumer_secret],
access_token: access_token.token,
access_token_secret: access_token.secret,
}
twitter_credential.update_attributes!(credentials: credentials )
# TODO
redirect_to "#{Setting.get('http_type')}://#{Setting.get('fqdn')}/#admin/path/external_credentials_twitter"
end
private
def handle_credentials(params)
params.require(:consumer_key)
params.require(:consumer_secret)
params.permit(:consumer_key, :consumer_secret)
credentials = {
consumer_key: params[:consumer_key],
consumer_secret: params[:consumer_secret],
}
client = TwitterOAuth::Client.new(
consumer_key: credentials[:consumer_key],
consumer_secret: credentials[:consumer_secret],
)
# TODO: improve callback URL
request_token = client.request_token(oauth_callback: "#{Setting.get('http_type')}://#{Setting.get('fqdn')}/#{Rails.configuration.api_path}/external_credentials_twitter/Twitter/auth")
credentials[:oauth_token] = request_token.token
credentials[:oauth_token_secret] = request_token.secret
credentials[:authorize_url] = request_token.authorize_url
credentials
end
end

View file

@ -0,0 +1,4 @@
class ExternalCredential < ActiveRecord::Base
validates :name, presence: true
store :credentials
end

View file

@ -0,0 +1,14 @@
Zammad::Application.routes.draw do
api_path = Rails.configuration.api_path
# CRUD
match api_path + '/external_credentials_twitter', to: 'external_credentials_twitter#index', via: :get
match api_path + '/external_credentials_twitter/:id', to: 'external_credentials_twitter#show', via: :get
match api_path + '/external_credentials_twitter', to: 'external_credentials_twitter#create', via: :post
match api_path + '/external_credentials_twitter/:id', to: 'external_credentials_twitter#update', via: :put
match api_path + '/external_credentials_twitter/:id', to: 'external_credentials_twitter#destroy', via: :delete
# callback URL
match api_path + '/external_credentials_twitter/:name/auth', to: 'external_credentials_twitter#auth', via: :get
end

View file

@ -0,0 +1,10 @@
class CreateExternalCredentials < ActiveRecord::Migration
def change
create_table :external_credentials do |t|
t.string :name
t.string :credentials, limit: 2500, null: false
t.timestamps null: false
end
end
end