Hello tinyforms
This commit is contained in:
10
app/controllers/application_controller.rb
Normal file
10
app/controllers/application_controller.rb
Normal file
@@ -0,0 +1,10 @@
|
||||
class ApplicationController < ActionController::Base
|
||||
|
||||
def require_login
|
||||
redirect_to login_url unless current_user.present?
|
||||
end
|
||||
|
||||
def current_user
|
||||
session[:user_id] && User.find_by(id: session[:user_id])
|
||||
end
|
||||
end
|
||||
0
app/controllers/concerns/.keep
Normal file
0
app/controllers/concerns/.keep
Normal file
33
app/controllers/forms_controller.rb
Normal file
33
app/controllers/forms_controller.rb
Normal file
@@ -0,0 +1,33 @@
|
||||
require 'google/apis/sheets_v4'
|
||||
require 'google/api_client/client_secrets'
|
||||
class FormsController < ApplicationController
|
||||
before_action :require_login
|
||||
|
||||
def new
|
||||
@form = current_user.forms.build
|
||||
end
|
||||
|
||||
def show
|
||||
@form = current_user.forms.find_by!(token: params[:id])
|
||||
@submissions = @form.submissions
|
||||
end
|
||||
|
||||
def index
|
||||
@forms = current_user.forms
|
||||
end
|
||||
|
||||
def create
|
||||
@form = current_user.forms.build(form_params)
|
||||
if @form.save
|
||||
redirect_to form_url(@form)
|
||||
else
|
||||
render :new
|
||||
end
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def form_params
|
||||
params.require(:form).permit(:title, :thank_you_url)
|
||||
end
|
||||
end
|
||||
4
app/controllers/home_controller.rb
Normal file
4
app/controllers/home_controller.rb
Normal file
@@ -0,0 +1,4 @@
|
||||
class HomeController < ApplicationController
|
||||
|
||||
def index; end
|
||||
end
|
||||
48
app/controllers/sessions_controller.rb
Normal file
48
app/controllers/sessions_controller.rb
Normal file
@@ -0,0 +1,48 @@
|
||||
require 'google/apis/oauth2_v2'
|
||||
class SessionsController < ApplicationController
|
||||
|
||||
def new
|
||||
reset_session
|
||||
redirect_to auth_client.authorization_uri.to_s
|
||||
end
|
||||
|
||||
def auth
|
||||
reset_session
|
||||
if params[:error]
|
||||
flash[:error] = 'Login failed'
|
||||
redirect_to root_url
|
||||
else
|
||||
auth_client.code = params[:code]
|
||||
auth_client.fetch_access_token!
|
||||
|
||||
@user, @authentication = User.find_by_oauth_info(auth_client)
|
||||
if @user.persisted? && @authentication.persisted?
|
||||
session[:user_id] = @user.id.to_s
|
||||
redirect_to forms_url
|
||||
else
|
||||
flash[:error] = 'Login failed'
|
||||
redirect_to root_url
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
def destroy
|
||||
reset_session
|
||||
redirect_to root_url
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def auth_client
|
||||
@auth_client ||= CLIENT_SECRETS.to_authorization.tap do |c|
|
||||
c.update!(
|
||||
scope: 'https://www.googleapis.com/auth/userinfo.email https://www.googleapis.com/auth/userinfo.profile https://www.googleapis.com/auth/spreadsheets',
|
||||
redirect_uri: auth_url,
|
||||
additional_parameters: {
|
||||
'access_type' => 'offline', # offline access
|
||||
'include_granted_scopes' => 'true' # incremental auth
|
||||
}
|
||||
)
|
||||
end
|
||||
end
|
||||
end
|
||||
25
app/controllers/submissions_controller.rb
Normal file
25
app/controllers/submissions_controller.rb
Normal file
@@ -0,0 +1,25 @@
|
||||
require 'google/apis/sheets_v4'
|
||||
class SubmissionsController < ApplicationController
|
||||
skip_before_action :verify_authenticity_token
|
||||
|
||||
def create
|
||||
@form = Form.find_by!(token: params[:form_id])
|
||||
@submission = @form.submissions.build(data: data_params)
|
||||
|
||||
respond_to do |format|
|
||||
if @submission.save
|
||||
format.html { redirect_to(@form.thank_you_url) if @form.thank_you_url.present? }
|
||||
format.json { render(json: { success: true, data: @submission.data }) }
|
||||
else
|
||||
format.html
|
||||
format.json { render(json: { error: @submission.errors }, status: 422) }
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def data_params
|
||||
request.request_parameters
|
||||
end
|
||||
end
|
||||
Reference in New Issue
Block a user