No commit activity in last 3 years
No release in over 3 years
Gitbook Oauth2 strategy for Omniauth.
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
2025
2026
 Dependencies

Development

Runtime

~> 1.0
< 2.0, >= 1.1.1
 Project Readme

omniauth-gitbook gem

Gitbook Oauth2 strategy for Omniauth.

Usage - OmniAuth

If you only integrate OmniAuth to your project, follows to OmniAuth offical document, you have to add callback route and have a controller to handle data from oauth exchange.

Before all, add configuration for omniauth-gotbook at config/initializers/omniauth.rb.

Rails.application.config.middleware.use OmniAuth::Builder do
  provider :developer unless Rails.env.production?
  provider :gitbook, ENV['CLIENT_ID'], ENV['CLIENT_SECRET']
end

Add callback route to route.rb.

get '/auth/:provider/callback', to: 'sessions#create'

Handle json data in controller.

class SessionsController < ApplicationController
  def create
    @user = User.find_or_create_from_auth_hash(auth_hash)
    self.current_user = @user
    redirect_to '/'
  end

  protected

  def auth_hash
    request.env['omniauth.auth']
  end
end

Usage - Devise

If you integrate Devise to your rails project, follows to Devise - OmniAuth: Overview, here are some steps.

If you have no config/initializers/devise.rb, run the generator.

rails g devise:install

Add configuration to config/initializers/devise.rb for omniauth-gitbook.

Devise.setup do |config|
  config.omniauth :gitbook, [CLIENT_ID], [CLIENT_SECRET]
end

And if your devise model named User, add callback route to route.rb.

devise_for :users, controllers: { omniauth_callbacks: 'users/omniauth_callbacks' }

Then you can get user's data in controller.

class Users::OmniauthCallbacksController < Devise::OmniauthCallbacksController
  def gitbook
    @user = User.find_or_create_by_oauth2(request.env[omniauth.auth])
    
    if @user.persisted?
      sign_in_and_redirect_to root_path, event: :authentication
    end
  end
end

What data exactly you retrieved from omniauth-gitbook

Here is the json structure.

{  
   "provider":"gitbook",
   "uid":"[UID]",
   "info":{  
      "username":"calvinhuang",
      "name":"Calvin-Huang",
      "website":"https://github.com/Calvin-Huang",
      "urls":{  
         "profile":"https://www.gitbook.com/@calvin-huang",
         "stars":"https://www.gitbook.com/@calvin-huang/starred",
         "avatar":"https://avatars0.githubusercontent.com/Calvin-Huang"
      },
      "auth":{  
         "token":"[TOKEN]",
         "password":false,
         "verified":false
      },
      "token":"[TOKEN]"
   },
   "credentials":{  
      "token":"[TOKEN]",
      "expires":false
   },
   "extra":{  
      "raw_info":{  
         "id":"[UID]",
         "type":"User",
         "username":"calvinhuang",
         "name":"Calvin-Huang",
         "location":"",
         "website":"https://github.com/Calvin-Huang",
         "verified":false,
         "locked":false,
         "site_admin":false,
         "urls":{  
            "profile":"https://www.gitbook.com/@calvin-huang",
            "stars":"https://www.gitbook.com/@calvin-huang/starred",
            "avatar":"https://avatars0.githubusercontent.com/calvin-huang"
         },
         "permissions":{  
            "edit":true,
            "admin":true
         },
         "dates":{  
            "created":"2016-10-01T08:51:37.391Z"
         },
         "counts":{  

         },
         "github":{  
            "username":"Calvin-Huang",
            "scopes":[  
               ""
            ],
            "required":true
         },
         "plan":{  
            "id":"free"
         },
         "auth":{  
            "token":"[TOKEN]",
            "password":false,
            "verified":false
         },
         "token":"[TOKEN]"
      }
   },
   "books":{  
      "list":[  
         {  
            "id":"calvinhuang/test",
            "status":"published",
            "name":"test",
            "title":"test",
            "description":"",
            "public":true,
            "topics":[  
   
            ],
            "license":"nolicense",
            "language":"en",
            "locked":false,
            "cover":{  
               "large":"[URL]",
               "small":"[URL]"
            },
            "urls":{  
               "git":"https://git.gitbook.com/calvinhuang/test.git",
               "access":"https://www.gitbook.com/book/calvinhuang/test",
               "homepage":"https://calvinhuang.gitbooks.io/test/",
               "read":"https://www.gitbook.com/read/book/calvinhuang/test",
               "edit":"https://www.gitbook.com/book/calvinhuang/test/edit",
               "content":"https://fennyliang.gitbooks.io/test/content/",
               "download":{  
                  "epub":"https://www.gitbook.com/download/epub/book/calvinhuang/test",
                  "mobi":"https://www.gitbook.com/download/mobi/book/calvinhuang/test",
                  "pdf":"https://www.gitbook.com/download/pdf/book/calvinhuang/test"
               }
            },
            "counts":{  
               "stars":0,
               "subscriptions":1,
               "updates":1,
               "discussions":0,
               "collaborators":0
            },
            "dates":{  
               "build":"2016-10-03T05:29:17.696Z",
               "created":"2016-10-03T05:28:37.865Z"
            },
            "permissions":{  
               "edit":true,
               "admin":true,
               "important":true
            },
            "publish":{  
               "defaultBranch":"master",
               "builder":"default"
            },
            "author":{  
               "id":"[UID]",
               "type":"User",
               "username":"calvinhuang",
               "name":"Calvin-Huang",
               "location":"",
               "website":"https://github.com/Calvin-Huang",
               "verified":false,
               "locked":false,
               "site_admin":false,
               "urls":{  
                  "profile":"https://www.gitbook.com/@calvinhuang",
                  "stars":"https://www.gitbook.com/@calvinhuang/starred",
                  "avatar":"https://avatars0.githubusercontent.com/Calvin-Huang"
               },
               "permissions":{  
                  "edit":null,
                  "admin":null
               },
               "dates":{  
                  "created":"2016-10-01T08:51:37.391Z"
               },
               "counts":{  
   
               },
               "github":{  
                  "username":"Calvin-Huang"
               }
            }
         }
      ],
      "total":1,
      "limit":50,
      "page":0,
      "pages":1
   }
}

TO-DO

  • Paginate books.
  • Provide Gem to interact with GitBook API.

Contribution

I'm appreciate at any improvement, please feel free to open PR / Issue to this repo or you can contact me.

License

Copyright (c) Calvin Huang. This software is licensed under the MIT License.