mirror of
https://0xacab.org/sutty/sutty
synced 2024-11-22 01:56:21 +00:00
WIP creación de sitios
This commit is contained in:
parent
166b549d63
commit
237cfb4a5e
11 changed files with 177 additions and 2 deletions
|
@ -2,3 +2,4 @@ SECRET_KEY_BASE=
|
||||||
IMAP_SERVER=
|
IMAP_SERVER=
|
||||||
DEFAULT_FROM=
|
DEFAULT_FROM=
|
||||||
DEVISE_PEPPER=
|
DEVISE_PEPPER=
|
||||||
|
SKEL_SUTTY=https://0xacab.org/sutty/skel.sutty.nl
|
||||||
|
|
7
Gemfile
7
Gemfile
|
@ -53,6 +53,8 @@ gem 'mini_magick'
|
||||||
gem 'pundit'
|
gem 'pundit'
|
||||||
gem 'rails-i18n'
|
gem 'rails-i18n'
|
||||||
gem 'rails_warden'
|
gem 'rails_warden'
|
||||||
|
gem 'rugged'
|
||||||
|
gem 'validates_hostname'
|
||||||
gem 'whenever', require: false
|
gem 'whenever', require: false
|
||||||
|
|
||||||
group :development, :test do
|
group :development, :test do
|
||||||
|
@ -82,3 +84,8 @@ group :development do
|
||||||
gem 'spring'
|
gem 'spring'
|
||||||
gem 'spring-watcher-listen', '~> 2.0.0'
|
gem 'spring-watcher-listen', '~> 2.0.0'
|
||||||
end
|
end
|
||||||
|
|
||||||
|
group :test do
|
||||||
|
gem 'database_cleaner'
|
||||||
|
gem 'factory_bot_rails'
|
||||||
|
end
|
||||||
|
|
14
Gemfile.lock
14
Gemfile.lock
|
@ -98,6 +98,7 @@ GEM
|
||||||
ruby-enum (~> 0.5)
|
ruby-enum (~> 0.5)
|
||||||
concurrent-ruby (1.1.5)
|
concurrent-ruby (1.1.5)
|
||||||
crass (1.0.4)
|
crass (1.0.4)
|
||||||
|
database_cleaner (1.7.0)
|
||||||
devise (4.6.2)
|
devise (4.6.2)
|
||||||
bcrypt (~> 3.0)
|
bcrypt (~> 3.0)
|
||||||
orm_adapter (~> 0.1)
|
orm_adapter (~> 0.1)
|
||||||
|
@ -127,6 +128,11 @@ GEM
|
||||||
actionmailer (>= 4.0, < 6)
|
actionmailer (>= 4.0, < 6)
|
||||||
activesupport (>= 4.0, < 6)
|
activesupport (>= 4.0, < 6)
|
||||||
execjs (2.7.0)
|
execjs (2.7.0)
|
||||||
|
factory_bot (5.0.2)
|
||||||
|
activesupport (>= 4.2.0)
|
||||||
|
factory_bot_rails (5.0.2)
|
||||||
|
factory_bot (~> 5.0.2)
|
||||||
|
railties (>= 4.2.0)
|
||||||
fastimage (2.1.5)
|
fastimage (2.1.5)
|
||||||
ffi (1.11.1)
|
ffi (1.11.1)
|
||||||
font-awesome-rails (4.7.0.4)
|
font-awesome-rails (4.7.0.4)
|
||||||
|
@ -286,6 +292,7 @@ GEM
|
||||||
ruby_parser (3.13.1)
|
ruby_parser (3.13.1)
|
||||||
sexp_processor (~> 4.9)
|
sexp_processor (~> 4.9)
|
||||||
rubyzip (1.2.2)
|
rubyzip (1.2.2)
|
||||||
|
rugged (0.28.2)
|
||||||
safe_yaml (1.0.5)
|
safe_yaml (1.0.5)
|
||||||
sass (3.7.4)
|
sass (3.7.4)
|
||||||
sass-listen (~> 4.0.0)
|
sass-listen (~> 4.0.0)
|
||||||
|
@ -344,6 +351,9 @@ GEM
|
||||||
unf_ext
|
unf_ext
|
||||||
unf_ext (0.0.7.5)
|
unf_ext (0.0.7.5)
|
||||||
unicode-display_width (1.5.0)
|
unicode-display_width (1.5.0)
|
||||||
|
validates_hostname (1.0.8)
|
||||||
|
activerecord (>= 3.0)
|
||||||
|
activesupport (>= 3.0)
|
||||||
warden (1.2.8)
|
warden (1.2.8)
|
||||||
rack (>= 2.0.6)
|
rack (>= 2.0.6)
|
||||||
web-console (3.7.0)
|
web-console (3.7.0)
|
||||||
|
@ -376,6 +386,7 @@ DEPENDENCIES
|
||||||
carrierwave-bombshelter
|
carrierwave-bombshelter
|
||||||
carrierwave-i18n
|
carrierwave-i18n
|
||||||
commonmarker
|
commonmarker
|
||||||
|
database_cleaner
|
||||||
devise
|
devise
|
||||||
devise-i18n
|
devise-i18n
|
||||||
devise_invitable
|
devise_invitable
|
||||||
|
@ -383,6 +394,7 @@ DEPENDENCIES
|
||||||
ed25519
|
ed25519
|
||||||
email_address
|
email_address
|
||||||
exception_notification
|
exception_notification
|
||||||
|
factory_bot_rails
|
||||||
font-awesome-rails
|
font-awesome-rails
|
||||||
friendly_id
|
friendly_id
|
||||||
haml-rails
|
haml-rails
|
||||||
|
@ -400,6 +412,7 @@ DEPENDENCIES
|
||||||
rails_warden
|
rails_warden
|
||||||
rbnacl (< 5.0)
|
rbnacl (< 5.0)
|
||||||
rubocop
|
rubocop
|
||||||
|
rugged
|
||||||
sass-rails (~> 5.0)
|
sass-rails (~> 5.0)
|
||||||
selenium-webdriver
|
selenium-webdriver
|
||||||
spring
|
spring
|
||||||
|
@ -407,6 +420,7 @@ DEPENDENCIES
|
||||||
sqlite3 (~> 1.3.6)
|
sqlite3 (~> 1.3.6)
|
||||||
turbolinks (~> 5)
|
turbolinks (~> 5)
|
||||||
uglifier (>= 1.3.0)
|
uglifier (>= 1.3.0)
|
||||||
|
validates_hostname
|
||||||
web-console (>= 3.3.0)
|
web-console (>= 3.3.0)
|
||||||
whenever
|
whenever
|
||||||
|
|
||||||
|
|
|
@ -5,6 +5,8 @@
|
||||||
class Site < ApplicationRecord
|
class Site < ApplicationRecord
|
||||||
include FriendlyId
|
include FriendlyId
|
||||||
|
|
||||||
|
validates :name, uniqueness: true, hostname: true
|
||||||
|
|
||||||
friendly_id :name, use: %i[finders]
|
friendly_id :name, use: %i[finders]
|
||||||
|
|
||||||
has_many :roles
|
has_many :roles
|
||||||
|
|
9
db/migrate/20190711183726_add_unique_to_site_name.rb
Normal file
9
db/migrate/20190711183726_add_unique_to_site_name.rb
Normal file
|
@ -0,0 +1,9 @@
|
||||||
|
# frozen_string_literal: true
|
||||||
|
|
||||||
|
# Los nombres de los sitios son únicos
|
||||||
|
class AddUniqueToSiteName < ActiveRecord::Migration[5.2]
|
||||||
|
def change
|
||||||
|
remove_index :sites, :name
|
||||||
|
add_index :sites, :name, unique: true
|
||||||
|
end
|
||||||
|
end
|
|
@ -12,7 +12,7 @@
|
||||||
#
|
#
|
||||||
# It's strongly recommended that you check this file into your version control system.
|
# It's strongly recommended that you check this file into your version control system.
|
||||||
|
|
||||||
ActiveRecord::Schema.define(version: 20_190_706_002_615) do
|
ActiveRecord::Schema.define(version: 20_190_711_183_726) do
|
||||||
create_table 'roles', force: :cascade do |t|
|
create_table 'roles', force: :cascade do |t|
|
||||||
t.datetime 'created_at', null: false
|
t.datetime 'created_at', null: false
|
||||||
t.datetime 'updated_at', null: false
|
t.datetime 'updated_at', null: false
|
||||||
|
@ -29,7 +29,7 @@ ActiveRecord::Schema.define(version: 20_190_706_002_615) do
|
||||||
t.datetime 'created_at', null: false
|
t.datetime 'created_at', null: false
|
||||||
t.datetime 'updated_at', null: false
|
t.datetime 'updated_at', null: false
|
||||||
t.string 'name'
|
t.string 'name'
|
||||||
t.index ['name'], name: 'index_sites_on_name'
|
t.index ['name'], name: 'index_sites_on_name', unique: true
|
||||||
end
|
end
|
||||||
|
|
||||||
create_table 'usuaries', force: :cascade do |t|
|
create_table 'usuaries', force: :cascade do |t|
|
||||||
|
|
107
doc/crear_sitios.md
Normal file
107
doc/crear_sitios.md
Normal file
|
@ -0,0 +1,107 @@
|
||||||
|
# Crear sitios
|
||||||
|
|
||||||
|
Para que les usuaries puedan crear sitios, vamos a tener el siguiente
|
||||||
|
flujo:
|
||||||
|
|
||||||
|
* Nombre del sitio, en minúsculas, sin puntos.
|
||||||
|
|
||||||
|
* Descripción, una descripción de qué hace el sitio para Sutty y otres
|
||||||
|
usuaries del sitio.
|
||||||
|
|
||||||
|
* Plantilla. Lista de plantillas disponibles, con captura, nombre, link
|
||||||
|
a vista previa, link a autore, licencia y usos posibles (blogs, medios
|
||||||
|
alternativos, denuncias, etc.)
|
||||||
|
|
||||||
|
Tengo mi propio diseño! Explicar que vamos a dar esta posibilidad más
|
||||||
|
adelante, pero que necesitamos financiamiento. Esto permitiría
|
||||||
|
agregar un repositorio o gema de plantilla.
|
||||||
|
|
||||||
|
* Licencia. Elegir la licencia del contenido de un listado con
|
||||||
|
licencias piolas:
|
||||||
|
|
||||||
|
* PPL
|
||||||
|
* CC-BY
|
||||||
|
* CC-BY-SA
|
||||||
|
* CC-0
|
||||||
|
|
||||||
|
* Lugares donde se van a subir los sitios. Por defecto nombre.sutty.nl,
|
||||||
|
otras opciones en un desplegable:
|
||||||
|
|
||||||
|
* Tengo mi propio dominio: Explica que todavía no tenemos esto
|
||||||
|
autogestionado pero que si quieren apoyar el trabajo que hacemos
|
||||||
|
pueden donarnos o ponerse en contacto.
|
||||||
|
|
||||||
|
Más adelante pide los dominios, explica cómo comprarlos en njal.la y
|
||||||
|
qué información poner los DNS para poder alojarlos. Cuando Sutty
|
||||||
|
tenga su propio DNS, indica los NS.
|
||||||
|
|
||||||
|
* Neocities: Explicar qué es neocities y permitir agregar una cuenta.
|
||||||
|
Podríamos varias pero queremos estar bien con neocities y además no
|
||||||
|
tiene mucho sentido tener varias páginas en el mismo host.
|
||||||
|
|
||||||
|
Pedir usuarie y contraseña o API key. Dar link directo a dónde
|
||||||
|
sacar la API key y explicar para qué es.
|
||||||
|
|
||||||
|
**En realidad esta sería nuestra primera opción?**
|
||||||
|
|
||||||
|
* Zip: Descargar el sitio en un archivo zip, proponiendo posibles usos
|
||||||
|
offline (raspberries, etc!)
|
||||||
|
|
||||||
|
Da una URL desde donde se puede descargar el sitio.
|
||||||
|
|
||||||
|
* SSH/SFTP: Explicar que permite enviar el sitio a servidores propios.
|
||||||
|
Permite agregar varios servidores, pide usuario, dominio y puerto.
|
||||||
|
Da la llave pública SSH de Sutty y explica cómo agregarla al
|
||||||
|
servidor remoto. También da un link de descarga para que puedan
|
||||||
|
hacer ssh-copy-id.
|
||||||
|
|
||||||
|
**Esto todavía no**
|
||||||
|
|
||||||
|
* IPFS: Da la opción de activar/desactivar soporte para IPFS.
|
||||||
|
Explica qué es y para qué sirve. Vincula a documentación sobre
|
||||||
|
instalar IPFS de escritorio y cómo pinear el hash de sutty, instalar
|
||||||
|
el companion, etc.
|
||||||
|
|
||||||
|
**Esto todavía no**
|
||||||
|
|
||||||
|
* Torrent: Genera un torrent y lo siembra.
|
||||||
|
|
||||||
|
**Esto todavía no**
|
||||||
|
|
||||||
|
* Syncthing: Explica qué es y da la ID del nodo introductor de Sutty.
|
||||||
|
|
||||||
|
**Esto todavía no**
|
||||||
|
|
||||||
|
* Zeronet: Idem syncthing?
|
||||||
|
|
||||||
|
**Esto todavía no**
|
||||||
|
|
||||||
|
* Archive.org
|
||||||
|
|
||||||
|
**Esto todavía no**
|
||||||
|
|
||||||
|
* Crear sitio!
|
||||||
|
|
||||||
|
## Sitios
|
||||||
|
|
||||||
|
Tenemos un sitio esqueleto que tiene lo básico para salir andando:
|
||||||
|
|
||||||
|
* Gemas de Jekyll
|
||||||
|
* Gemas de Sutty
|
||||||
|
* Gemas de Temas
|
||||||
|
* Esqueleto de la configuración
|
||||||
|
* Directorios base (con i18n también)
|
||||||
|
|
||||||
|
El sitio esqueleto es un repositorio Git que se clona al directorio del
|
||||||
|
sitio. Esto permite luego pullear actualizaciones desde el esqueleto a
|
||||||
|
los sitios, esperamos que sin conflictos!
|
||||||
|
|
||||||
|
## Plantillas
|
||||||
|
|
||||||
|
Las plantillas son plantillas Jekyll adaptadas a Sutty. Vamos a empezar
|
||||||
|
adaptando las que estén disponibles en <https://jekyllthemes.org/> y
|
||||||
|
otras fuentes, agregando features de Sutty y simplificando donde haga
|
||||||
|
falta (algunas plantillas tienen requisitos extraños).
|
||||||
|
|
||||||
|
Las plantillas se instalan como gemas en los sitios, de forma que
|
||||||
|
podemos cambiarla desde las opciones del sitio luego.
|
14
test/factories/rol.rb
Normal file
14
test/factories/rol.rb
Normal file
|
@ -0,0 +1,14 @@
|
||||||
|
# frozen_string_literal: true
|
||||||
|
|
||||||
|
FactoryBot.define do
|
||||||
|
factory :rol do
|
||||||
|
usuarie
|
||||||
|
site
|
||||||
|
rol { 'usuarie' }
|
||||||
|
temporal { false }
|
||||||
|
|
||||||
|
factory :rol_invitade do
|
||||||
|
rol { 'invitade' }
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
7
test/factories/site.rb
Normal file
7
test/factories/site.rb
Normal file
|
@ -0,0 +1,7 @@
|
||||||
|
# frozen_string_literal: true
|
||||||
|
|
||||||
|
FactoryBot.define do
|
||||||
|
factory :site do
|
||||||
|
name { SecureRandom.hex }
|
||||||
|
end
|
||||||
|
end
|
9
test/factories/usuarie.rb
Normal file
9
test/factories/usuarie.rb
Normal file
|
@ -0,0 +1,9 @@
|
||||||
|
# frozen_string_literal: true
|
||||||
|
|
||||||
|
FactoryBot.define do
|
||||||
|
factory :usuarie do
|
||||||
|
email { SecureRandom.hex + '@sutty.nl' }
|
||||||
|
password { SecureRandom.hex }
|
||||||
|
confirmed_at { Date.today }
|
||||||
|
end
|
||||||
|
end
|
|
@ -4,8 +4,12 @@ require File.expand_path('../config/environment', __dir__)
|
||||||
require 'rails/test_help'
|
require 'rails/test_help'
|
||||||
require 'open3'
|
require 'open3'
|
||||||
|
|
||||||
|
# rubocop:disable Style/ClassAndModuleChildren
|
||||||
class ActiveSupport::TestCase
|
class ActiveSupport::TestCase
|
||||||
|
include FactoryBot::Syntax::Methods
|
||||||
# Resetear el repositorio a su estado original antes de leerlo
|
# Resetear el repositorio a su estado original antes de leerlo
|
||||||
|
#
|
||||||
|
# TODO mover a Site.reset! cuando empecemos a trabajar con git
|
||||||
def reset_git_repo(path)
|
def reset_git_repo(path)
|
||||||
Dir.chdir(path) do
|
Dir.chdir(path) do
|
||||||
Open3.popen3('git reset --hard') do |_, _, _, thread|
|
Open3.popen3('git reset --hard') do |_, _, _, thread|
|
||||||
|
@ -15,3 +19,4 @@ class ActiveSupport::TestCase
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
# rubocop:enable Style/ClassAndModuleChildren
|
||||||
|
|
Loading…
Reference in a new issue