added the last two models

This commit is contained in:
Jez Caudle 2023-05-10 19:53:55 +01:00
parent f15f9be809
commit 05f803436e
21 changed files with 303 additions and 6 deletions

View File

@ -1,4 +1,13 @@
# README
# Ruby on Rails front end for OpenSMTPD.
An ISC Licensed RoR app to manage your OpemSMTPD users.
## OpenBSD Instructions.
doas pkg_add
## Database schema
Is derived from https://github.com/OpenSMTPD/OpenSMTPD-extras/blob/master/extras/tables/table-mysql/table-mysql.5
This README would normally document whatever steps are necessary to get the
application up and running.
@ -21,4 +30,14 @@ Things you may want to cover:
* Deployment instructions
* ...
## Licensed
Copyright 2022 - 2023 Jez Caudle
Permission to use, copy, modify, and/or distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies.
THE SOFTWARE IS PROVIDED “AS IS” AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.

View File

@ -0,0 +1,70 @@
class CredentialsController < ApplicationController
before_action :set_credential, only: %i[ show edit update destroy ]
# GET /credentials or /credentials.json
def index
@credentials = Credential.all
end
# GET /credentials/1 or /credentials/1.json
def show
end
# GET /credentials/new
def new
@credential = Credential.new
end
# GET /credentials/1/edit
def edit
end
# POST /credentials or /credentials.json
def create
@credential = Credential.new(credential_params)
respond_to do |format|
if @credential.save
format.html { redirect_to credential_url(@credential), notice: "Credential was successfully created." }
format.json { render :show, status: :created, location: @credential }
else
format.html { render :new, status: :unprocessable_entity }
format.json { render json: @credential.errors, status: :unprocessable_entity }
end
end
end
# PATCH/PUT /credentials/1 or /credentials/1.json
def update
respond_to do |format|
if @credential.update(credential_params)
format.html { redirect_to credential_url(@credential), notice: "Credential was successfully updated." }
format.json { render :show, status: :ok, location: @credential }
else
format.html { render :edit, status: :unprocessable_entity }
format.json { render json: @credential.errors, status: :unprocessable_entity }
end
end
end
# DELETE /credentials/1 or /credentials/1.json
def destroy
@credential.destroy
respond_to do |format|
format.html { redirect_to credentials_url, notice: "Credential was successfully destroyed." }
format.json { head :no_content }
end
end
private
# Use callbacks to share common setup or constraints between actions.
def set_credential
@credential = Credential.find(params[:id])
end
# Only allow a list of trusted parameters through.
def credential_params
params.require(:credential).permit(:email, :password)
end
end

View File

@ -0,0 +1,2 @@
module CredentialsHelper
end

2
app/models/credential.rb Normal file
View File

@ -0,0 +1,2 @@
class Credential < ApplicationRecord
end

View File

@ -0,0 +1,12 @@
<div id="<%= dom_id credential %>">
<p>
<strong>Email:</strong>
<%= credential.email %>
</p>
<p>
<strong>Password:</strong>
<%= credential.password %>
</p>
</div>

View File

@ -0,0 +1,2 @@
json.extract! credential, :id, :email, :password, :created_at, :updated_at
json.url credential_url(credential, format: :json)

View File

@ -0,0 +1,27 @@
<%= form_with(model: credential) do |form| %>
<% if credential.errors.any? %>
<div style="color: red">
<h2><%= pluralize(credential.errors.count, "error") %> prohibited this credential from being saved:</h2>
<ul>
<% credential.errors.each do |error| %>
<li><%= error.full_message %></li>
<% end %>
</ul>
</div>
<% end %>
<div>
<%= form.label :email, style: "display: block" %>
<%= form.text_field :email %>
</div>
<div>
<%= form.label :password, style: "display: block" %>
<%= form.text_field :password %>
</div>
<div>
<%= form.submit %>
</div>
<% end %>

View File

@ -0,0 +1,10 @@
<h1>Editing credential</h1>
<%= render "form", credential: @credential %>
<br>
<div>
<%= link_to "Show this credential", @credential %> |
<%= link_to "Back to credentials", credentials_path %>
</div>

View File

