+ # Authentication
+ def login_required
+ if !current_user
+ respond_to do |format|
+ format.html {
+ redirect_to '/auth/joshid'
+ }
+ format.json {
+ render :json => { errors: ['Not logged in'] }.to_json
+ }
+ end
+ end
+ end
+
+ def thread_with_auth_info
+ begin
+ user = nil
+ api_client = nil
+ api_client_auth = nil
+ supplied_token = params[:api_token] || params[:oauth_token]
+ if supplied_token
+ api_client_auth = ApiClientAuthorization.
+ includes(:api_client, :user).
+ where('api_token=?', supplied_token).
+ first
+ if api_client_auth
+ session[:user_id] = api_client_auth.user.id
+ session[:api_client_uuid] = api_client_auth.api_client.uuid
+ session[:api_client_authorization_id] = api_client_auth.id
+ user = api_client_auth.user
+ api_client = api_client_auth.api_client
+ end
+ elsif session[:user_id]
+ user = User.find(session[:user_id]) rescue nil
+ api_client = ApiClient.
+ where('uuid=?',session[:api_client_uuid]).
+ first rescue nil
+ if session[:api_client_authorization_id] then
+ api_client_auth = ApiClientAuthorization.
+ find session[:api_client_authorization_id]
+ end
+ end
+ Thread.current[:api_client_trusted] = session[:api_client_trusted]
+ Thread.current[:api_client_ip_address] = remote_ip
+ Thread.current[:api_client_authorization] = api_client_auth
+ Thread.current[:api_client_uuid] = api_client && api_client.uuid
+ Thread.current[:api_client] = api_client
+ Thread.current[:user] = user
+ yield
+ ensure
+ Thread.current[:api_client_trusted] = nil
+ Thread.current[:api_client_ip_address] = nil
+ Thread.current[:api_client_authorization] = nil
+ Thread.current[:api_client_uuid] = nil
+ Thread.current[:api_client] = nil
+ Thread.current[:user] = nil
+ end
+ end
+ # /Authentication