Compare commits
12 Commits
fc2bec6246
...
v0.10.0
| Author | SHA1 | Date | |
|---|---|---|---|
|
8f7994d82e
|
|||
|
a7d0e71ab6
|
|||
|
27d9f73c61
|
|||
|
ed3de8b16f
|
|||
|
d7b4c67953
|
|||
| 7489d4a32f | |||
|
ac77e5b7c1
|
|||
|
e544c28105
|
|||
|
4909dac5c2
|
|||
| 3cf4348695 | |||
|
af3da0a26c
|
|||
|
2d32320c7d
|
@@ -25,7 +25,6 @@ class Admin::SettingsController < Admin::BaseController
|
|||||||
end
|
end
|
||||||
|
|
||||||
changed_keys.each do |key|
|
changed_keys.each do |key|
|
||||||
|
|
||||||
Setting.send("#{key}=", clean_param(key))
|
Setting.send("#{key}=", clean_param(key))
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
@@ -42,7 +41,7 @@ class Admin::SettingsController < Admin::BaseController
|
|||||||
|
|
||||||
def clean_param(key)
|
def clean_param(key)
|
||||||
if Setting.get_field(key)[:type] == :string
|
if Setting.get_field(key)[:type] == :string
|
||||||
setting_params[key].strip!
|
setting_params[key].strip
|
||||||
else
|
else
|
||||||
setting_params[key]
|
setting_params[key]
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
class LnurlpayController < ApplicationController
|
class LnurlpayController < ApplicationController
|
||||||
before_action :check_service_available
|
before_action :check_service_available
|
||||||
before_action :find_user
|
before_action :find_user
|
||||||
before_action :set_cors_access_control_headers, only: [:invoice]
|
before_action :set_cors_access_control_headers
|
||||||
|
|
||||||
MIN_SATS = 10
|
MIN_SATS = 10
|
||||||
MAX_SATS = 1_000_000
|
MAX_SATS = 1_000_000
|
||||||
|
|||||||
@@ -1,8 +1,6 @@
|
|||||||
class WebfingerController < ApplicationController
|
class WebfingerController < WellKnownController
|
||||||
before_action :allow_cross_origin_requests, only: [:show]
|
before_action :allow_cross_origin_requests, only: [:show]
|
||||||
|
|
||||||
layout false
|
|
||||||
|
|
||||||
def show
|
def show
|
||||||
resource = params[:resource]
|
resource = params[:resource]
|
||||||
|
|
||||||
@@ -76,7 +74,7 @@ class WebfingerController < ApplicationController
|
|||||||
end
|
end
|
||||||
|
|
||||||
def remotestorage_link
|
def remotestorage_link
|
||||||
auth_url = new_rs_oauth_url(@username)
|
auth_url = new_rs_oauth_url(@username, host: Setting.accounts_domain)
|
||||||
storage_url = "#{Setting.rs_storage_url}/#{@username}"
|
storage_url = "#{Setting.rs_storage_url}/#{@username}"
|
||||||
|
|
||||||
{
|
{
|
||||||
@@ -91,10 +89,4 @@ class WebfingerController < ApplicationController
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
end
|
end
|
||||||
|
|
||||||
def allow_cross_origin_requests
|
|
||||||
return unless Rails.env.development?
|
|
||||||
headers['Access-Control-Allow-Origin'] = "*"
|
|
||||||
headers['Access-Control-Allow-Methods'] = "GET"
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -1,5 +1,8 @@
|
|||||||
class WellKnownController < ApplicationController
|
class WellKnownController < ApplicationController
|
||||||
before_action :require_nostr_enabled, only: [ :nostr ]
|
before_action :require_nostr_enabled, only: [ :nostr ]
|
||||||
|
before_action :allow_cross_origin_requests, only: [ :nostr ]
|
||||||
|
|
||||||
|
layout false
|
||||||
|
|
||||||
def nostr
|
def nostr
|
||||||
http_status :unprocessable_entity and return if params[:name].blank?
|
http_status :unprocessable_entity and return if params[:name].blank?
|
||||||
@@ -7,8 +10,14 @@ class WellKnownController < ApplicationController
|
|||||||
relay_url = Setting.nostr_relay_url.presence
|
relay_url = Setting.nostr_relay_url.presence
|
||||||
|
|
||||||
if params[:name] == "_"
|
if params[:name] == "_"
|
||||||
# pubkey for the primary domain without a username (e.g. kosmos.org)
|
if domain == Setting.primary_domain
|
||||||
res = { names: { "_": Setting.nostr_public_key } }
|
# pubkey for the primary domain without a username (e.g. kosmos.org)
|
||||||
|
res = { names: { "_": Setting.nostr_public_key_primary_domain.presence || Setting.nostr_public_key } }
|
||||||
|
else
|
||||||
|
# pubkey for the akkounts domain without a username (e.g. accounts.kosmos.org)
|
||||||
|
res = { names: { "_": Setting.nostr_public_key } }
|
||||||
|
end
|
||||||
|
|
||||||
res[:relays] = { "_" => [ relay_url ] } if relay_url
|
res[:relays] = { "_" => [ relay_url ] } if relay_url
|
||||||
else
|
else
|
||||||
@user = User.where(cn: params[:name], ou: domain).first
|
@user = User.where(cn: params[:name], ou: domain).first
|
||||||
@@ -30,4 +39,9 @@ class WellKnownController < ApplicationController
|
|||||||
def require_nostr_enabled
|
def require_nostr_enabled
|
||||||
http_status :not_found unless Setting.nostr_enabled?
|
http_status :not_found unless Setting.nostr_enabled?
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def allow_cross_origin_requests
|
||||||
|
headers['Access-Control-Allow-Origin'] = "*"
|
||||||
|
headers['Access-Control-Allow-Methods'] = "GET"
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -12,6 +12,9 @@ module Settings
|
|||||||
field :nostr_public_key, type: :string,
|
field :nostr_public_key, type: :string,
|
||||||
default: ENV["NOSTR_PUBLIC_KEY"].presence
|
default: ENV["NOSTR_PUBLIC_KEY"].presence
|
||||||
|
|
||||||
|
field :nostr_public_key_primary_domain, type: :string,
|
||||||
|
default: ENV["NOSTR_PUBLIC_KEY_PRIMARY_DOMAIN"].presence
|
||||||
|
|
||||||
field :nostr_relay_url, type: :string,
|
field :nostr_relay_url, type: :string,
|
||||||
default: ENV["NOSTR_RELAY_URL"].presence
|
default: ENV["NOSTR_RELAY_URL"].presence
|
||||||
|
|
||||||
|
|||||||
@@ -30,7 +30,8 @@
|
|||||||
<% Setting.available_services.each do |option| %>
|
<% Setting.available_services.each do |option| %>
|
||||||
<div class="md:inline-block">
|
<div class="md:inline-block">
|
||||||
<%= f.check_box :default_services,
|
<%= f.check_box :default_services,
|
||||||
{ multiple: true, checked: Setting.default_services.include?(option) },
|
{ multiple: true, checked: Setting.default_services.include?(option),
|
||||||
|
class: "h-4 w-4 rounded border-gray-300 text-blue-600 focus:ring-blue-600 mr-0.5" },
|
||||||
option, nil %>
|
option, nil %>
|
||||||
<%= f.label "default_services_#{option.parameterize}", service_human_name(option) %>
|
<%= f.label "default_services_#{option.parameterize}", service_human_name(option) %>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -19,6 +19,11 @@
|
|||||||
title: "Public key",
|
title: "Public key",
|
||||||
description: "The corresponding public key of the accounts service"
|
description: "The corresponding public key of the accounts service"
|
||||||
) %>
|
) %>
|
||||||
|
<%= render FormElements::FieldsetResettableSettingComponent.new(
|
||||||
|
key: :nostr_public_key_primary_domain,
|
||||||
|
title: "Public key for primary domain (NIP-05)",
|
||||||
|
description: "(optional) A different pubkey to announce for the _@#{Setting.primary_domain} Nostr address"
|
||||||
|
) %>
|
||||||
<%= render FormElements::FieldsetResettableSettingComponent.new(
|
<%= render FormElements::FieldsetResettableSettingComponent.new(
|
||||||
key: :nostr_relay_url,
|
key: :nostr_relay_url,
|
||||||
title: "Relay URL",
|
title: "Relay URL",
|
||||||
|
|||||||
@@ -11,7 +11,7 @@
|
|||||||
"postcss-preset-env": "^7.8.3",
|
"postcss-preset-env": "^7.8.3",
|
||||||
"tailwindcss": "^3.2.4"
|
"tailwindcss": "^3.2.4"
|
||||||
},
|
},
|
||||||
"version": "0.9.0",
|
"version": "0.10.0",
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"build:css:tailwind": "tailwindcss --postcss -i ./app/assets/stylesheets/application.tailwind.css -o ./app/assets/builds/application.css",
|
"build:css:tailwind": "tailwindcss --postcss -i ./app/assets/stylesheets/application.tailwind.css -o ./app/assets/builds/application.css",
|
||||||
"build:css": "yarn run build:css:tailwind"
|
"build:css": "yarn run build:css:tailwind"
|
||||||
|
|||||||
@@ -92,7 +92,13 @@ RSpec.describe "WebFinger", type: :request do
|
|||||||
expect(rs_link["href"]).to eql("#{Setting.rs_storage_url}/tony")
|
expect(rs_link["href"]).to eql("#{Setting.rs_storage_url}/tony")
|
||||||
|
|
||||||
oauth_url = rs_link["properties"]["http://tools.ietf.org/html/rfc6749#section-4.2"]
|
oauth_url = rs_link["properties"]["http://tools.ietf.org/html/rfc6749#section-4.2"]
|
||||||
expect(oauth_url).to eql("http://www.example.com/rs/oauth/tony")
|
expect(oauth_url).to eql("http://accounts.kosmos.org/rs/oauth/tony")
|
||||||
|
end
|
||||||
|
|
||||||
|
it "returns CORS headers" do
|
||||||
|
get "/.well-known/nostr.json?name=bobdylan"
|
||||||
|
expect(response.headers['Access-Control-Allow-Origin']).to eq("*")
|
||||||
|
expect(response.headers['Access-Control-Allow-Methods']).to eq('GET')
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|||||||
@@ -46,6 +46,12 @@ RSpec.describe "Well-known URLs", type: :request do
|
|||||||
expect(res["names"]["bobdylan"]).to eq(user.nostr_pubkey)
|
expect(res["names"]["bobdylan"]).to eq(user.nostr_pubkey)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
it "returns CORS headers" do
|
||||||
|
get "/.well-known/nostr.json?name=bobdylan"
|
||||||
|
expect(response.headers['Access-Control-Allow-Origin']).to eq("*")
|
||||||
|
expect(response.headers['Access-Control-Allow-Methods']).to eq('GET')
|
||||||
|
end
|
||||||
|
|
||||||
context "without relay configured" do
|
context "without relay configured" do
|
||||||
before do
|
before do
|
||||||
Setting.nostr_relay_url = ""
|
Setting.nostr_relay_url = ""
|
||||||
@@ -73,10 +79,36 @@ RSpec.describe "Well-known URLs", type: :request do
|
|||||||
end
|
end
|
||||||
|
|
||||||
describe "placeholder username for domain's own pubkey" do
|
describe "placeholder username for domain's own pubkey" do
|
||||||
it "returns the configured nostr pubkey" do
|
describe "for primary domain" do
|
||||||
get "/.well-known/nostr.json?name=_"
|
context "no different pubkey configured for primary domain" do
|
||||||
res = JSON.parse(response.body)
|
it "returns the akkounts nostr pubkey" do
|
||||||
expect(res["names"]["_"]).to eq(Setting.nostr_public_key)
|
get "/.well-known/nostr.json?name=_"
|
||||||
|
res = JSON.parse(response.body)
|
||||||
|
expect(res["names"]["_"]).to eq("bdd76ce2934b2f591f9fad2ebe9da18f20d2921de527494ba00eeaa0a0efadcf")
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
context "different pubkey configured for primary domain" do
|
||||||
|
before do
|
||||||
|
Setting.nostr_public_key_primary_domain = "b3e8f62fbe41217ffc0aa1e178d297339932d8ba4f46d9c7df3b61575e78fecc"
|
||||||
|
end
|
||||||
|
|
||||||
|
it "returns the primary domain's nostr pubkey" do
|
||||||
|
get "/.well-known/nostr.json?name=_"
|
||||||
|
res = JSON.parse(response.body)
|
||||||
|
expect(res["names"]["_"]).to eq("b3e8f62fbe41217ffc0aa1e178d297339932d8ba4f46d9c7df3b61575e78fecc")
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
describe "for akkounts domain" do
|
||||||
|
it "returns the configured nostr pubkey" do
|
||||||
|
headers = { "X-Forwarded-Host" => "accounts.kosmos.org" }
|
||||||
|
get "/.well-known/nostr.json?name=_"
|
||||||
|
|
||||||
|
res = JSON.parse(response.body)
|
||||||
|
expect(res["names"]["_"]).to eq("bdd76ce2934b2f591f9fad2ebe9da18f20d2921de527494ba00eeaa0a0efadcf")
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
context "with relay configured" do
|
context "with relay configured" do
|
||||||
|
|||||||
Reference in New Issue
Block a user