parent
b0db7dfece
commit
53ecf8718f
@ -0,0 +1,39 @@
|
||||
module Mobile
|
||||
|
||||
$LOAD_PATH << File.expand_path('..',__FILE__)
|
||||
|
||||
autoload :Auth, 'apis/auth'
|
||||
autoload :Users, 'apis/users'
|
||||
autoload :Courses, 'apis/courses'
|
||||
|
||||
class API < Grape::API
|
||||
version 'v1', using: :path
|
||||
format :json
|
||||
|
||||
helpers do
|
||||
def logger
|
||||
API.logger
|
||||
end
|
||||
|
||||
def authticate!
|
||||
error!('Unauthorized. Invalid or expired token.', 401) unless current_user
|
||||
end
|
||||
|
||||
def current_user
|
||||
token = ApiKey.where(access_token: params[:token]).first
|
||||
if token && !token.expired?
|
||||
@current_user = User.find(token.user_id)
|
||||
else
|
||||
nil
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
mount Auth
|
||||
mount Users
|
||||
mount Courses
|
||||
|
||||
end
|
||||
end
|
||||
|
||||
|
@ -0,0 +1,23 @@
|
||||
module Mobile
|
||||
class Auth < Grape::API
|
||||
resource :auth do
|
||||
desc "Creates and returns access_token if valid login"
|
||||
params do
|
||||
requires :login, type: String, desc: 'Username or email'
|
||||
requires :password, type: String, desc: 'Password'
|
||||
end
|
||||
post :login do
|
||||
user,last_logon = ::User.try_to_login(params[:login], params[:password])
|
||||
if user
|
||||
::ApiKey.delete_all(user_id: user.id)
|
||||
key = ::ApiKey.create!(user_id: user.id)
|
||||
{token: key.access_token}.merge(user.as_json).merge(user.extensions.as_json)
|
||||
else
|
||||
error!('Unauthorized.', 401)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
|
@ -0,0 +1,39 @@
|
||||
module Mobile
|
||||
class Courses < Grape::API
|
||||
resource :courses do
|
||||
desc "get all courses"
|
||||
params do
|
||||
requires :per_page_count, type: Integer
|
||||
requires :page, type: Integer, desc: 'current page no'
|
||||
end
|
||||
get do
|
||||
per_page_option = params[:per_page_count] || 10
|
||||
page_no = params[:page] || 1
|
||||
@courses_all = Course.active.visible.
|
||||
joins("LEFT JOIN #{CourseStatus.table_name} ON #{Course.table_name}.id = #{CourseStatus.table_name}.course_id")
|
||||
@course_count = @courses_all.count
|
||||
@course_pages = Redmine::Pagination::Paginator.new @course_count, per_page_option,page_no
|
||||
@course_activity_count=Hash.new
|
||||
@courses_all.each do |course|
|
||||
@course_activity_count[course.id]=0
|
||||
end
|
||||
@courses = @courses_all.order("created_at desc")
|
||||
@s_type = 0
|
||||
@courses = @courses.offset(@course_pages.offset).limit(@course_pages.per_page)
|
||||
# @course_activity_count=get_course_activity @courses, @course_activity_count
|
||||
end
|
||||
|
||||
desc "Return a course"
|
||||
params do
|
||||
requires :id, type: Integer
|
||||
end
|
||||
route_param :id do
|
||||
get do
|
||||
Course.find(params[:id])
|
||||
end
|
||||
end
|
||||
|
||||
end
|
||||
end
|
||||
end
|
||||
|
@ -0,0 +1,30 @@
|
||||
module Mobile
|
||||
class Users < Grape::API
|
||||
resource :users do
|
||||
desc "get all users"
|
||||
get do
|
||||
['hello']
|
||||
end
|
||||
desc "add a user"
|
||||
params do
|
||||
requires :login, type: String, desc: 'username'
|
||||
requires :email, type: String, desc: 'email'
|
||||
requires :password, type: String, desc: 'password'
|
||||
end
|
||||
post do
|
||||
user = User.new
|
||||
user.login = params[:login]
|
||||
user.mail = params[:email]
|
||||
user.password = params[:password]
|
||||
user.password_confirmation = params[:password]
|
||||
user.activate
|
||||
if user.save!
|
||||
UserStatus.create(:user_id => user.id, :changsets_count => 0, :watchers_count => 0)
|
||||
end
|
||||
user
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
|
@ -0,0 +1,21 @@
|
||||
class ApiKey < ActiveRecord::Base
|
||||
attr_accessible :access_token, :active, :expires_at, :user_id
|
||||
before_create :generate_access_token
|
||||
before_create :set_experation
|
||||
|
||||
# validates_presence_of :user_id, :access_token
|
||||
|
||||
def expired?
|
||||
DateTime.now >= self.expires_at
|
||||
end
|
||||
|
||||
private
|
||||
def generate_access_token
|
||||
self.access_token = SecureRandom.hex
|
||||
end
|
||||
|
||||
def set_experation
|
||||
self.expires_at = DateTime.now + 30
|
||||
end
|
||||
|
||||
end
|
@ -0,0 +1,14 @@
|
||||
class CreateApiKeys < ActiveRecord::Migration
|
||||
def change
|
||||
create_table :api_keys do |t|
|
||||
t.string :access_token
|
||||
t.datetime :expires_at
|
||||
t.integer :user_id
|
||||
t.boolean :active, default: true
|
||||
|
||||
t.timestamps
|
||||
end
|
||||
add_index :api_keys, :user_id
|
||||
add_index :api_keys, :access_token
|
||||
end
|
||||
end
|
File diff suppressed because it is too large
Load Diff
Loading…
Reference in new issue