Skip to content

Instantly share code, notes, and snippets.

@vdayanand
Created March 18, 2021 10:04
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save vdayanand/05f01dea350b1c8223a3edde9eac073a to your computer and use it in GitHub Desktop.
Save vdayanand/05f01dea350b1c8223a3edde9eac073a to your computer and use it in GitHub Desktop.
Make JuliaHub auth token available to Pkg.jl via environment variable
#=
Make JuliaHub auth token available to Pkg.jl via environment variable
Usage:
1. print encoded token: `julia -e 'include("tokenmanager.jl"); encode_token("<Absolute path of token file>")'`
2. Set PkgServer in enviroment variable `JULIA_PKG_SERVER`
3. Set the encoded token string in `JULIA_TOKEN_ENCODED`
4. Place the token in current depot: `julia -e 'include("tokenmanager.jl"); store_token()'`
=#
using Pkg
using Base64
function encode_token(tokenfile::String)
println(Base64.base64encode(read(tokenfile, String)))
end
function get_pkg_server_directory(server)
m = match(r"^\w+://([^\\/]+)(?:$|/)", server)
if m === nothing
error("malformed Pkg server value $server")
end
joinpath(Pkg.depots1(), "servers", String(m.captures[1]))
end
function store_token()
tokenstr = get(ENV, "JULIA_TOKEN_ENCODED", "")
if isempty(tokenstr)
@error "No token configured"
return
end
server = Pkg.pkg_server()
if isempty(server)
@error "Pkg Server not configured"
return
end
server_dir = get_pkg_server_directory(server)
isdir(server_dir) || mkpath(server_dir)
decoded_tokenstr = try
String(Base64.base64decode(tokenstr))
catch ex
@error "Unable to decode encodeded token" ex
return
end
try
Pkg.TOML.parse(decoded_tokenstr)
catch ex
@error "Unable to parse token" ex
return
end
tokenfile = joinpath(server_dir, "auth.toml")
open(tokenfile, "w") do f
write(f, decoded_tokenstr)
end
@info "Token stored at" tokenfile
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment