diff --git a/app/controllers/application_controller.rb b/app/controllers/application_controller.rb index bdec2d1..3e9cac8 100644 --- a/app/controllers/application_controller.rb +++ b/app/controllers/application_controller.rb @@ -53,6 +53,16 @@ class ApplicationController < ActionController::Base end end + # authenticates user based on the user's api_key + def authenticate_via_api_key! + # exit if no api_key + return false if params[:api_key].blank? + # get the user + user = User.find_by_api_key(params[:api_key]) + # sign in the user if they exist + sign_in(user, store: false) if user.present? + end + # get the locale, but don't fail if header value doesn't exist def get_locale locale = get_header_value('HTTP_ACCEPT_LANGUAGE') diff --git a/app/controllers/channels_controller.rb b/app/controllers/channels_controller.rb index f46134f..a92d968 100644 --- a/app/controllers/channels_controller.rb +++ b/app/controllers/channels_controller.rb @@ -1,5 +1,6 @@ class ChannelsController < ApplicationController include ChannelsHelper, ApiKeys + before_filter :authenticate_via_api_key!, :only => [:index] before_filter :require_user, :except => [:realtime, :realtime_update, :show, :post_data, :social_show, :social_feed, :public] before_filter :set_channels_menu layout 'application', :except => [:social_show, :social_feed] @@ -140,7 +141,8 @@ class ChannelsController < ApplicationController @channels = current_user.channels respond_to do |format| format.html - format.json { render :json => @channels.to_json(:root => false) } + format.json { render :json => @channels.to_json(Channel.private_options) } + format.xml { render :xml => @channels.to_xml(Channel.private_options) } end end diff --git a/app/views/docs/_sidebar.html.erb b/app/views/docs/_sidebar.html.erb index e82f268..ef31def 100644 --- a/app/views/docs/_sidebar.html.erb +++ b/app/views/docs/_sidebar.html.erb @@ -20,7 +20,7 @@
<%= @ssl_api_domain %>channels.json.xml
.
+
+GET <%= @ssl_api_domain %>channels.json.xml
+
++[ + { + "id": 9, + "name": "my_house", + "description": "Netduino Plus connected to sensors around the house", + "latitude": "40.44", + "longitude": "-79.996", + "created_at": "2010-12-13T20:20:06-05:00", + "elevation": "", + "last_entry_id": 6062691, + "ranking" :100, + "username":"hans", + "tags": [], + "api_keys": + [ + { + "api_key": "XXXXXXXXXXXXXXXX", + "write_flag": true + } + ] + }, + { + "id": 5683, + "name": "Residential Data Points", + "description": "Connected Arduino", + "latitude": "32.664548", + "longitude": "-73.654972", + "created_at": "2013-05-15T12:33:57-04:00", + "elevation": "100", + "last_entry_id": 731713, + "ranking": 100, + "username": "hans", + "tags": [], + "api_keys": + [ + { + "api_key": "XXXXXXXXXXXXXXXX", + "write_flag": true + } + ] + } +] ++ +
+<?xml version="1.0" encoding="UTF-8"?> +<channels type="array"> + <channel> + <id type="integer">9</id> + <name>my_house</name> + <description> + Netduino Plus connected to sensors around the house + </description> + <latitude type="decimal">40.44</latitude> + <longitude type="decimal">-79.996</longitude> + <created-at type="dateTime">2010-12-13T20:20:06-05:00</created-at> + <elevation/> + <last-entry-id type="integer">6062720</last-entry-id> + <ranking type="integer">100</ranking> + <username>hans</username> + <tags type="array" /> + <api-keys type="array"> + <api-key> + <api-key>XXXXXXXXXXXXXXXX</api-key> + <write-flag type="boolean">true</write-flag> + </api-key> + </api-keys> + </channel> + <channel> + <id type="integer">5683</id> + <name>Residential Data Points</name> + <description>Connected Arduino</description> + <latitude type="decimal">32.664548</latitude> + <longitude type="decimal">-73.654972</longitude> + <created-at type="dateTime">2013-05-15T12:33:57-04:00</created-at> + <elevation>100</elevation> + <last-entry-id type="integer">731720</last-entry-id> + <ranking type="integer">100</ranking> + <username>hans</username> + <tags type="array" /> + <api-keys type="array"> + <api-key> + <api-key>XXXXXXXXXXXXXXXX</api-key> + <write-flag type="boolean">true</write-flag> + </api-key> + </api-keys> + </channel> +</channels> ++ +