add ability to get my channels via API
This commit is contained in:
parent
5402830ec3
commit
c28007ff2d
@ -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')
|
||||
|
@ -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
|
||||
|
||||
|
@ -20,7 +20,7 @@
|
||||
<li class="subitem"><a href="#get_feed">Get Channel Feed</a></li>
|
||||
<li class="subitem"><a href="#get_field">Get Channel Field Feed</a></li>
|
||||
<li class="subitem"><a href="#get_status">Get Status Updates</a></li>
|
||||
<li class="subitem"><a href="#list_public">List Public Channels</a></li>
|
||||
<li class="subitem"><a href="#index">List Channels</a></li>
|
||||
<li class="subitem"><a href="#create">Create a Channel</a></li>
|
||||
<li class="subitem"><a href="#clear">Clear a Channel</a></li>
|
||||
<li class="subitem"><a href="#delete">Delete a Channel</a></li>
|
||||
|
@ -114,7 +114,7 @@
|
||||
<%= render 'docs/channels/status' %>
|
||||
|
||||
<hr />
|
||||
<%= render 'docs/channels/public_index' %>
|
||||
<%= render 'docs/channels/index' %>
|
||||
|
||||
<hr />
|
||||
<%= render 'docs/channels/create' %>
|
||||
|
@ -1,6 +1,6 @@
|
||||
<div>
|
||||
<%= render 'response' %>
|
||||
<h2 id="list_public">List Public Channels</h2>
|
||||
<h2 id="index">List Public Channels</h2>
|
||||
</div>
|
||||
|
||||
<br>
|
||||
@ -147,3 +147,131 @@ Example GET:
|
||||
|
||||
</div>
|
||||
|
||||
<div>
|
||||
<%= render 'response' %>
|
||||
<h2>List My Channels</h2>
|
||||
</div>
|
||||
|
||||
<br>
|
||||
To view a list of your Channels, send an HTTP GET to
|
||||
<br>
|
||||
<code><%= @ssl_api_domain %>channels<span class="format format-json">.json</span><span class="format format-xml">.xml</span></code> .
|
||||
|
||||
<br><br>
|
||||
Valid parameters:
|
||||
<ul>
|
||||
<li><b>api_key</b> (string) - Your Account API Key (this is different from a Channel API Key, and can be found in your Account settings). (required)</li>
|
||||
</ul>
|
||||
|
||||
<br>
|
||||
Example GET:
|
||||
|
||||
<pre>GET <span class="str"><%= @ssl_api_domain %>channels<span class="format format-json">.json</span><span class="format format-xml">.xml</span></span></pre>
|
||||
|
||||
<br>
|
||||
|
||||
<div class="format format-block-xxxl format-text">
|
||||
The response will be a webpage with a <a href="/channels">list of your Channels</a>.
|
||||
</div>
|
||||
|
||||
<div class="format format-block-xxxl format-json">
|
||||
The response will be a JSON object of your Channels, for example:
|
||||
|
||||
<pre class="prettyprint">
|
||||
[
|
||||
{
|
||||
"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
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
</pre>
|
||||
|
||||
</div>
|
||||
|
||||
<div class="format format-block-xxxl format-xml">
|
||||
The response will be an XML object of your Channels, for example:
|
||||
|
||||
<pre class="prettyprint">
|
||||
<?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>
|
||||
</pre>
|
||||
|
||||
</div>
|
||||
|
@ -114,6 +114,18 @@ describe ChannelsController do
|
||||
@feed = FactoryGirl.create(:feed, :field1 => 10, :channel => @channel)
|
||||
end
|
||||
|
||||
describe "list channels" do
|
||||
it "should not list my channels" do
|
||||
get :index, {:api_key => 'INVALID', :format => 'json'}
|
||||
response.status.should eq(401)
|
||||
end
|
||||
|
||||
it "lists my channels" do
|
||||
get :index, {:api_key => @user.api_key, :format => 'json'}
|
||||
response.should be_successful
|
||||
end
|
||||
end
|
||||
|
||||
describe "create channel" do
|
||||
it 'creates a channel' do
|
||||
post :create, {:key => @user.api_key, :name => 'mychannel'}
|
||||
|
Loading…
Reference in New Issue
Block a user