55 lines
1.6 KiB
Ruby
55 lines
1.6 KiB
Ruby
class GithubReposController < ApplicationController
|
|
after_action :verify_authorized
|
|
|
|
def create
|
|
authorize GithubRepo
|
|
@client = create_octokit_client
|
|
@repo = GithubRepo.find_or_create(fetched_repo_params)
|
|
if @repo.valid?
|
|
redirect_to "/settings/integrations", notice: "GitHub repo added"
|
|
else
|
|
redirect_to "/settings/integrations",
|
|
error: "There was an error adding your Github repo"
|
|
end
|
|
end
|
|
|
|
def update
|
|
@repo = GithubRepo.find(params[:id])
|
|
authorize @repo
|
|
if @repo.update(featured: false)
|
|
redirect_to "/settings/integrations", notice: "GitHub repo added"
|
|
else
|
|
redirect_to "/settings/integrations",
|
|
error: "There was an error removing your Github repo"
|
|
end
|
|
end
|
|
|
|
private
|
|
|
|
def create_octokit_client
|
|
current_user_token = current_user.identities.where(provider: "github").last.token
|
|
client = Octokit::Client.new(access_token: current_user_token)
|
|
client&.repositories&.sort_by!(&:name)
|
|
client
|
|
end
|
|
|
|
def fetched_repo_params
|
|
fetched_repo = @client.repositories.select do |repo|
|
|
repo.id == permitted_attributes(GithubRepo)[:github_id_code].to_i
|
|
end.first
|
|
{
|
|
github_id_code: fetched_repo.id,
|
|
user_id: current_user.id,
|
|
name: fetched_repo.name,
|
|
description: fetched_repo.description,
|
|
language: fetched_repo.language,
|
|
fork: fetched_repo.fork,
|
|
url: fetched_repo.html_url,
|
|
bytes_size: fetched_repo.size,
|
|
watchers_count: fetched_repo.watchers,
|
|
stargazers_count: fetched_repo.stargazers_count,
|
|
featured: true,
|
|
info_hash: fetched_repo.to_hash
|
|
}
|
|
end
|
|
end
|