# GOV.UK Mini Environment Admin # Copyright © 2018 Christopher Baines # # This file is part of the GOV.UK Mini Environment Admin. # # The GOV.UK Mini Environment Admin is free software: you can # redistribute it and/or modify it under the terms of the GNU Affero # General Public License as published by the Free Software Foundation, # either version 3 of the License, or (at your option) any later # version. # # The GOV.UK Mini Environment Admin is distributed in the hope that it # will be useful, but WITHOUT ANY WARRANTY; without even the implied # warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. # See the GNU Affero General Public License for more details. # # You should have received a copy of the GNU Affero General Public # License along with the GOV.UK Mini Environment Admin. If not, see # . class TerraformHttpBackendController < ApplicationController # These controller methods are for use by Terraform TERRAFORM_CONTROLLER_METHODS = %w(create show destroy) skip_before_action :verify_authenticity_token, only: TERRAFORM_CONTROLLER_METHODS skip_before_action :authenticate_user!, only: TERRAFORM_CONTROLLER_METHODS def self.credentials @_credentials ||= begin # Hopefully there is a simpler way of doing this, but it'll do # for now. verifier = ActiveSupport::MessageVerifier.new( Rails.application.secrets[:secret_key_base] ) { name: 'terraform', password: verifier.generate('tpw') } end end http_basic_authenticate_with( **credentials, only: TERRAFORM_CONTROLLER_METHODS ) def index @all_states = TerraformState.all.group_by(&:state_id) end def create TerraformState.create( state_id: state_id, data: params[:terraform_http_backend] ) render json: '{ "success": true }', status: 200 end def show @state = TerraformState.where( state_id: state_id ).order(:id).last if @state.nil? render json: '{}', status: 404 else render json: @state.data, status: 200 end end def show_history @state = TerraformState.where( state_id: state_id ).order(:id).last respond_to do |format| format.html do render :show end format.json do if @state.nil? render json: '{}', status: 404 else render json: @state.data, status: 200 end end end end def show_by_index @state = TerraformState.where( state_id: state_id ).order(:id).to_a[params[:index].to_i] respond_to do |format| format.html do render :show end format.json do if @state.nil? render json: '{}', status: 404 else render json: @state.data, status: 200 end end end end def destroy TerraformState .where(state_id: state_id) .delete_all render json: '{ "success": true }', status: 200 end def state_id params[:state_id] end end