@ -0,0 +1,14 @@
<p style="color: green"><%= notice %></p>
<h1>Credentials</h1>
<div id="credentials">
<% @credentials.each do |credential| %>
<%= render credential %>
<p>
<%= link_to "Show this credential", credential %>
</p>
<% end %>
</div>
<%= link_to "New credential", new_credential_path %>

View File

@ -0,0 +1 @@
json.array! @credentials, partial: "credentials/credential", as: :credential

View File

@ -0,0 +1,9 @@
<h1>New credential</h1>
<%= render "form", credential: @credential %>
<br>
<div>
<%= link_to "Back to credentials", credentials_path %>
</div>

View File

@ -0,0 +1,10 @@
<p style="color: green"><%= notice %></p>
<%= render @credential %>
<div>
<%= link_to "Edit this credential", edit_credential_path(@credential) %> |
<%= link_to "Back to credentials", credentials_path %>
<%= button_to "Destroy this credential", @credential, method: :delete %>
</div>

View File

@ -0,0 +1 @@
json.partial! "credentials/credential", credential: @credential

View File

@ -1,4 +1,5 @@
Rails.application.routes.draw do
resources :credentials
resources :virtuals
resources :domains
devise_for :users

View File

@ -0,0 +1,10 @@
class CreateCredentials < ActiveRecord::Migration[7.0]
def change
create_table :credentials do |t|
t.string :email
t.string :password
t.timestamps
end
end
end

View File

@ -0,0 +1,48 @@
require "test_helper"
class CredentialsControllerTest < ActionDispatch::IntegrationTest
setup do
@credential = credentials(:one)
end
test "should get index" do
get credentials_url
assert_response :success
end
test "should get new" do
get new_credential_url
assert_response :success
end
test "should create credential" do
assert_difference("Credential.count") do
post credentials_url, params: { credential: { email: @credential.email, password: @credential.password } }
end
assert_redirected_to credential_url(Credential.last)
end
test "should show credential" do
get credential_url(@credential)
assert_response :success
end
test "should get edit" do
get edit_credential_url(@credential)
assert_response :success
end
test "should update credential" do
patch credential_url(@credential), params: { credential: { email: @credential.email, password: @credential.password } }
assert_redirected_to credential_url(@credential)
end
test "should destroy credential" do
assert_difference("Credential.count", -1) do
delete credential_url(@credential)
end
assert_redirected_to credentials_url
end
end

9
test/fixtures/credentials.yml vendored Normal file
View File

@ -0,0 +1,9 @@
# Read about fixtures at https://api.rubyonrails.org/classes/ActiveRecord/FixtureSet.html
one:
email: MyString
password: MyString
two:
email: MyString
password: MyString

View File

@ -1,9 +1,9 @@
# Read about fixtures at https://api.rubyonrails.org/classes/ActiveRecord/FixtureSet.html
one:
email: MyString
destination: MyString
email: abuse@example.net
destination: bob@example.net
two:
email: MyString
destination: MyString
email: postmaster@example.net
destination: bob@example.net

Binary file not shown.

View File

@ -0,0 +1,7 @@
require "test_helper"
class CredentialTest < ActiveSupport::TestCase
# test "the truth" do
# assert true
# end
end

View File

@ -0,0 +1,43 @@
require "application_system_test_case"
class CredentialsTest < ApplicationSystemTestCase
setup do
@credential = credentials(:one)
end
test "visiting the index" do
visit credentials_url
assert_selector "h1", text: "Credentials"
end
test "should create credential" do
visit credentials_url
click_on "New credential"
fill_in "Email", with: @credential.email
fill_in "Password", with: @credential.password
click_on "Create Credential"
assert_text "Credential was successfully created"
click_on "Back"
end
test "should update Credential" do
visit credential_url(@credential)
click_on "Edit this credential", match: :first
fill_in "Email", with: @credential.email
fill_in "Password", with: @credential.password
click_on "Update Credential"
assert_text "Credential was successfully updated"
click_on "Back"
end
test "should destroy Credential" do
visit credential_url(@credential)
click_on "Destroy this credential", match: :first
assert_text "Credential was successfully destroyed"
end
end