diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..724bbe1 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +compiled/ diff --git a/rmq/client.rkt b/rmq/client.rkt new file mode 100644 index 0000000..c09b8ee --- /dev/null +++ b/rmq/client.rkt @@ -0,0 +1,16 @@ +#lang racket/base + +(provide ) + +(require "private/util.rkt") + +(module+ test (require rackunit)) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +(struct client (callback-url-base + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +(define (subscribe! client topic [callback #f] + diff --git a/rmq/private/util.rkt b/rmq/private/util.rkt new file mode 100644 index 0000000..9d1b2f7 --- /dev/null +++ b/rmq/private/util.rkt @@ -0,0 +1,31 @@ +#lang racket/base + +(provide random-hex-string + extend-url-string-query) + +(require (only-in file/sha1 bytes->hex-string)) +(require (only-in racket/random crypto-random-bytes)) +(require net/url) + +(module+ test (require rackunit)) + +(define (random-hex-string half-length) + (bytes->hex-string (crypto-random-bytes half-length))) + +(define (extend-url-string-query urlstr extension) + (define u (string->url urlstr)) + (url->string (struct-copy url u [query (append (url-query u) extension)]))) + +(module+ test + (check-equal? (extend-url-string-query "http://localhost/" '((a . "hi"))) + "http://localhost/?a=hi") + (check-equal? (extend-url-string-query "http://localhost/" '()) + "http://localhost/") + (check-equal? (extend-url-string-query "http://localhost?foo=bar" '()) + "http://localhost?foo=bar") + (check-equal? (extend-url-string-query "http://localhost/?foo=bar" '()) + "http://localhost/?foo=bar") + (check-equal? (extend-url-string-query "http://localhost?foo=bar" '((a . "hi"))) + "http://localhost?foo=bar&a=hi") + (check-equal? (extend-url-string-query "http://localhost/?foo=bar" '((a . "hi"))) + "http://localhost/?foo=bar&a=hi")) diff --git a/rmq/main.rkt b/rmq/server.rkt similarity index 98% rename from rmq/main.rkt rename to rmq/server.rkt index d4276b8..13b9072 100644 --- a/rmq/main.rkt +++ b/rmq/server.rkt @@ -1,16 +1,18 @@ #lang syndicate/actor +(provide ) + (require racket/format) (require racket/set) -(require racket/random) (require net/url) (require net/uri-codec) -(require file/sha1) (require/activate syndicate/drivers/timer) (require/activate syndicate/drivers/web) (require syndicate/protocol/advertise) +(require "private/util.rkt") + (module+ test (require rackunit)) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; @@ -181,7 +183,7 @@ (define (subscription-change-validate mode lease topic callback) (define u (string->url callback)) (define res (url->resource u)) - (define challenge (bytes->hex-string (crypto-random-bytes 16))) + (define challenge (random-hex-string 16)) (define id (gensym 'validation)) (define extra-query (list* (cons 'hub.mode mode) (cons 'hub.topic topic)