alojar como servicios ocultos de tor!
This commit is contained in:
parent
e2d6b712e1
commit
874c1a97e8
11 changed files with 145 additions and 10 deletions
|
@ -12,6 +12,31 @@ module Api
|
|||
render json: sites_names + alternative_names + api_names
|
||||
end
|
||||
|
||||
# Sitios con hidden service de Tor
|
||||
#
|
||||
# @return [Array] lista de nombres de sitios sin onion aun
|
||||
def hidden_services
|
||||
render json: DeployHiddenService.where(values: nil).includes(:site).pluck(:name)
|
||||
end
|
||||
|
||||
# Tor va a enviar el onion junto con el nombre del sitio y tenemos
|
||||
# que guardarlo en su deploy_hidden_service.
|
||||
#
|
||||
# @params [String] name
|
||||
# @params [String] onion
|
||||
def add_onion
|
||||
site = Site.find_by(name: params[:name])
|
||||
|
||||
if site
|
||||
usuarie = GitAuthor.new email: 'tor@' + Site.domain, name: 'Tor'
|
||||
service = SiteService.new site: site, usuarie: usuarie,
|
||||
params: params
|
||||
service.add_onion
|
||||
end
|
||||
|
||||
head :ok
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
# Nombres de los sitios
|
||||
|
|
18
app/models/deploy_hidden_service.rb
Normal file
18
app/models/deploy_hidden_service.rb
Normal file
|
@ -0,0 +1,18 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
# Genera una versión onion
|
||||
class DeployHiddenService < DeployWww
|
||||
def deploy
|
||||
return true if fqdn.blank?
|
||||
|
||||
super
|
||||
end
|
||||
|
||||
def fqdn
|
||||
values[:onion]
|
||||
end
|
||||
|
||||
def url
|
||||
'http://' + fqdn
|
||||
end
|
||||
end
|
|
@ -9,7 +9,7 @@ class Site < ApplicationRecord
|
|||
|
||||
# TODO: Hacer que los diferentes tipos de deploy se auto registren
|
||||
# @see app/services/site_service.rb
|
||||
DEPLOYS = %i[local www zip].freeze
|
||||
DEPLOYS = %i[local www zip hidden_service].freeze
|
||||
|
||||
validates :name, uniqueness: true, hostname: {
|
||||
allow_root_label: true
|
||||
|
|
|
@ -36,7 +36,7 @@ SiteService = Struct.new(:site, :usuarie, :params, keyword_init: true) do
|
|||
end
|
||||
|
||||
def build_deploys
|
||||
Site::DEPLOYS.map { |deploy| "Deploy#{deploy.capitalize}" }
|
||||
Site::DEPLOYS.map { |deploy| "Deploy#{deploy.to_s.camelcase}" }
|
||||
.each do |deploy|
|
||||
next if site.deploys.find_by type: deploy
|
||||
|
||||
|
@ -44,6 +44,23 @@ SiteService = Struct.new(:site, :usuarie, :params, keyword_init: true) do
|
|||
end
|
||||
end
|
||||
|
||||
# Agregar una dirección oculta de Tor al DeployHiddenService y a la
|
||||
# configuración del Site.
|
||||
def add_onion
|
||||
onion = params[:onion].strip
|
||||
deploy = DeployHiddenService.find_by(site: site)
|
||||
|
||||
return false unless !onion.blank? && deploy
|
||||
|
||||
deploy.values[:onion] = onion
|
||||
deploy.save
|
||||
|
||||
site.config['onion-location'] = onion
|
||||
site.config.write
|
||||
|
||||
commit_config(action: :tor)
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
# Guarda los cambios de la configuración en el repositorio git
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
= "# #{t('.hi')}"
|
||||
= '# ' + t('.hi')
|
||||
\
|
||||
= t('.explanation', fqdn: @deploy_local.site.hostname)
|
||||
\
|
||||
|
|
23
app/views/deploys/_deploy_hidden_service.haml
Normal file
23
app/views/deploys/_deploy_hidden_service.haml
Normal file
|
@ -0,0 +1,23 @@
|
|||
-# Generar un hidden service
|
||||
|
||||
.row
|
||||
.col
|
||||
= deploy.hidden_field :id
|
||||
= deploy.hidden_field :type
|
||||
.custom-control.custom-switch
|
||||
-#
|
||||
El checkbox invierte la lógica de destrucción porque queremos
|
||||
crear el deploy si está activado y destruirlo si está
|
||||
desactivado.
|
||||
= deploy.check_box :_destroy,
|
||||
{ checked: deploy.object.persisted?, class: 'custom-control-input' },
|
||||
'0', '1'
|
||||
= deploy.label :_destroy, class: 'custom-control-label' do
|
||||
%h3= t('.title')
|
||||
= sanitize_markdown t('.help', public_url: deploy.object.site.url),
|
||||
tags: %w[p strong em a]
|
||||
|
||||
- if deploy.object.fqdn
|
||||
= sanitize_markdown t('.help_2', url: deploy.object.url),
|
||||
tags: %w[p strong em a]
|
||||
%hr/
|
|
@ -4,15 +4,17 @@
|
|||
.col
|
||||
= deploy.hidden_field :id
|
||||
= deploy.hidden_field :type
|
||||
%h3
|
||||
|
||||
.custom-control.custom-switch
|
||||
-#
|
||||
El checkbox invierte la lógica de destrucción porque queremos
|
||||
crear el deploy si está activado y destruirlo si está
|
||||
desactivado.
|
||||
= deploy.check_box :_destroy,
|
||||
{ checked: deploy.object.persisted? },
|
||||
{ checked: deploy.object.persisted?, class: 'custom-control-input' },
|
||||
'0', '1'
|
||||
= deploy.label :_destroy, t('.title')
|
||||
= deploy.label :_destroy, class: 'custom-control-label' do
|
||||
%h3= t('.title')
|
||||
= sanitize_markdown t('.help', fqdn: deploy.object.fqdn),
|
||||
tags: %w[p strong em a]
|
||||
%hr/
|
||||
|
|
|
@ -4,15 +4,17 @@
|
|||
.col
|
||||
= deploy.hidden_field :id
|
||||
= deploy.hidden_field :type
|
||||
%h3
|
||||
|
||||
.custom-control.custom-switch
|
||||
-#
|
||||
El checkbox invierte la lógica de destrucción porque queremos
|
||||
crear el deploy si está activado y destruirlo si está
|
||||
desactivado.
|
||||
= deploy.check_box :_destroy,
|
||||
{ checked: deploy.object.persisted? },
|
||||
{ checked: deploy.object.persisted?, class: 'custom-control-input' },
|
||||
'0', '1'
|
||||
= deploy.label :_destroy, t('.title')
|
||||
= deploy.label :_destroy, class: 'custom-control-label' do
|
||||
%h3= t('.title')
|
||||
-# TODO: secar la generación de URLs
|
||||
- name = site.name || t('.ejemplo')
|
||||
= sanitize_markdown t('.help',
|
||||
|
|
|
@ -25,6 +25,7 @@ en:
|
|||
site_service:
|
||||
create: 'Created %{name}'
|
||||
update: 'Updated %{name}'
|
||||
tor: 'Added hidden service location'
|
||||
post_service:
|
||||
created: 'Created "%{title}"'
|
||||
updated: 'Updated "%{title}"'
|
||||
|
@ -74,6 +75,10 @@ en:
|
|||
title: Build ZIP file
|
||||
success: Available for download
|
||||
error: Error
|
||||
deploy_hidden_service:
|
||||
title: Host as Tor Hidden Service
|
||||
success: Success!
|
||||
error: Error
|
||||
help: You can contact us by replying this e-mail
|
||||
maintenance_mailer:
|
||||
notice:
|
||||
|
@ -265,8 +270,25 @@ en:
|
|||
shares a copy of your site.
|
||||
|
||||
It also helps with site archival for historical purposes :)
|
||||
|
||||
ejemplo: 'example'
|
||||
deploy_hidden_service:
|
||||
title: 'Host as Tor Hidden Service'
|
||||
help: |
|
||||
A Hidden Service makes your site available anonymously on the
|
||||
Tor network.
|
||||
|
||||
**Important:** This doesn't mean your site is **entirely
|
||||
anonymous**. Visitors can still access your site publicly at
|
||||
<%{public_url}>.
|
||||
|
||||
[Know more](https://sutty.nl/en/hidden-sites-with-tor/)
|
||||
help_2: |
|
||||
The hidden address for your site is:
|
||||
|
||||
<%{url}>
|
||||
|
||||
Only accessible through [Tor
|
||||
Browser](https://www.torproject.org/download/)
|
||||
stats:
|
||||
index:
|
||||
title: Statistics
|
||||
|
|
|
@ -25,6 +25,7 @@ es:
|
|||
site_service:
|
||||
create: 'Creado %{name}'
|
||||
update: 'Actualizado %{name}'
|
||||
tor: 'Agregada ubicación del servicio oculto'
|
||||
post_service:
|
||||
created: 'Creado "%{title}"'
|
||||
updated: 'Modificado "%{title}"'
|
||||
|
@ -74,6 +75,10 @@ es:
|
|||
title: Generar archivo ZIP
|
||||
success: Disponible para descargar
|
||||
error: Hubo un error
|
||||
deploy_hidden_service:
|
||||
title: Alojar como servicio oculto de Tor
|
||||
success: ¡Éxito!
|
||||
error: Hubo un error
|
||||
help: Por cualquier duda, responde este correo para contactarte con nosotres.
|
||||
maintenance_mailer:
|
||||
notice:
|
||||
|
@ -270,6 +275,24 @@ es:
|
|||
|
||||
También sirve para archivo histórico :)
|
||||
ejemplo: 'ejemplo'
|
||||
deploy_hidden_service:
|
||||
title: 'Alojar como servicio oculto en Tor'
|
||||
help: |
|
||||
Un servicio oculto (_hidden service_) aloja una copia anónima de
|
||||
tu sitio dentro de la red Tor.
|
||||
|
||||
**Atención:** Esto no hace a tu sitio **totalmente anónimo**.
|
||||
Les visitantes todavía podrán acceder a la versión pública de tu
|
||||
sitio a través de <%{public_url}>.
|
||||
|
||||
[Saber más](https://sutty.nl/sitios-ocultos-con-tor/)
|
||||
help_2: |
|
||||
La dirección de tu sitio es esta:
|
||||
|
||||
<%{url}>
|
||||
|
||||
Sólo será accesible a través del [Navegador
|
||||
Tor](https://www.torproject.org/es/download/).
|
||||
stats:
|
||||
index:
|
||||
title: Estadísticas
|
||||
|
|
|
@ -16,6 +16,9 @@ Rails.application.routes.draw do
|
|||
scope module: 'api' do
|
||||
namespace :v1 do
|
||||
resources :csp_reports, only: %i[create]
|
||||
|
||||
get :'sites/hidden_services', to: 'sites#hidden_services'
|
||||
post :'sites/add_onion', to: 'sites#add_onion'
|
||||
resources :sites, only: %i[index], constraints: { site_id: /[a-z0-9\-\.]+/, id: /[a-z0-9\-\.]+/ } do
|
||||
get :'invitades/cookie', to: 'invitades#cookie'
|
||||
post :'posts/:layout', to: 'posts#create'
|
||||
|
|
Loading…
Reference in a new issue