Hello tinyforms

This commit is contained in:
2020-04-05 23:29:32 +02:00
commit 917051c7ea
101 changed files with 9649 additions and 0 deletions

View 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

View File

View 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

View File

@@ -0,0 +1,4 @@
class HomeController < ApplicationController
def index; end
end

View 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

View 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