require 'openssl' class CertificatesController < ApplicationController before_action :set_certificate, only: [:show, :edit, :update, :destroy] # GET /certificates # GET /certificates.json def index @certificates = Certificate.all end # GET /certificates/1 # GET /certificates/1.json def show end # GET /certificates/new def new @certificate = Certificate.new end # GET /certificates/1/edit def edit end # POST /certificates # POST /certificates.json def create @certificate = Certificate.new(certificate_params) key = OpenSSL::PKey::RSA.new 4096 name = OpenSSL::X509::Name.parse 'CN=lex-deeit/DC=weird-web-workers/DC=org' cert = OpenSSL::X509::Certificate.new cert.version = 2 cert.serial = 0 cert.not_before = Time.now cert.not_after = Time.now + 3600 cert.public_key = key.public_key cert.subject = name cert.sign key, OpenSSL::Digest::SHA256.new @certificate.key = key.to_pem @certificate.cert = cert.to_pem respond_to do |format| if @certificate.save format.html { redirect_to @certificate, notice: 'Certificate was successfully created.' } format.json { render :show, status: :created, location: @certificate } else format.html { render :new } format.json { render json: @certificate.errors, status: :unprocessable_entity } end end end # PATCH/PUT /certificates/1 # PATCH/PUT /certificates/1.json def update respond_to do |format| if @certificate.update(certificate_params) format.html { redirect_to @certificate, notice: 'Certificate was successfully updated.' } format.json { render :show, status: :ok, location: @certificate } else format.html { render :edit } format.json { render json: @certificate.errors, status: :unprocessable_entity } end end end # DELETE /certificates/1 # DELETE /certificates/1.json def destroy @certificate.destroy respond_to do |format| format.html { redirect_to certificates_url, notice: 'Certificate was successfully destroyed.' } format.json { head :no_content } end end private # Use callbacks to share common setup or constraints between actions. def set_certificate @certificate = Certificate.find(params[:id]) end # Never trust parameters from the scary internet, only allow the white list through. def certificate_params params.require(:certificate).permit(:key, :cert, :active) end end # vim: set et ts=2 sw=2: