All checks were successful
continuous-integration/drone/push Build is passing
So we don't have to consider it for reverse proxies etc.
114 lines
3.5 KiB
Ruby
114 lines
3.5 KiB
Ruby
require 'rails_helper'
|
|
|
|
RSpec.describe "Well-known URLs", type: :request do
|
|
describe "GET /nostr" do
|
|
describe "without username param" do
|
|
it "returns a 422 status" do
|
|
get "/.well-known/nostr.json"
|
|
expect(response).to have_http_status(:unprocessable_entity)
|
|
end
|
|
end
|
|
|
|
describe "non-existent user" do
|
|
it "returns a 404 status" do
|
|
get "/.well-known/nostr.json?name=bob"
|
|
expect(response).to have_http_status(:not_found)
|
|
end
|
|
end
|
|
|
|
describe "user does not have a nostr pubkey configured" do
|
|
let(:user) { create :user, cn: 'spongebob', ou: 'kosmos.org' }
|
|
|
|
before do
|
|
allow_any_instance_of(User).to receive(:ldap_entry)
|
|
.and_return({ nostr_key: nil })
|
|
end
|
|
|
|
it "returns a 404 status" do
|
|
get "/.well-known/nostr.json?name=spongebob"
|
|
expect(response).to have_http_status(:not_found)
|
|
end
|
|
end
|
|
|
|
describe "user with nostr pubkey" do
|
|
let(:user) { create :user, cn: 'bobdylan', ou: 'kosmos.org' }
|
|
before do
|
|
user.save!
|
|
allow_any_instance_of(User).to receive(:nostr_pubkey)
|
|
.and_return('438d35a6750d0dd6b75d032af8a768aad76b62f0c70ecb45f9c4d9e63540f7f4')
|
|
end
|
|
|
|
it "returns a NIP-05 response" do
|
|
get "/.well-known/nostr.json?name=bobdylan"
|
|
expect(response).to have_http_status(:ok)
|
|
res = JSON.parse(response.body)
|
|
expect(res["names"].keys.size).to eq(1)
|
|
expect(res["names"]["bobdylan"]).to eq(user.nostr_pubkey)
|
|
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
|
|
before do
|
|
Setting.nostr_relay_url = ""
|
|
end
|
|
|
|
it "does not include a recommended relay" do
|
|
get "/.well-known/nostr.json?name=bobdylan"
|
|
res = JSON.parse(response.body)
|
|
expect(res["relays"]).to be_nil
|
|
end
|
|
end
|
|
|
|
context "with relay configured" do
|
|
before do
|
|
Setting.nostr_relay_url = "wss://nostr.kosmos.org"
|
|
end
|
|
|
|
it "includes a recommended relay" do
|
|
get "/.well-known/nostr.json?name=bobdylan"
|
|
res = JSON.parse(response.body)
|
|
expect(res["relays"][user.nostr_pubkey].length).to eq(1)
|
|
expect(res["relays"][user.nostr_pubkey].first).to eq("wss://nostr.kosmos.org")
|
|
end
|
|
end
|
|
end
|
|
|
|
describe "placeholder username for domain's own pubkey" do
|
|
it "returns the configured nostr pubkey" do
|
|
get "/.well-known/nostr.json?name=_"
|
|
res = JSON.parse(response.body)
|
|
expect(res["names"]["_"]).to eq(Setting.nostr_public_key)
|
|
end
|
|
|
|
context "with relay configured" do
|
|
before do
|
|
Setting.nostr_relay_url = "wss://nostr.kosmos.org"
|
|
end
|
|
|
|
it "returns the pubkey and relay" do
|
|
get "/.well-known/nostr.json?name=_"
|
|
res = JSON.parse(response.body)
|
|
expect(res["relays"]["_"].length).to eq(1)
|
|
expect(res["relays"]["_"].first).to eq("wss://nostr.kosmos.org")
|
|
end
|
|
end
|
|
|
|
context "nostr service integration not enabled" do
|
|
before do
|
|
Setting.nostr_enabled = false
|
|
end
|
|
|
|
it "returns a 404 status" do
|
|
get "/.well-known/nostr.json?name=_"
|
|
expect(response).to have_http_status(:not_found)
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|