Skip to content

Commit 7baa8bd

Browse files
committed
Merge remote-tracking branch 'upstream/master' into master
2 parents 903c0a2 + d1de22b commit 7baa8bd

File tree

13 files changed

+184
-62
lines changed

13 files changed

+184
-62
lines changed

.gitignore

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,4 @@
11
/*.dylib
22
/src/*.o
3+
Dockerfile
4+
jwt_io.so

.gitlab-ci.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
image: registry.gitlab.com/canbican/jwt_io:7.7.16.1libjwt
1+
image: registry.gitlab.com/canbican/jwt_io:0.0.3
22

33
test:
44
script:

.gitlab-ci.yml.in

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
image: registry.gitlab.com/canbican/jwt_io:VERSION
2+
3+
test:
4+
script:
5+
- /sbin/ldconfig
6+
- make check

Dockerfile

Lines changed: 0 additions & 6 deletions
This file was deleted.

Dockerfile.in

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
FROM swipl:DOCKER_SWIPL
2+
LABEL maintainer "Can Bican <can@bican.net>"
3+
LABEL version="VERSION"
4+
RUN apt-get update
5+
RUN apt-get install -qq -y gcc make dh-autoreconf wget pkg-config libssl-dev git libgpm2
6+
RUN wget https://github.com/akheron/jansson/archive/vDOCKER_JANSSON.tar.gz && tar xvzfp vDOCKER_JANSSON.tar.gz && cd jansson-DOCKER_JANSSON && autoreconf -i && ./configure && make && make install && cd .. && rm -rf jansson-DOCKER_JANSSON vDOCKER_JANSSON.tar.gz
7+
RUN wget https://github.com/benmcollins/libjwt/archive/vDOCKER_LIBJWT.tar.gz && tar xvzfp vDOCKER_LIBJWT.tar.gz && cd libjwt-DOCKER_LIBJWT && autoreconf -i && ./configure && make && make install && cd .. && rm -rf vDOCKER_LIBJWT.tar.gz libjwt-DOCKER_LIBJWT

Makefile

Lines changed: 19 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,10 @@
11
version := $(shell swipl -s pack.pl -g 'version(X), writeln(X).' -t halt)
22
packname := $(shell basename $$(pwd))
33

4+
DOCKER_SWIPL=8.1.12
5+
DOCKER_JANSSON=2.12
6+
DOCKER_LIBJWT=1.12.0
7+
48
JWTLDFLAGS=$(shell pkg-config --libs libjwt)
59
JWTCFLAGS=$(shell pkg-config --cflags libjwt)
610
SSLLDFLAGS=-lssl -lcrypto
@@ -34,12 +38,11 @@ install:
3438
FORCE:
3539

3640
clean:
37-
rm -f src/$(LIBNAME).o $(LIBNAME).$(LIBEXT)
38-
-rmdir src
41+
rm -f src/$(LIBNAME).o $(LIBNAME).$(LIBEXT) Dockerfile .gitlab-ci.yml
3942

4043
make_tgz: FORCE
4144
rm -f ../$(packname)-$(version).tgz
42-
find ../$(packname) -name '*.pl' -o -name '*.plt' -o -name '*.pem' -o -name 'rs.*' -o -name 'test_file*' -o -name LICENSE -o -name Makefile -o -name '*.c' -o -name '*.h'|sed -e 's/^...//'|xargs tar cvzfp ../$(packname)-$(version).tgz -C ..
45+
find ../$(packname) -name '*.pl' -o -name '*.plt' -o -name '*.pem' -o -name 'rs*' -o -name 'test_file*' -o -name LICENSE -o -name Makefile -o -name '*.c' -o -name '*.h'|sed -e 's/^...//'|xargs tar cvzfp ../$(packname)-$(version).tgz -C ..
4346

4447
release: check make_tgz clean releasebranch
4548
mv -n ../$(packname)-$(version).tgz .
@@ -49,7 +52,17 @@ release: check make_tgz clean releasebranch
4952
releasebranch: FORCE
5053
git checkout releases
5154

52-
dockerimage: FORCE
53-
docker build -t registry.gitlab.com/canbican/jwt_io .
54-
docker push registry.gitlab.com/canbican/jwt_io
55+
dockerimage: FORCE Dockerfile
56+
docker build -t registry.gitlab.com/canbican/jwt_io:$(version) .
57+
docker push registry.gitlab.com/canbican/jwt_io:$(version)
58+
59+
Dockerfile: Dockerfile.in
60+
sed -e 's/DOCKER_SWIPL/$(DOCKER_SWIPL)/g' \
61+
-e 's/DOCKER_JANSSON/$(DOCKER_JANSSON)/g' \
62+
-e 's/DOCKER_LIBJWT/$(DOCKER_LIBJWT)/g' \
63+
-e 's/VERSION/$(version)/g' \
64+
< $< > $@
5565

66+
.gitlab-ci.yml: .gitlab-ci.yml.in
67+
sed -e 's/VERSION/$(version)/g' \
68+
< $< > $@

keys/rs2.key

Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
-----BEGIN OPENSSH PRIVATE KEY-----
2+
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
48+
dT8ZN8t4vHUAAAALY2FuQGNhbmRlc2s=
49+
-----END OPENSSH PRIVATE KEY-----

keys/rs2.key.pub

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQD4AhBo93fEkEg2DiL1zfTKrcO0Trx41UqNX8TWKlNOteVYABzVdfD1PA69h1FfLTILMLQ9PhLqbuQoN1L2R8XT6a6ug+SNjtCA/K5EbuMkbpusQOFaunyCkcwzv8iTFXTxPsiJ4WYCZ+kFTDCCUkjC+6eSQRVQeSEgXA13XiqLnLs6HnW0gAVokeIySgFjSXOnWKkcP7rA74UwU/djCsFdRXzKuadM0Qk9UCmvZ82PJjd9IdzL282RvnIfHJ3pg2JKaKRMmSEAtOaG1iMeRGPOnwVmeyzdBF/d0HYBxALmFlGJPOuO9Vanclf3INRk5yjDgZKoS6ufWzOxagr+gVCizhke3cnoXhcRG5Dc3JtCOjmcl6IoPUwD1peIPTzz+seci7Yyhm5ciFAdkHR9Zd2C6fv2HhQSsVo7yD3k8cekodb1lvWNmT2PN5Td5ivKMNVv/49JS5o+6VOalNrajadVvznTo9Uu+tAYdZbPcqcaVBF7MEiKPbUusYy9+8GiD0DzzdfwhqCiM6mS/XezhytfXubZKSpvAkkQ1tKYR8/9vSCHCVJTtIdgbq29S0Yodu9lA/wuj52f6YfMW2J1WwgUQPfC12bQXLr2isey4mvXFe2+MZKJ15rWLR+YPPVj9bmnoBm5GEFlkzOOD/yJ7s4wlTN47Rgjuswt1VBikxPI+w== can@candesk

pack.pl

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,6 @@
11
name(jwt_io).
22
title('JWT implementation').
3-
version('0.0.2').
3+
version('0.0.3').
44
author('Can Bican','can@bican.net').
5+
author('Robin De Rooij','robin@terminusdb.com').
6+
maintainer('Can Bican','can@bican.net').

src/jwt_io.c

Lines changed: 55 additions & 48 deletions
Original file line numberDiff line numberDiff line change
@@ -16,30 +16,33 @@ static void get_pl_arg_str(char *predicate_name, char *term_name, term_t term, c
1616
}
1717
}
1818

19-
static foreign_t pl_jwt_encode(term_t in, term_t out, term_t key_term, term_t algorithm, term_t key_id) {
20-
jwt_t *jwt;
21-
char *result, *grants, *alg_str, *key, *kid;
22-
int rval;
19+
static foreign_t
20+
pl_jwt_encode(term_t in, term_t out, term_t key_term, term_t algorithm, term_t key_id)
21+
{
22+
jwt_t *jwt;
23+
char *result, *grants, *alg_str, *key, *kid;
24+
int rval;
2325

24-
get_pl_arg_str("jwt_encode_from_string/4", "in", in, &grants);
25-
get_pl_arg_str("jwt_encode_from_string/4", "key", key_term, &key);
26-
get_pl_arg_str("jwt_encode_from_string/4", "kid", key_id, &kid);
27-
get_pl_arg_str("jwt_encode_from_string/4", "algorithm", algorithm, &alg_str);
28-
jwt_new(&jwt);
29-
jwt_add_grants_json(jwt, grants);
30-
jwt_add_header(jwt, "kid", kid);
31-
jwt_set_alg(jwt, jwt_str_alg(alg_str), (const unsigned char *)key, strlen(key));
32-
result = jwt_encode_str(jwt);
33-
rval = PL_unify_atom_chars(out, result);
34-
free(result);
35-
jwt_free(jwt);
36-
return rval;
26+
get_pl_arg_str("jwt_encode_from_string/5", "in", in, &grants);
27+
get_pl_arg_str("jwt_encode_from_string/5", "key", key_term, &key);
28+
get_pl_arg_str("jwt_encode_from_string/5", "kid", key_id, &kid);
29+
get_pl_arg_str("jwt_encode_from_string/5", "algorithm", algorithm, &alg_str);
30+
jwt_new(&jwt);
31+
jwt_add_grants_json(jwt, grants);
32+
jwt_add_header(jwt, "kid", kid);
33+
jwt_set_alg(jwt, jwt_str_alg(alg_str), (const unsigned char *)key, strlen(key));
34+
result = jwt_encode_str(jwt);
35+
rval = PL_unify_atom_chars(out, result);
36+
free(result);
37+
jwt_free(jwt);
38+
return rval;
3739
}
3840

39-
static foreign_t pl_jwt_parse_head(term_t in, term_t head_term) {
40-
char *input, *head_payload;
41-
jwt_t *jwt;
42-
int jwt_result;
41+
static foreign_t
42+
pl_jwt_parse_head(term_t in, term_t head_term) {
43+
char *input, *head_payload;
44+
jwt_t *jwt;
45+
int jwt_result;
4346
get_pl_arg_str("jwt_encode_from_string/4", "in", in, &input);
4447

4548
jwt_result = jwt_decode(&jwt, input, NULL, 0);
@@ -55,34 +58,38 @@ static foreign_t pl_jwt_parse_head(term_t in, term_t head_term) {
5558
}
5659
}
5760

58-
static foreign_t pl_jwt_decode(term_t in, term_t out_payload, term_t out_algorithm, term_t in_key) {
59-
char *input, *key, *payload;
60-
const char *algorithm;
61-
int jwt_result;
62-
jwt_t *jwt;
61+
static foreign_t
62+
pl_jwt_decode(term_t in, term_t out_payload, term_t out_algorithm, term_t in_key)
63+
{
64+
char *input, *key, *payload;
65+
const char *algorithm;
66+
int jwt_result;
67+
jwt_t *jwt;
6368

64-
get_pl_arg_str("jwt_encode_from_string/4", "in", in, &input);
65-
get_pl_arg_str("jwt_encode_from_string/4", "key", in_key, &key);
66-
if (key == NULL || !strcmp("", key)) {
67-
jwt_result = jwt_decode(&jwt, input, NULL, 0);
68-
} else {
69-
jwt_result = jwt_decode(&jwt, input, (const unsigned char *)key, strlen(key));
70-
}
71-
if (!jwt_result) {
72-
payload = jwt_get_grants_json(jwt, NULL);
73-
algorithm = jwt_alg_str(jwt_get_alg(jwt));
74-
(void) PL_unify_atom_chars(out_payload, payload);
75-
(void) PL_unify_atom_chars(out_algorithm, algorithm);
76-
free(payload);
77-
jwt_free(jwt);
78-
PL_succeed;
79-
} else {
80-
PL_fail;
81-
}
69+
get_pl_arg_str("jwt_encode_from_string/4", "in", in, &input);
70+
get_pl_arg_str("jwt_encode_from_string/4", "key", in_key, &key);
71+
if (key == NULL || !strcmp("", key)) {
72+
jwt_result = jwt_decode(&jwt, input, NULL, 0);
73+
} else {
74+
jwt_result = jwt_decode(&jwt, input, (const unsigned char *)key, strlen(key));
75+
}
76+
if (!jwt_result) {
77+
payload = jwt_get_grants_json(jwt, NULL);
78+
algorithm = jwt_alg_str(jwt_get_alg(jwt));
79+
(void) PL_unify_atom_chars(out_payload, payload);
80+
(void) PL_unify_atom_chars(out_algorithm, algorithm);
81+
free(payload);
82+
jwt_free(jwt);
83+
PL_succeed;
84+
} else {
85+
PL_fail;
86+
}
8287
}
8388

84-
install_t install(void) {
85-
PL_register_foreign("jwt_parse_head", 2, pl_jwt_parse_head, 0);
86-
PL_register_foreign("jwt_encode_from_string", 5, pl_jwt_encode, 0);
87-
PL_register_foreign("jwt_decode_from_string", 4, pl_jwt_decode, 0);
89+
install_t
90+
install(void)
91+
{
92+
PL_register_foreign("jwt_parse_head", 2, pl_jwt_parse_head, 0);
93+
PL_register_foreign("jwt_encode_from_string", 5, pl_jwt_encode, 0);
94+
PL_register_foreign("jwt_decode_from_string", 4, pl_jwt_decode, 0);
8895
}

0 commit comments

Comments
 (0)