Rename from RecycledCloud / management to Meta

This commit is contained in:
Timothée Floure 2021-04-12 15:44:12 +02:00
parent 8e5ba0269f
commit 82c12bd234
Signed by: tfloure
GPG key ID: 4502C902C00A1E12
86 changed files with 264 additions and 260 deletions

View file

@ -5,33 +5,33 @@ packages:
- postgresql-contrib
- docker
artifacts:
- management/_build/prod/rel/recycledcloud.tar.gz
- meta/_build/prod/rel/meta.tar.gz
sources:
- https://code.recycled.cloud/e-Durable/management.git
- https://code.recycled.cloud/RecycledCloud/met.git
tasks:
- setup: |
sudo service postgresql setup
sudo service postgresql start
sudo service docker start
cd management
cd meta
mix local.hex --force
mix local.rebar --force
mix deps.get
- build: |
cd management
cd meta
MIX_ENV=test mix deps.compile
MIX_ENV=test mix compile
- test: |
cd management
cd meta
sudo docker pull code.ungleich.ch:5050/fnux/e-durable-oci-images/openldap-playground:latest
CALL_CONTAINER_RUNTIME_AS_ROOT=1 LDAP_WAIT_LOOPS=100 MIX_ENV=test mix test
- lint: |
cd management
cd meta
MIX_ENV=test mix credo
- release: |
cd management
cd meta
MIX_ENV=prod mix compile
MIX_ENV=prod mix phx.digest
MIX_ENV=prod mix release
cd _build/prod/rel
tar cvzf recycledcloud.tar.gz recycledcloud/
tar cvzf meta.tar.gz met/

View file

@ -1,3 +1,7 @@
# meta 0.5.0, not yet release
* Rename app from Recycled Cloud / management to Meta
# management 0.4.0, 2021-04-09
* Initial VM dashboard

View file

@ -1,6 +1,6 @@
# Recycled Cloud Management Interface
# Recycled Cloud Management Interface (Meta)
[![builds.sr.ht status](https://builds.sr.ht/~fnux.svg?search=recycledcloud-management)](https://builds.sr.ht/~fnux?search=recycledcloud-management)
[![builds.sr.ht status](https://builds.sr.ht/~fnux.svg?search=recycledcloud-meta)](https://builds.sr.ht/~fnux?search=recycledcloud-meta)
This repository tracks the initial work for a web interface atop the recycled
cloud. It is written in [Elixir](https://elixir-lang.org/), making use of the

View file

@ -7,17 +7,17 @@
# General application configuration
use Mix.Config
config :recycledcloud,
namespace: RecycledCloud,
ecto_repos: [RecycledCloud.Repo],
config :meta,
namespace: Meta,
ecto_repos: [Meta.Repo],
enable_registration: true
# Configures the endpoint
config :recycledcloud, RecycledCloudWeb.Endpoint,
config :meta, MetaWeb.Endpoint,
url: [host: "localhost"],
secret_key_base: "bm4MGjSLcEbL3HEDg2H0LlcJ5d3nIkogyd/PpGW1iXdEbKbtM0N8Ct4Jh/PbsnoS",
render_errors: [view: RecycledCloudWeb.ErrorView, accepts: ~w(html json), layout: false],
pubsub_server: RecycledCloud.PubSub,
render_errors: [view: MetaWeb.ErrorView, accepts: ~w(html json), layout: false],
pubsub_server: Meta.PubSub,
live_view: [signing_salt: "kTyyWZd5"]
# Configures Elixir's Logger

View file

@ -1,10 +1,10 @@
use Mix.Config
# Configure your database
config :recycledcloud, RecycledCloud.Repo,
config :meta, Meta.Repo,
username: "postgres",
password: "postgres",
database: "recycledcloud_dev",
database: "meta_dev",
hostname: "localhost",
show_sensitive_data_on_connection_error: true,
pool_size: 10
@ -15,7 +15,7 @@ config :recycledcloud, RecycledCloud.Repo,
# The watchers configuration can be used to run external
# watchers to your application. For example, we use it
# with webpack to recompile .js and .css sources.
config :recycledcloud, RecycledCloudWeb.Endpoint,
config :meta, MetaWeb.Endpoint,
http: [port: 4000],
debug_errors: true,
code_reloader: true,
@ -47,13 +47,13 @@ config :recycledcloud, RecycledCloudWeb.Endpoint,
# different ports.
# Watch static and templates for browser reloading.
config :recycledcloud, RecycledCloudWeb.Endpoint,
config :meta, MetaWeb.Endpoint,
live_reload: [
patterns: [
~r"priv/static/.*(js|css|png|jpeg|jpg|gif|svg)$",
~r"priv/gettext/.*(po)$",
~r"lib/recycledcloud_web/(live|views)/.*(ex)$",
~r"lib/recycledcloud_web/templates/.*(eex)$"
~r"lib/meta_web/(live|views)/.*(ex)$",
~r"lib/meta_web/templates/.*(eex)$"
]
]
@ -68,11 +68,11 @@ config :phoenix, :stacktrace_depth, 20
config :phoenix, :plug_init_mode, :runtime
# Send emails to local memory for development.
config :recycledcloud, RecycledCloud.Mailer,
config :meta, Meta.Mailer,
adapter: Bamboo.LocalAdapter
# LDAP configuration
config :recycledcloud, :ldap,
config :meta, :ldap,
server: "127.0.0.1",
port: 3089,
ssl: false,
@ -82,7 +82,7 @@ config :recycledcloud, :ldap,
default_group_gid: 1000
## Odoo API credentials
config :recycledcloud, :odoo,
config :meta, :odoo,
server: "https://odoo.staging.e-durable.ch",
database: "e-Durable",
user: "user",

View file

@ -9,7 +9,7 @@ use Mix.Config
# manifest is generated by the `mix phx.digest` task,
# which you should run after static files are built and
# before starting your production server.
config :recycledcloud, RecycledCloudWeb.Endpoint,
config :meta, MetaWeb.Endpoint,
url: [host: "example.com", port: 80],
cache_static_manifest: "priv/static/cache_manifest.json"
@ -21,7 +21,7 @@ config :logger, level: :info
# To get SSL working, you will need to add the `https` key
# to the previous section and set your `:url` port to 443:
#
# config :recycledcloud, RecycledCloudWeb.Endpoint,
# config :meta, MetaWeb.Endpoint,
# ...
# url: [host: "example.com", port: 443],
# https: [
@ -45,7 +45,7 @@ config :logger, level: :info
# We also recommend setting `force_ssl` in your endpoint, ensuring
# no data is ever sent via http, always redirecting to https:
#
# config :recycledcloud, RecycledCloudWeb.Endpoint,
# config :meta, MetaWeb.Endpoint,
# force_ssl: [hsts: true]
#
# Check `Plug.SSL` for all available options in `force_ssl`.

View file

@ -10,7 +10,7 @@ database_url =
For example: ecto://USER:PASS@HOST/DATABASE
"""
config :recycledcloud, RecycledCloud.Repo,
config :meta, Meta.Repo,
# ssl: true,
url: database_url,
pool_size: String.to_integer(System.get_env("POOL_SIZE") || "10")
@ -22,7 +22,7 @@ secret_key_base =
You can generate one by calling: mix phx.gen.secret
"""
config :recycledcloud, RecycledCloudWeb.Endpoint,
config :meta, MetaWeb.Endpoint,
http: [
port: String.to_integer(System.get_env("PORT") || "4000"),
transport_options: [socket_opts: [:inet6]]
@ -34,7 +34,7 @@ config :recycledcloud, RecycledCloudWeb.Endpoint,
# If you are doing OTP releases, you need to instruct Phoenix
# to start each relevant endpoint:
#
config :recycledcloud, RecycledCloudWeb.Endpoint, server: true
config :meta, MetaWeb.Endpoint, server: true
#
# Then you can assemble a release by calling `mix release`.
# See `mix help release` for more information.

View file

@ -8,16 +8,16 @@ config :bcrypt_elixir, :log_rounds, 1
# The MIX_TEST_PARTITION environment variable can be used
# to provide built-in test partitioning in CI environment.
# Run `mix help test` for more information.
config :recycledcloud, RecycledCloud.Repo,
config :meta, Meta.Repo,
username: "postgres",
password: "postgres",
database: "recycledcloud_test#{System.get_env("MIX_TEST_PARTITION")}",
database: "meta_test#{System.get_env("MIX_TEST_PARTITION")}",
hostname: "localhost",
pool: Ecto.Adapters.SQL.Sandbox
# We don't run a server during test. If one is required,
# you can enable the server option below.
config :recycledcloud, RecycledCloudWeb.Endpoint,
config :meta, MetaWeb.Endpoint,
http: [port: 4002],
server: false
@ -25,7 +25,7 @@ config :recycledcloud, RecycledCloudWeb.Endpoint,
config :logger, level: :warn
# LDAP configuration
config :recycledcloud, :ldap,
config :meta, :ldap,
server: "127.0.0.1",
port: 3089,
ssl: false,
@ -34,5 +34,5 @@ config :recycledcloud, :ldap,
bind_pw: "admin"
# Send emails to local memory for testing.
config :recycledcloud, RecycledCloud.Mailer,
config :meta, Meta.Mailer,
adapter: Bamboo.LocalAdapter

View file

@ -1,6 +1,6 @@
defmodule RecycledCloud do
defmodule Meta do
@moduledoc """
RecycledCloud keeps the contexts that define your domain
Meta keeps the contexts that define your domain
and business logic.
Contexts are also responsible for managing your data, regardless

View file

@ -1,11 +1,11 @@
defmodule RecycledCloud.Accounts do
defmodule Meta.Accounts do
@moduledoc """
The Accounts context.
"""
import Ecto.Query, warn: false
alias RecycledCloud.Repo
alias RecycledCloud.Accounts.{User, Key, UserToken, UserNotifier}
alias Meta.Repo
alias Meta.Accounts.{User, Key, UserToken, UserNotifier}
## Database getters

View file

@ -1,4 +1,4 @@
defmodule RecycledCloud.Accounts.Key do
defmodule Meta.Accounts.Key do
use Ecto.Schema
import Ecto.Changeset
@ -6,7 +6,7 @@ defmodule RecycledCloud.Accounts.Key do
field :comment, :string
field :value, :string
field :fingerprint, :string
belongs_to :user, RecycledCloud.Accounts.User
belongs_to :user, Meta.Accounts.User
timestamps()
end

View file

@ -1,10 +1,10 @@
defmodule RecycledCloud.Accounts.User do
defmodule Meta.Accounts.User do
use Ecto.Schema
import Ecto.Changeset
require Logger
alias RecycledCloud.{LDAP,Accounts}
alias RecycledCloud.Accounts.User
alias RecycledCloud.Repo
alias Meta.{LDAP,Accounts}
alias Meta.Accounts.User
alias Meta.Repo
@min_password_lenght 6
@max_password_lenght 80
@ -74,7 +74,7 @@ defmodule RecycledCloud.Accounts.User do
defp create_ldap_user(%User{} = user) do
# TODO: read dn template from conf, gid_number
conf = Application.get_env(:recycledcloud, :ldap)
conf = Application.get_env(:meta, :ldap)
basetree = conf |> Keyword.get(:base_dn)
default_group_gid = conf |> Keyword.get(:default_group_gid, 1000)
@ -156,7 +156,7 @@ defmodule RecycledCloud.Accounts.User do
user
|> cast(attrs, [:username, :password, :email, :dn, :captcha])
|> RecycledCloud.Captcha.validate(expected_captcha_result)
|> Meta.Captcha.validate(expected_captcha_result)
|> validate_username()
|> validate_email()
|> validate_password()

View file

@ -1,5 +1,5 @@
defmodule RecycledCloud.Accounts.UserNotifier do
alias RecycledCloud.Mailer
defmodule Meta.Accounts.UserNotifier do
alias Meta.Mailer
import Bamboo.Email
defp deliver(to, body) do

View file

@ -1,4 +1,4 @@
defmodule RecycledCloud.Accounts.UserToken do
defmodule Meta.Accounts.UserToken do
use Ecto.Schema
import Ecto.Query
@ -16,7 +16,7 @@ defmodule RecycledCloud.Accounts.UserToken do
field :token, :binary
field :context, :string
field :sent_to, :string
belongs_to :user, RecycledCloud.Accounts.User
belongs_to :user, Meta.Accounts.User
timestamps(updated_at: false)
end
@ -28,7 +28,7 @@ defmodule RecycledCloud.Accounts.UserToken do
"""
def build_session_token(user) do
token = :crypto.strong_rand_bytes(@rand_size)
{token, %RecycledCloud.Accounts.UserToken{token: token, context: "session", user_id: user.id}}
{token, %Meta.Accounts.UserToken{token: token, context: "session", user_id: user.id}}
end
@doc """
@ -63,7 +63,7 @@ defmodule RecycledCloud.Accounts.UserToken do
hashed_token = :crypto.hash(@hash_algorithm, token)
{Base.url_encode64(token, padding: false),
%RecycledCloud.Accounts.UserToken{
%Meta.Accounts.UserToken{
token: hashed_token,
context: context,
sent_to: sent_to,
@ -123,17 +123,17 @@ defmodule RecycledCloud.Accounts.UserToken do
Returns the given token with the given context.
"""
def token_and_context_query(token, context) do
from RecycledCloud.Accounts.UserToken, where: [token: ^token, context: ^context]
from Meta.Accounts.UserToken, where: [token: ^token, context: ^context]
end
@doc """
Gets all tokens for the given user for the given contexts.
"""
def user_and_contexts_query(user, :all) do
from t in RecycledCloud.Accounts.UserToken, where: t.user_id == ^user.id
from t in Meta.Accounts.UserToken, where: t.user_id == ^user.id
end
def user_and_contexts_query(user, [_ | _] = contexts) do
from t in RecycledCloud.Accounts.UserToken, where: t.user_id == ^user.id and t.context in ^contexts
from t in Meta.Accounts.UserToken, where: t.user_id == ^user.id and t.context in ^contexts
end
end

View file

@ -1,4 +1,4 @@
defmodule RecycledCloud.Application do
defmodule Meta.Application do
# See https://hexdocs.pm/elixir/Application.html
# for more information on OTP Applications
@moduledoc false
@ -8,31 +8,31 @@ defmodule RecycledCloud.Application do
def start(_type, _args) do
children = [
# Start the Ecto repository
RecycledCloud.Repo,
Meta.Repo,
# Start the Telemetry supervisor
RecycledCloudWeb.Telemetry,
MetaWeb.Telemetry,
# Start the PubSub system
{Phoenix.PubSub, name: RecycledCloud.PubSub},
{Phoenix.PubSub, name: Meta.PubSub},
# Start the Endpoint (http/https)
RecycledCloudWeb.Endpoint,
MetaWeb.Endpoint,
# Starts LDAP connection pool
RecycledCloud.LDAP,
Meta.LDAP,
# Starts Odoo client
RecycledCloud.Odoo
# Start a worker by calling: RecycledCloud.Worker.start_link(arg)
# {RecycledCloud.Worker, arg}
Meta.Odoo
# Start a worker by calling: Meta.Worker.start_link(arg)
# {Meta.Worker, arg}
]
# See https://hexdocs.pm/elixir/Supervisor.html
# for other strategies and supported options
opts = [strategy: :one_for_one, name: RecycledCloud.Supervisor]
opts = [strategy: :one_for_one, name: Meta.Supervisor]
Supervisor.start_link(children, opts)
end
# Tell Phoenix to update the endpoint configuration
# whenever the application is updated.
def config_change(changed, _new, removed) do
RecycledCloudWeb.Endpoint.config_change(changed, removed)
MetaWeb.Endpoint.config_change(changed, removed)
:ok
end
end

View file

@ -1,6 +1,6 @@
defmodule RecycledCloud.Billing.Invoice do
alias RecycledCloud.Billing.{Partner, Invoice}
alias RecycledCloud.Odoo
defmodule Meta.Billing.Invoice do
alias Meta.Billing.{Partner, Invoice}
alias Meta.Odoo
use Ecto.Schema

View file

@ -1,8 +1,8 @@
defmodule RecycledCloud.Billing.Partner do
alias RecycledCloud.Accounts.User
alias RecycledCloud.Billing.Partner
alias RecycledCloud.Odoo
alias RecycledCloud.Repo
defmodule Meta.Billing.Partner do
alias Meta.Accounts.User
alias Meta.Billing.Partner
alias Meta.Odoo
alias Meta.Repo
import Ecto.Changeset
use Ecto.Schema

View file

@ -1,4 +1,4 @@
defmodule RecycledCloud.Captcha do
defmodule Meta.Captcha do
# We can't use a graphical-only captcha library such as
# https://hex.pm/packages/captcha since it would break accessibility for
# blind people. Let's make it simple maths instead!

View file

@ -1,4 +1,4 @@
defmodule RecycledCloud.LDAP do
defmodule Meta.LDAP do
require Logger
use GenServer
@ -54,7 +54,7 @@ defmodule RecycledCloud.LDAP do
###
def search(ldap_conn, field, value, search_timeout \\ 1000) do
base_dn = Application.get_env(:recycledcloud, :ldap) |> Keyword.get(:base_dn)
base_dn = Application.get_env(:meta, :ldap) |> Keyword.get(:base_dn)
opts = [
{:base, to_charlist(base_dn)},
{:scope, :eldap.wholeSubtree()},
@ -89,7 +89,7 @@ defmodule RecycledCloud.LDAP do
defp internal_execute_query(query, ldap_conn), do: query.(ldap_conn)
defp bind(ldap_conn) do
conf = Application.get_env(:recycledcloud, :ldap, [])
conf = Application.get_env(:meta, :ldap, [])
dn = conf |> Keyword.get(:bind_dn)
pw = conf |> Keyword.get(:bind_pw)
@ -98,7 +98,7 @@ defmodule RecycledCloud.LDAP do
# The method is used by the RC.LDAPTestEnvironment module.
def connect do
conf = Application.get_env(:recycledcloud, :ldap, [])
conf = Application.get_env(:meta, :ldap, [])
host = Keyword.get(conf, :server, "localhost") |> String.to_charlist
opts = [

View file

@ -1,5 +1,5 @@
defmodule RecycledCloud.Mailer do
use Bamboo.Mailer, otp_app: :recycledcloud
defmodule Meta.Mailer do
use Bamboo.Mailer, otp_app: :meta
import Bamboo.Email
@from "no-reply@recycled.cloud"

View file

@ -1,4 +1,4 @@
defmodule RecycledCloud.Odoo do
defmodule Meta.Odoo do
use GenServer
require Logger
@ -8,7 +8,7 @@ defmodule RecycledCloud.Odoo do
# Odoo 14.0 API is documented at https://www.odoo.com/documentation/14.0/webservices/odoo.html
defp get_odoo_config(key) do
Application.get_env(:recycledcloud, :odoo, []) |> Keyword.get(key)
Application.get_env(:meta, :odoo, []) |> Keyword.get(key)
end
defp post!(call, endpoint) do

View file

@ -1,18 +1,18 @@
defmodule RecycledCloud.OpenNebula do
defmodule Meta.OpenNebula do
@moduledoc """
The OpenNebula context and XML-RPC Interface.
See http://docs.opennebula.io/5.12/integration/system_interfaces/api.html for details.
"""
alias RecycledCloud.OpenNebula.{VM, VMPool}
alias Meta.OpenNebula.{VM, VMPool}
require Logger
# OpenNebula daemon.
@endpoint "/RPC2"
defp get_opennebula_config(key) do
Application.get_env(:recycledcloud, :opennebula, []) |> Keyword.get(key)
Application.get_env(:meta, :opennebula, []) |> Keyword.get(key)
end
def get_locations() do

View file

@ -1,4 +1,4 @@
defmodule RecycledCloud.OpenNebula.Schema do
defmodule Meta.OpenNebula.Schema do
@moduledoc """
Helpers used to process OpenNebula's XSD schema.
@ -24,8 +24,8 @@ defmodule RecycledCloud.OpenNebula.Schema do
"""
require Logger
alias RecycledCloud.OpenNebula.Schema
alias RecycledCloud.OpenNebula.Schema.Records
alias Meta.OpenNebula.Schema
alias Meta.OpenNebula.Schema.Records
@opennebula_release "5.12"
@ -33,7 +33,7 @@ defmodule RecycledCloud.OpenNebula.Schema do
# Data-binding: access and extract XSD models.
defp get_raw(type, object) do
priv_dir = :code.priv_dir(:recycledcloud) |> to_string
priv_dir = :code.priv_dir(:meta) |> to_string
{data_dir, extension} = case type do
:xsd -> {"xsd-src", ".xsd"}
:hrl -> {"xsd-records", ".hrl"}
@ -73,8 +73,8 @@ defmodule RecycledCloud.OpenNebula.Schema do
schema = elem(data, 0)
if schema in Keyword.keys(Schema.Records.__info__(:macros)) do
call = quote do
require RecycledCloud.OpenNebula.Schema.Records
RecycledCloud.OpenNebula.Schema.Records."XSD"(:data)
require Meta.OpenNebula.Schema.Records
Meta.OpenNebula.Schema.Records."XSD"(:data)
end
replace = fn
:XSD, {model, data} -> {model, {model, data}}

View file

@ -1,4 +1,4 @@
defmodule RecycledCloud.OpenNebula.Schema.Records do
defmodule Meta.OpenNebula.Schema.Records do
@moduledoc """
Here we define XSD template into something we can play with (Records).
@ -6,11 +6,11 @@ defmodule RecycledCloud.OpenNebula.Schema.Records do
code - which is what we're doing right now: the records are defined in .hrl
(erlang headers) by erlsom.
See RecycledCloud.OpenNebula.Schema module for details.
See Meta.OpenNebula.Schema module for details.
"""
require Record
alias RecycledCloud.OpenNebula.Schema
alias Meta.OpenNebula.Schema
@models %{
"vm" => Schema.generate_model_for("vm"),

View file

@ -1,9 +1,9 @@
defmodule RecycledCloud.OpenNebula.VM do
defmodule Meta.OpenNebula.VM do
@moduledoc """
OpenNebula VM: http://docs.opennebula.io/5.12/integration/system_interfaces/api.html#one-vm-info
"""
alias RecycledCloud.OpenNebula, as: ONE
alias RecycledCloud.OpenNebula.Schema
alias Meta.OpenNebula, as: ONE
alias Meta.OpenNebula.Schema
@states [
{:any, -2},

View file

@ -1,9 +1,9 @@
defmodule RecycledCloud.OpenNebula.VMPool do
defmodule Meta.OpenNebula.VMPool do
@moduledoc """
OpenNebula VM Pool: http://docs.opennebula.io/5.12/integration/system_interfaces/api.html#one-vmpool-info
"""
alias RecycledCloud.OpenNebula, as: ONE
alias RecycledCloud.OpenNebula.Schema
alias Meta.OpenNebula, as: ONE
alias Meta.OpenNebula.Schema
# Filters ressourses.
# (user) ID >= 0 matches an user's resources.

View file

@ -1,5 +1,5 @@
defmodule RecycledCloud.Release do
@app :recycledcloud
defmodule Meta.Release do
@app :meta
def migrate do
load_app()

5
lib/meta/repo.ex Normal file
View file

@ -0,0 +1,5 @@
defmodule Meta.Repo do
use Ecto.Repo,
otp_app: :meta,
adapter: Ecto.Adapters.Postgres
end

View file

@ -1,11 +1,11 @@
defmodule RecycledCloud.SupportRequest do
defmodule Meta.SupportRequest do
use Ecto.Schema
import Ecto.Changeset
import Bamboo.Email
alias RecycledCloud.SupportRequest
alias RecycledCloud.Mailer
alias RecycledCloud.Captcha
alias Meta.SupportRequest
alias Meta.Mailer
alias Meta.Captcha
embedded_schema do
field :name, :string
@ -26,8 +26,8 @@ defmodule RecycledCloud.SupportRequest do
end
def send(%SupportRequest{} = request) do
admin_email = Application.get_env(:recycledcloud, :admin_email)
host = Application.get_env(:recycledcloud, RecycledCloudWeb.Endpoint)
admin_email = Application.get_env(:meta, :admin_email)
host = Application.get_env(:meta, MetaWeb.Endpoint)
|> Keyword.get(:url, [])
|> Keyword.get(:host, "localhost")

View file

@ -1,12 +1,12 @@
defmodule RecycledCloudWeb do
defmodule MetaWeb do
@moduledoc """
The entrypoint for defining your web interface, such
as controllers, views, channels and so on.
This can be used in your application as:
use RecycledCloudWeb, :controller
use RecycledCloudWeb, :view
use MetaWeb, :controller
use MetaWeb, :view
The definitions below will be executed for every view,
controller, etc, so keep them short and clean, focused
@ -19,19 +19,19 @@ defmodule RecycledCloudWeb do
def controller do
quote do
use Phoenix.Controller, namespace: RecycledCloudWeb
use Phoenix.Controller, namespace: MetaWeb
import Plug.Conn
import RecycledCloudWeb.Gettext
alias RecycledCloudWeb.Router.Helpers, as: Routes
import MetaWeb.Gettext
alias MetaWeb.Router.Helpers, as: Routes
end
end
def view do
quote do
use Phoenix.View,
root: "lib/recycledcloud_web/templates",
namespace: RecycledCloudWeb
root: "lib/meta_web/templates",
namespace: MetaWeb
# Import convenience functions from controllers
import Phoenix.Controller,
@ -54,7 +54,7 @@ defmodule RecycledCloudWeb do
def channel do
quote do
use Phoenix.Channel
import RecycledCloudWeb.Gettext
import MetaWeb.Gettext
end
end
@ -66,9 +66,9 @@ defmodule RecycledCloudWeb do
# Import basic rendering functionality (render, render_layout, etc)
import Phoenix.View
import RecycledCloudWeb.ErrorHelpers
import RecycledCloudWeb.Gettext
alias RecycledCloudWeb.Router.Helpers, as: Routes
import MetaWeb.ErrorHelpers
import MetaWeb.Gettext
alias MetaWeb.Router.Helpers, as: Routes
end
end

View file

@ -1,8 +1,8 @@
defmodule RecycledCloudWeb.UserSocket do
defmodule MetaWeb.UserSocket do
use Phoenix.Socket
## Channels
# channel "room:*", RecycledCloudWeb.RoomChannel
# channel "room:*", MetaWeb.RoomChannel
# Socket params are passed from the client and can
# be used to verify and authenticate a user. After
@ -27,7 +27,7 @@ defmodule RecycledCloudWeb.UserSocket do
# Would allow you to broadcast a "disconnect" event and terminate
# all active sockets and channels for a given user:
#
# RecycledCloudWeb.Endpoint.broadcast("user_socket:#{user.id}", "disconnect", %{})
# MetaWeb.Endpoint.broadcast("user_socket:#{user.id}", "disconnect", %{})
#
# Returning `nil` makes this socket anonymous.
@impl true

View file

@ -1,8 +1,8 @@
defmodule RecycledCloudWeb.BillingController do
use RecycledCloudWeb, :controller
defmodule MetaWeb.BillingController do
use MetaWeb, :controller
alias RecycledCloud.Billing.{Partner, Invoice}
alias RecycledCloud.Repo
alias Meta.Billing.{Partner, Invoice}
alias Meta.Repo
def current_partner(conn) do
user = conn.assigns.current_user

View file

@ -0,0 +1,7 @@
defmodule MetaWeb.PageController do
use MetaWeb, :controller
def index(conn, _params) do
render(conn, "index.html")
end
end

View file

@ -1,8 +1,8 @@
defmodule RecycledCloudWeb.SupportController do
use RecycledCloudWeb, :controller
defmodule MetaWeb.SupportController do
use MetaWeb, :controller
alias RecycledCloud.SupportRequest
alias RecycledCloud.Captcha
alias Meta.SupportRequest
alias Meta.Captcha
def new(conn, _params) do
{captcha_text, captcha_result} = Captcha.generate()

View file

@ -1,9 +1,9 @@
defmodule RecycledCloudWeb.UserAuth do
defmodule MetaWeb.UserAuth do
import Plug.Conn
import Phoenix.Controller
alias RecycledCloud.Accounts
alias RecycledCloudWeb.Router.Helpers, as: Routes
alias Meta.Accounts
alias MetaWeb.Router.Helpers, as: Routes
# Make the remember me cookie valid for 60 days.
# If you want bump or reduce this value, also change
@ -75,7 +75,7 @@ defmodule RecycledCloudWeb.UserAuth do
user_token && Accounts.delete_session_token(user_token)
if live_socket_id = get_session(conn, :live_socket_id) do
RecycledCloudWeb.Endpoint.broadcast(live_socket_id, "disconnect", %{})
MetaWeb.Endpoint.broadcast(live_socket_id, "disconnect", %{})
end
conn

View file

@ -1,7 +1,7 @@
defmodule RecycledCloudWeb.UserConfirmationController do
use RecycledCloudWeb, :controller
defmodule MetaWeb.UserConfirmationController do
use MetaWeb, :controller
alias RecycledCloud.Accounts
alias Meta.Accounts
def new(conn, _params) do
render(conn, "new.html")

View file

@ -1,7 +1,7 @@
defmodule RecycledCloudWeb.UserKeysController do
use RecycledCloudWeb, :controller
defmodule MetaWeb.UserKeysController do
use MetaWeb, :controller
alias RecycledCloud.Accounts
alias Meta.Accounts
def index(conn, %{"username" => username}) do
case Accounts.get_user_by_username(username) do

View file

@ -1,13 +1,13 @@
defmodule RecycledCloudWeb.UserRegistrationController do
use RecycledCloudWeb, :controller
defmodule MetaWeb.UserRegistrationController do
use MetaWeb, :controller
alias RecycledCloud.Captcha
alias RecycledCloud.Accounts
alias RecycledCloud.Accounts.User
alias RecycledCloudWeb.UserAuth
alias Meta.Captcha
alias Meta.Accounts
alias Meta.Accounts.User
alias MetaWeb.UserAuth
defp is_registration_enabled?() do
Application.get_env(:recycledcloud, :enable_registration)
Application.get_env(:meta, :enable_registration)
end
def new(conn, _params) do

View file

@ -1,7 +1,7 @@
defmodule RecycledCloudWeb.UserResetPasswordController do
use RecycledCloudWeb, :controller
defmodule MetaWeb.UserResetPasswordController do
use MetaWeb, :controller
alias RecycledCloud.Accounts
alias Meta.Accounts
plug :get_user_by_reset_password_token when action in [:edit, :update]

View file

@ -1,8 +1,8 @@
defmodule RecycledCloudWeb.UserSessionController do
use RecycledCloudWeb, :controller
defmodule MetaWeb.UserSessionController do
use MetaWeb, :controller
alias RecycledCloud.Accounts
alias RecycledCloudWeb.UserAuth
alias Meta.Accounts
alias MetaWeb.UserAuth
def new(conn, _params) do
render(conn, "new.html", error_message: nil)

View file

@ -1,8 +1,8 @@
defmodule RecycledCloudWeb.UserSettingsController do
use RecycledCloudWeb, :controller
defmodule MetaWeb.UserSettingsController do
use MetaWeb, :controller
alias RecycledCloud.Accounts
alias RecycledCloudWeb.UserAuth
alias Meta.Accounts
alias MetaWeb.UserAuth
plug :assign_email_and_password_changesets

View file

@ -1,7 +1,7 @@
defmodule RecycledCloudWeb.VirtualMachineHostingController do
use RecycledCloudWeb, :controller
defmodule MetaWeb.VirtualMachineHostingController do
use MetaWeb, :controller
alias RecycledCloud.OpenNebula, as: ONE
alias Meta.OpenNebula, as: ONE
def index(conn, _params) do
username = conn.assigns.current_user.username

View file

@ -1,16 +1,16 @@
defmodule RecycledCloudWeb.Endpoint do
use Phoenix.Endpoint, otp_app: :recycledcloud
defmodule MetaWeb.Endpoint do
use Phoenix.Endpoint, otp_app: :meta
# The session will be stored in the cookie and signed,
# this means its contents can be read but not tampered with.
# Set :encryption_salt if you would also like to encrypt it.
@session_options [
store: :cookie,
key: "_recycledcloud_key",
key: "_meta_key",
signing_salt: "6k95bz+m"
]
socket "/socket", RecycledCloudWeb.UserSocket,
socket "/socket", MetaWeb.UserSocket,
websocket: true,
longpoll: false
@ -20,7 +20,7 @@ defmodule RecycledCloudWeb.Endpoint do
# when deploying your static files in production.
plug Plug.Static,
at: "/",
from: :recycledcloud,
from: :meta,
gzip: false,
only: ~w(css fonts images js favicon.ico robots.txt)
@ -30,7 +30,7 @@ defmodule RecycledCloudWeb.Endpoint do
socket "/phoenix/live_reload/socket", Phoenix.LiveReloader.Socket
plug Phoenix.LiveReloader
plug Phoenix.CodeReloader
plug Phoenix.Ecto.CheckRepoStatus, otp_app: :recycledcloud
plug Phoenix.Ecto.CheckRepoStatus, otp_app: :meta
end
plug Plug.RequestId
@ -44,5 +44,5 @@ defmodule RecycledCloudWeb.Endpoint do
plug Plug.MethodOverride
plug Plug.Head
plug Plug.Session, @session_options
plug RecycledCloudWeb.Router
plug MetaWeb.Router
end

View file

@ -1,11 +1,11 @@
defmodule RecycledCloudWeb.Gettext do
defmodule MetaWeb.Gettext do
@moduledoc """
A module providing Internationalization with a gettext-based API.
By using [Gettext](https://hexdocs.pm/gettext),
your module gains a set of macros for translations, for example:
import RecycledCloudWeb.Gettext
import MetaWeb.Gettext
# Simple translation
gettext("Here is the string to translate")
@ -20,5 +20,5 @@ defmodule RecycledCloudWeb.Gettext do
See the [Gettext Docs](https://hexdocs.pm/gettext) for detailed usage.
"""
use Gettext, otp_app: :recycledcloud
use Gettext, otp_app: :meta
end

View file

@ -1,7 +1,7 @@
defmodule RecycledCloudWeb.Router do
use RecycledCloudWeb, :router
defmodule MetaWeb.Router do
use MetaWeb, :router
import RecycledCloudWeb.UserAuth
import MetaWeb.UserAuth
pipeline :browser do
plug :accepts, ["html"]
@ -28,14 +28,14 @@ defmodule RecycledCloudWeb.Router do
plug :accepts, ["text"]
end
scope "/", RecycledCloudWeb do
scope "/", MetaWeb do
pipe_through :browser
get "/", PageController, :index
get "/support/new", SupportController, :new
end
scope "/", RecycledCloudWeb do
scope "/", MetaWeb do
pipe_through :browser_with_forgery
# The static recycled.cloud website POST this endpoint, which basically is
@ -43,7 +43,7 @@ defmodule RecycledCloudWeb.Router do
post "/support/new", SupportController, :create
end
scope "/", RecycledCloudWeb do
scope "/", MetaWeb do
pipe_through :plain
get "/keys/:username", UserKeysController, :index
@ -51,7 +51,7 @@ defmodule RecycledCloudWeb.Router do
## Authentication routes
scope "/", RecycledCloudWeb do
scope "/", MetaWeb do
pipe_through [:browser, :redirect_if_user_is_authenticated]
get "/users/register", UserRegistrationController, :new
@ -64,7 +64,7 @@ defmodule RecycledCloudWeb.Router do
put "/users/reset_password/:token", UserResetPasswordController, :update
end
scope "/", RecycledCloudWeb do
scope "/", MetaWeb do
pipe_through [:browser, :require_authenticated_user]
get "/users/settings", UserSettingsController, :edit
@ -79,7 +79,7 @@ defmodule RecycledCloudWeb.Router do
get "/hosting/vm/:location/:id", VirtualMachineHostingController, :show
end
scope "/", RecycledCloudWeb do
scope "/", MetaWeb do
pipe_through [:browser]
get "/users/log_out", UserSessionController, :delete
@ -91,7 +91,7 @@ defmodule RecycledCloudWeb.Router do
# In-memory mailer for development purposes only.
# See https://hexdocs.pm/bamboo/Bamboo.SentEmailViewerPlug.html for details.
if RecycledCloud.env() == :dev do
if Meta.env() == :dev do
forward "/outbox", Bamboo.SentEmailViewerPlug
end
end

View file

@ -1,4 +1,4 @@
defmodule RecycledCloudWeb.Telemetry do
defmodule MetaWeb.Telemetry do
use Supervisor
import Telemetry.Metrics
@ -31,11 +31,11 @@ defmodule RecycledCloudWeb.Telemetry do
),
# Database Metrics
summary("recycledcloud.repo.query.total_time", unit: {:native, :millisecond}),
summary("recycledcloud.repo.query.decode_time", unit: {:native, :millisecond}),
summary("recycledcloud.repo.query.query_time", unit: {:native, :millisecond}),
summary("recycledcloud.repo.query.queue_time", unit: {:native, :millisecond}),
summary("recycledcloud.repo.query.idle_time", unit: {:native, :millisecond}),
summary("meta.repo.query.total_time", unit: {:native, :millisecond}),
summary("meta.repo.query.decode_time", unit: {:native, :millisecond}),
summary("meta.repo.query.query_time", unit: {:native, :millisecond}),
summary("meta.repo.query.queue_time", unit: {:native, :millisecond}),
summary("meta.repo.query.idle_time", unit: {:native, :millisecond}),
# VM Metrics
summary("vm.memory.total", unit: {:byte, :kilobyte}),
@ -49,7 +49,7 @@ defmodule RecycledCloudWeb.Telemetry do
[
# A module, function and arguments to be invoked periodically.
# This function must call :telemetry.execute/3 and a metric must be added above.
# {RecycledCloudWeb, :count_users, []}
# {MetaWeb, :count_users, []}
]
end
end

View file

@ -4,7 +4,7 @@
<meta charset="utf-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=edge"/>
<meta name="viewport" content="width=device-width, initial-scale=1.0"/>
<title>RecycledCloud · Management</title>
<title>Meta · Management</title>
<link rel="stylesheet" href="<%= Routes.static_path(@conn, "/css/app.css") %>"/>
</head>
<body>
@ -15,7 +15,7 @@
<img id="nav-logo" src="<%= Routes.static_path(@conn, "/images/cloud.svg") %>"></img>
<p class="nav-notice">
<small>
management v<%= RecycledCloud.version() %> | <%= RecycledCloud.env() %> | <a href="https://code.recycled.cloud/e-Durable/management">sources</a>
meta v<%= Meta.version() %> | <%= Meta.env() %> | <a href="https://code.recycled.cloud/e-Durable/management">sources</a>
</small>
</p>
</div>

View file

@ -0,0 +1,3 @@
defmodule MetaWeb.BillingView do
use MetaWeb, :view
end

View file

@ -1,4 +1,4 @@
defmodule RecycledCloudWeb.ErrorHelpers do
defmodule MetaWeb.ErrorHelpers do
@moduledoc """
Conveniences for translating and building error messages.
"""
@ -39,9 +39,9 @@ defmodule RecycledCloudWeb.ErrorHelpers do
# should be written to the errors.po file. The :count option is
# set by Ecto and indicates we should also apply plural rules.
if count = opts[:count] do
Gettext.dngettext(RecycledCloudWeb.Gettext, "errors", msg, msg, count, opts)
Gettext.dngettext(MetaWeb.Gettext, "errors", msg, msg, count, opts)
else
Gettext.dgettext(RecycledCloudWeb.Gettext, "errors", msg, opts)
Gettext.dgettext(MetaWeb.Gettext, "errors", msg, opts)
end
end
end

View file

@ -1,5 +1,5 @@
defmodule RecycledCloudWeb.ErrorView do
use RecycledCloudWeb, :view
defmodule MetaWeb.ErrorView do
use MetaWeb, :view
# If you want to customize a particular status code
# for a certain format, you may uncomment below.

View file

@ -0,0 +1,3 @@
defmodule MetaWeb.LayoutView do
use MetaWeb, :view
end

View file

@ -0,0 +1,3 @@
defmodule MetaWeb.PageView do
use MetaWeb, :view
end

View file

@ -0,0 +1,3 @@
defmodule MetaWeb.SupportView do
use MetaWeb, :view
end

View file

@ -0,0 +1,3 @@
defmodule MetaWeb.UserConfirmationView do
use MetaWeb, :view
end

View file

@ -0,0 +1,3 @@
defmodule MetaWeb.UserRegistrationView do
use MetaWeb, :view
end

View file

@ -0,0 +1,3 @@
defmodule MetaWeb.UserResetPasswordView do
use MetaWeb, :view
end

View file

@ -0,0 +1,3 @@
defmodule MetaWeb.UserSessionView do
use MetaWeb, :view
end

View file

@ -0,0 +1,3 @@
defmodule MetaWeb.UserSettingsView do
use MetaWeb, :view
end

View file

@ -1,8 +1,8 @@
defmodule RecycledCloudWeb.VirtualMachineHostingView do
use RecycledCloudWeb, :view
defmodule MetaWeb.VirtualMachineHostingView do
use MetaWeb, :view
alias RecycledCloud.OpenNebula, as: ONE
alias RecycledCloud.OpenNebula.VM
alias Meta.OpenNebula, as: ONE
alias Meta.OpenNebula.VM
def render_state(vm) do
state = Map.get(vm, :STATE) |> VM.state_for

View file

@ -10,7 +10,7 @@ defmodule Mix.Tasks.GenerateOpenNebulaRecords do
@shortdoc "Generate erlang records from OpenNebula's XSD templates"
def run(_) do
priv_dir = to_string(:code.priv_dir(:recycledcloud))
priv_dir = to_string(:code.priv_dir(:meta))
xsd_dir = Path.join([priv_dir, "opennebula", @opennebula_release, "xsd-src"])
hrl_dir = Path.join([priv_dir, "opennebula", @opennebula_release, "xsd-records"])

View file

@ -1,5 +0,0 @@
defmodule RecycledCloud.Repo do
use Ecto.Repo,
otp_app: :recycledcloud,
adapter: Ecto.Adapters.Postgres
end

View file

@ -1,7 +0,0 @@
defmodule RecycledCloudWeb.PageController do
use RecycledCloudWeb, :controller
def index(conn, _params) do
render(conn, "index.html")
end
end

View file

@ -1,3 +0,0 @@
defmodule RecycledCloudWeb.BillingView do
use RecycledCloudWeb, :view
end

View file

@ -1,3 +0,0 @@
defmodule RecycledCloudWeb.LayoutView do
use RecycledCloudWeb, :view
end

View file

@ -1,3 +0,0 @@
defmodule RecycledCloudWeb.PageView do
use RecycledCloudWeb, :view
end

View file

@ -1,3 +0,0 @@
defmodule RecycledCloudWeb.SupportView do
use RecycledCloudWeb, :view
end

View file

@ -1,3 +0,0 @@
defmodule RecycledCloudWeb.UserConfirmationView do
use RecycledCloudWeb, :view
end

View file

@ -1,3 +0,0 @@
defmodule RecycledCloudWeb.UserRegistrationView do
use RecycledCloudWeb, :view
end

View file

@ -1,3 +0,0 @@
defmodule RecycledCloudWeb.UserResetPasswordView do
use RecycledCloudWeb, :view
end

View file

@ -1,3 +0,0 @@
defmodule RecycledCloudWeb.UserSessionView do
use RecycledCloudWeb, :view
end

View file

@ -1,3 +0,0 @@
defmodule RecycledCloudWeb.UserSettingsView do
use RecycledCloudWeb, :view
end

View file

@ -1,9 +1,9 @@
defmodule RecycledCloud.MixProject do
defmodule Meta.MixProject do
use Mix.Project
def project do
[
app: :recycledcloud,
app: :meta,
version: "0.4.0",
elixir: "~> 1.7",
elixirc_paths: elixirc_paths(Mix.env()),
@ -12,7 +12,7 @@ defmodule RecycledCloud.MixProject do
aliases: aliases(),
deps: deps(),
releases: [
recycledcloud: [
meta: [
include_executables_for: [:unix],
applications: [runtime_tools: :permanent],
include_erts: true,
@ -27,7 +27,7 @@ defmodule RecycledCloud.MixProject do
# Type `mix help compile.app` for more information.
def application do
[
mod: {RecycledCloud.Application, []},
mod: {Meta.Application, []},
extra_applications: [:logger, :runtime_tools, :eldap]
]
end

View file

@ -1,42 +1,42 @@
%{
"bamboo": {:hex, :bamboo, "1.6.0", "adfb583bef028923aae6f22deaea6667290561da1246058556ecaeb0fec5a175", [:mix], [{:hackney, ">= 1.13.0", [hex: :hackney, repo: "hexpm", optional: false]}, {:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: true]}, {:plug, "~> 1.0", [hex: :plug, repo: "hexpm", optional: false]}], "hexpm", "454e67feacbc9b6e00553ce1d2fba003c861e0035600d59b09d6159985b17f9b"},
"bamboo": {:hex, :bamboo, "1.7.1", "7f0946e8c9081ce10d347cdba33c247c7c1c4f7dddc194ab0633603ef879bbdf", [:mix], [{:hackney, ">= 1.15.2", [hex: :hackney, repo: "hexpm", optional: false]}, {:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: true]}, {:mime, "~> 1.4", [hex: :mime, repo: "hexpm", optional: false]}, {:phoenix, "~> 1.1", [hex: :phoenix, repo: "hexpm", optional: true]}, {:plug, "~> 1.0", [hex: :plug, repo: "hexpm", optional: false]}], "hexpm", "5fb34c3ab638fc409deec47c1e91f9d78ad95bf22ccb153588b434e1ff1aa730"},
"bamboo_smtp": {:git, "https://github.com/Fnux/bamboo_smtp.git", "bdc911bb82963e548f7189ad10670107b24bb28b", []},
"bcrypt_elixir": {:hex, :bcrypt_elixir, "2.3.0", "6cb662d5c1b0a8858801cf20997bd006e7016aa8c52959c9ef80e0f34fb60b7a", [:make, :mix], [{:comeonin, "~> 5.3", [hex: :comeonin, repo: "hexpm", optional: false]}, {:elixir_make, "~> 0.6", [hex: :elixir_make, repo: "hexpm", optional: false]}], "hexpm", "2c81d61d4f6ed0e5cf7bf27a9109b791ff216a1034b3d541327484f46dd43769"},
"bunt": {:hex, :bunt, "0.2.0", "951c6e801e8b1d2cbe58ebbd3e616a869061ddadcc4863d0a2182541acae9a38", [:mix], [], "hexpm", "7af5c7e09fe1d40f76c8e4f9dd2be7cebd83909f31fee7cd0e9eadc567da8353"},
"certifi": {:hex, :certifi, "2.5.3", "70bdd7e7188c804f3a30ee0e7c99655bc35d8ac41c23e12325f36ab449b70651", [:rebar3], [{:parse_trans, "~>3.3", [hex: :parse_trans, repo: "hexpm", optional: false]}], "hexpm", "ed516acb3929b101208a9d700062d520f3953da3b6b918d866106ffa980e1c10"},
"certifi": {:hex, :certifi, "2.6.1", "dbab8e5e155a0763eea978c913ca280a6b544bfa115633fa20249c3d396d9493", [:rebar3], [], "hexpm", "524c97b4991b3849dd5c17a631223896272c6b0af446778ba4675a1dff53bb7e"},
"comeonin": {:hex, :comeonin, "5.3.2", "5c2f893d05c56ae3f5e24c1b983c2d5dfb88c6d979c9287a76a7feb1e1d8d646", [:mix], [], "hexpm", "d0993402844c49539aeadb3fe46a3c9bd190f1ecf86b6f9ebd71957534c95f04"},
"connection": {:hex, :connection, "1.1.0", "ff2a49c4b75b6fb3e674bfc5536451607270aac754ffd1bdfe175abe4a6d7a68", [:mix], [], "hexpm", "722c1eb0a418fbe91ba7bd59a47e28008a189d47e37e0e7bb85585a016b2869c"},
"cowboy": {:hex, :cowboy, "2.8.0", "f3dc62e35797ecd9ac1b50db74611193c29815401e53bac9a5c0577bd7bc667d", [:rebar3], [{:cowlib, "~> 2.9.1", [hex: :cowlib, repo: "hexpm", optional: false]}, {:ranch, "~> 1.7.1", [hex: :ranch, repo: "hexpm", optional: false]}], "hexpm", "4643e4fba74ac96d4d152c75803de6fad0b3fa5df354c71afdd6cbeeb15fac8a"},
"cowboy_telemetry": {:hex, :cowboy_telemetry, "0.3.1", "ebd1a1d7aff97f27c66654e78ece187abdc646992714164380d8a041eda16754", [:rebar3], [{:cowboy, "~> 2.7", [hex: :cowboy, repo: "hexpm", optional: false]}, {:telemetry, "~> 0.4", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "3a6efd3366130eab84ca372cbd4a7d3c3a97bdfcfb4911233b035d117063f0af"},
"cowlib": {:hex, :cowlib, "2.9.1", "61a6c7c50cf07fdd24b2f45b89500bb93b6686579b069a89f88cb211e1125c78", [:rebar3], [], "hexpm", "e4175dc240a70d996156160891e1c62238ede1729e45740bdd38064dad476170"},
"credo": {:hex, :credo, "1.5.5", "e8f422026f553bc3bebb81c8e8bf1932f498ca03339856c7fec63d3faac8424b", [:mix], [{:bunt, "~> 0.2.0", [hex: :bunt, repo: "hexpm", optional: false]}, {:file_system, "~> 0.2.8", [hex: :file_system, repo: "hexpm", optional: false]}, {:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: false]}], "hexpm", "dd8623ab7091956a855dc9f3062486add9c52d310dfd62748779c4315d8247de"},
"db_connection": {:hex, :db_connection, "2.3.1", "4c9f3ed1ef37471cbdd2762d6655be11e38193904d9c5c1c9389f1b891a3088e", [:mix], [{:connection, "~> 1.0", [hex: :connection, repo: "hexpm", optional: false]}], "hexpm", "abaab61780dde30301d840417890bd9f74131041afd02174cf4e10635b3a63f5"},
"db_connection": {:hex, :db_connection, "2.4.0", "d04b1b73795dae60cead94189f1b8a51cc9e1f911c234cc23074017c43c031e5", [:mix], [{:connection, "~> 1.0", [hex: :connection, repo: "hexpm", optional: false]}, {:telemetry, "~> 0.4 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "ad416c21ad9f61b3103d254a71b63696ecadb6a917b36f563921e0de00d7d7c8"},
"decimal": {:hex, :decimal, "1.9.0", "83e8daf59631d632b171faabafb4a9f4242c514b0a06ba3df493951c08f64d07", [:mix], [], "hexpm", "b1f2343568eed6928f3e751cf2dffde95bfaa19dd95d09e8a9ea92ccfd6f7d85"},
"ecto": {:hex, :ecto, "3.5.5", "48219a991bb86daba6e38a1e64f8cea540cded58950ff38fbc8163e062281a07", [:mix], [{:decimal, "~> 1.6 or ~> 2.0", [hex: :decimal, repo: "hexpm", optional: false]}, {:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: true]}, {:telemetry, "~> 0.4", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "98dd0e5e1de7f45beca6130d13116eae675db59adfa055fb79612406acf6f6f1"},
"ecto_sql": {:hex, :ecto_sql, "3.5.3", "1964df0305538364b97cc4661a2bd2b6c89d803e66e5655e4e55ff1571943efd", [:mix], [{:db_connection, "~> 2.2", [hex: :db_connection, repo: "hexpm", optional: false]}, {:ecto, "~> 3.5.0", [hex: :ecto, repo: "hexpm", optional: false]}, {:myxql, "~> 0.3.0 or ~> 0.4.0", [hex: :myxql, repo: "hexpm", optional: true]}, {:postgrex, "~> 0.15.0", [hex: :postgrex, repo: "hexpm", optional: true]}, {:tds, "~> 2.1.1", [hex: :tds, repo: "hexpm", optional: true]}, {:telemetry, "~> 0.4.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "d2f53592432ce17d3978feb8f43e8dc0705e288b0890caf06d449785f018061c"},
"ecto": {:hex, :ecto, "3.6.0", "df6b00f7278b458108044da4cff365dde31f6f2f621cf7dc0bf857b26be3bd20", [:mix], [{:decimal, "~> 1.6 or ~> 2.0", [hex: :decimal, repo: "hexpm", optional: false]}, {:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: true]}, {:telemetry, "~> 0.4", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "3035603f5b308ea7731b854493e5b5c1565e4d1e073186c3963b9689304f1d08"},
"ecto_sql": {:hex, :ecto_sql, "3.6.1", "8774dc3fc0ff7b6be510858b99883640f990c0736b8ab54588f9a0c91807f909", [:mix], [{:db_connection, "~> 2.2", [hex: :db_connection, repo: "hexpm", optional: false]}, {:ecto, "~> 3.6.0", [hex: :ecto, repo: "hexpm", optional: false]}, {:myxql, "~> 0.4.0 or ~> 0.5.0", [hex: :myxql, repo: "hexpm", optional: true]}, {:postgrex, "~> 0.15.0 or ~> 1.0", [hex: :postgrex, repo: "hexpm", optional: true]}, {:tds, "~> 2.1.1", [hex: :tds, repo: "hexpm", optional: true]}, {:telemetry, "~> 0.4.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "66f35c3f2d5978b6bffebd1e6351ab8c9d6b68650d62abd1ab8d149de40e0779"},
"elixir_make": {:hex, :elixir_make, "0.6.2", "7dffacd77dec4c37b39af867cedaabb0b59f6a871f89722c25b28fcd4bd70530", [:mix], [], "hexpm", "03e49eadda22526a7e5279d53321d1cced6552f344ba4e03e619063de75348d9"},
"erlsom": {:hex, :erlsom, "1.5.0", "c5a5cdd0ee0e8dca62bcc4b13ff08da24fdefc16ccd8b25282a2fda2ba1be24a", [:rebar3], [], "hexpm", "55a9dbf9cfa77fcfc108bd8e2c4f9f784dea228a8f4b06ea10b684944946955a"},
"file_system": {:hex, :file_system, "0.2.10", "fb082005a9cd1711c05b5248710f8826b02d7d1784e7c3451f9c1231d4fc162d", [:mix], [], "hexpm", "41195edbfb562a593726eda3b3e8b103a309b733ad25f3d642ba49696bf715dc"},
"gen_smtp": {:hex, :gen_smtp, "1.0.1", "cc3de2898d9136ff02dc78fc8193d4fc997824fc793f5bbbada79ccde94581be", [:rebar3], [{:hut, "1.3.0", [hex: :hut, repo: "hexpm", optional: false]}, {:ranch, "1.6.2", [hex: :ranch, repo: "hexpm", optional: false]}], "hexpm", "341a98dc4dafad9cc1e4426e4988e45b31d3f235fa637408f7579a9b598c0ab6"},
"gettext": {:hex, :gettext, "0.18.2", "7df3ea191bb56c0309c00a783334b288d08a879f53a7014341284635850a6e55", [:mix], [], "hexpm", "f9f537b13d4fdd30f3039d33cb80144c3aa1f8d9698e47d7bcbcc8df93b1f5c5"},
"hackney": {:hex, :hackney, "1.17.0", "717ea195fd2f898d9fe9f1ce0afcc2621a41ecfe137fae57e7fe6e9484b9aa99", [:rebar3], [{:certifi, "~>2.5", [hex: :certifi, repo: "hexpm", optional: false]}, {:idna, "~>6.1.0", [hex: :idna, repo: "hexpm", optional: false]}, {:metrics, "~>1.0.0", [hex: :metrics, repo: "hexpm", optional: false]}, {:mimerl, "~>1.1", [hex: :mimerl, repo: "hexpm", optional: false]}, {:parse_trans, "~>3.3", [hex: :parse_trans, repo: "hexpm", optional: false]}, {:ssl_verify_fun, "~>1.1.0", [hex: :ssl_verify_fun, repo: "hexpm", optional: false]}, {:unicode_util_compat, "~>0.7.0", [hex: :unicode_util_compat, repo: "hexpm", optional: false]}], "hexpm", "64c22225f1ea8855f584720c0e5b3cd14095703af1c9fbc845ba042811dc671c"},
"hackney": {:hex, :hackney, "1.17.4", "99da4674592504d3fb0cfef0db84c3ba02b4508bae2dff8c0108baa0d6e0977c", [:rebar3], [{:certifi, "~>2.6.1", [hex: :certifi, repo: "hexpm", optional: false]}, {:idna, "~>6.1.0", [hex: :idna, repo: "hexpm", optional: false]}, {:metrics, "~>1.0.0", [hex: :metrics, repo: "hexpm", optional: false]}, {:mimerl, "~>1.1", [hex: :mimerl, repo: "hexpm", optional: false]}, {:parse_trans, "3.3.1", [hex: :parse_trans, repo: "hexpm", optional: false]}, {:ssl_verify_fun, "~>1.1.0", [hex: :ssl_verify_fun, repo: "hexpm", optional: false]}, {:unicode_util_compat, "~>0.7.0", [hex: :unicode_util_compat, repo: "hexpm", optional: false]}], "hexpm", "de16ff4996556c8548d512f4dbe22dd58a587bf3332e7fd362430a7ef3986b16"},
"httpoison": {:hex, :httpoison, "1.8.0", "6b85dea15820b7804ef607ff78406ab449dd78bed923a49c7160e1886e987a3d", [:mix], [{:hackney, "~> 1.17", [hex: :hackney, repo: "hexpm", optional: false]}], "hexpm", "28089eaa98cf90c66265b6b5ad87c59a3729bea2e74e9d08f9b51eb9729b3c3a"},
"hut": {:hex, :hut, "1.3.0", "71f2f054e657c03f959cf1acc43f436ea87580696528ca2a55c8afb1b06c85e7", [:"erlang.mk", :rebar, :rebar3], [], "hexpm", "7e15d28555d8a1f2b5a3a931ec120af0753e4853a4c66053db354f35bf9ab563"},
"idna": {:hex, :idna, "6.1.1", "8a63070e9f7d0c62eb9d9fcb360a7de382448200fbbd1b106cc96d3d8099df8d", [:rebar3], [{:unicode_util_compat, "~>0.7.0", [hex: :unicode_util_compat, repo: "hexpm", optional: false]}], "hexpm", "92376eb7894412ed19ac475e4a86f7b413c1b9fbb5bd16dccd57934157944cea"},
"jason": {:hex, :jason, "1.2.2", "ba43e3f2709fd1aa1dce90aaabfd039d000469c05c56f0b8e31978e03fa39052", [:mix], [{:decimal, "~> 1.0 or ~> 2.0", [hex: :decimal, repo: "hexpm", optional: true]}], "hexpm", "18a228f5f0058ee183f29f9eae0805c6e59d61c3b006760668d8d18ff0d12179"},
"metrics": {:hex, :metrics, "1.0.1", "25f094dea2cda98213cecc3aeff09e940299d950904393b2a29d191c346a8486", [:rebar3], [], "hexpm", "69b09adddc4f74a40716ae54d140f93beb0fb8978d8636eaded0c31b6f099f16"},
"mime": {:hex, :mime, "1.5.0", "203ef35ef3389aae6d361918bf3f952fa17a09e8e43b5aa592b93eba05d0fb8d", [:mix], [], "hexpm", "55a94c0f552249fc1a3dd9cd2d3ab9de9d3c89b559c2bd01121f824834f24746"},
"mime": {:hex, :mime, "1.6.0", "dabde576a497cef4bbdd60aceee8160e02a6c89250d6c0b29e56c0dfb00db3d2", [:mix], [], "hexpm", "31a1a8613f8321143dde1dafc36006a17d28d02bdfecb9e95a880fa7aabd19a7"},
"mimerl": {:hex, :mimerl, "1.2.0", "67e2d3f571088d5cfd3e550c383094b47159f3eee8ffa08e64106cdf5e981be3", [:rebar3], [], "hexpm", "f278585650aa581986264638ebf698f8bb19df297f66ad91b18910dfc6e19323"},
"parse_trans": {:hex, :parse_trans, "3.3.1", "16328ab840cc09919bd10dab29e431da3af9e9e7e7e6f0089dd5a2d2820011d8", [:rebar3], [], "hexpm", "07cd9577885f56362d414e8c4c4e6bdf10d43a8767abb92d24cbe8b24c54888b"},
"phoenix": {:hex, :phoenix, "1.5.7", "2923bb3af924f184459fe4fa4b100bd25fa6468e69b2803dfae82698269aa5e0", [:mix], [{:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: true]}, {:phoenix_html, "~> 2.13", [hex: :phoenix_html, repo: "hexpm", optional: true]}, {:phoenix_pubsub, "~> 2.0", [hex: :phoenix_pubsub, repo: "hexpm", optional: false]}, {:plug, "~> 1.10", [hex: :plug, repo: "hexpm", optional: false]}, {:plug_cowboy, "~> 1.0 or ~> 2.2", [hex: :plug_cowboy, repo: "hexpm", optional: true]}, {:plug_crypto, "~> 1.1.2 or ~> 1.2", [hex: :plug_crypto, repo: "hexpm", optional: false]}, {:telemetry, "~> 0.4", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "774cd64417c5a3788414fdbb2be2eb9bcd0c048d9e6ad11a0c1fd67b7c0d0978"},
"phoenix": {:hex, :phoenix, "1.5.8", "71cfa7a9bb9a37af4df98939790642f210e35f696b935ca6d9d9c55a884621a4", [:mix], [{:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: true]}, {:phoenix_html, "~> 2.13", [hex: :phoenix_html, repo: "hexpm", optional: true]}, {:phoenix_pubsub, "~> 2.0", [hex: :phoenix_pubsub, repo: "hexpm", optional: false]}, {:plug, "~> 1.10", [hex: :plug, repo: "hexpm", optional: false]}, {:plug_cowboy, "~> 1.0 or ~> 2.2", [hex: :plug_cowboy, repo: "hexpm", optional: true]}, {:plug_crypto, "~> 1.1.2 or ~> 1.2", [hex: :plug_crypto, repo: "hexpm", optional: false]}, {:telemetry, "~> 0.4", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "35ded0a32f4836168c7ab6c33b88822eccd201bcd9492125a9bea4c54332d955"},
"phoenix_ecto": {:hex, :phoenix_ecto, "4.2.1", "13f124cf0a3ce0f1948cf24654c7b9f2347169ff75c1123f44674afee6af3b03", [:mix], [{:ecto, "~> 3.0", [hex: :ecto, repo: "hexpm", optional: false]}, {:phoenix_html, "~> 2.14.2 or ~> 2.15", [hex: :phoenix_html, repo: "hexpm", optional: true]}, {:plug, "~> 1.0", [hex: :plug, repo: "hexpm", optional: false]}], "hexpm", "478a1bae899cac0a6e02be1deec7e2944b7754c04e7d4107fc5a517f877743c0"},
"phoenix_html": {:hex, :phoenix_html, "2.14.3", "51f720d0d543e4e157ff06b65de38e13303d5778a7919bcc696599e5934271b8", [:mix], [{:plug, "~> 1.5", [hex: :plug, repo: "hexpm", optional: false]}], "hexpm", "efd697a7fff35a13eeeb6b43db884705cba353a1a41d127d118fda5f90c8e80f"},
"phoenix_live_reload": {:hex, :phoenix_live_reload, "1.3.0", "f35f61c3f959c9a01b36defaa1f0624edd55b87e236b606664a556d6f72fd2e7", [:mix], [{:file_system, "~> 0.2.1 or ~> 0.3", [hex: :file_system, repo: "hexpm", optional: false]}, {:phoenix, "~> 1.4", [hex: :phoenix, repo: "hexpm", optional: false]}], "hexpm", "02c1007ae393f2b76ec61c1a869b1e617179877984678babde131d716f95b582"},
"phoenix_pubsub": {:hex, :phoenix_pubsub, "2.0.0", "a1ae76717bb168cdeb10ec9d92d1480fec99e3080f011402c0a2d68d47395ffb", [:mix], [], "hexpm", "c52d948c4f261577b9c6fa804be91884b381a7f8f18450c5045975435350f771"},
"phx_gen_auth": {:hex, :phx_gen_auth, "0.6.0", "4ffbfa5b34ad8178c3dfcb996fed776df425903595cbc8d56a9ae5bc53136810", [:mix], [{:phoenix, "~> 1.5.2", [hex: :phoenix, repo: "hexpm", optional: false]}], "hexpm", "9a801c0f0bc251d8d91d62cecba0ebb6a90b8580fa8843029d931d15164e6ad9"},
"plug": {:hex, :plug, "1.11.0", "f17217525597628298998bc3baed9f8ea1fa3f1160aa9871aee6df47a6e4d38e", [:mix], [{:mime, "~> 1.0", [hex: :mime, repo: "hexpm", optional: false]}, {:plug_crypto, "~> 1.1.1 or ~> 1.2", [hex: :plug_crypto, repo: "hexpm", optional: false]}, {:telemetry, "~> 0.4", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "2d9c633f0499f9dc5c2fd069161af4e2e7756890b81adcbb2ceaa074e8308876"},
"phx_gen_auth": {:hex, :phx_gen_auth, "0.7.0", "2e10e9527b6b71abbfbb4601c7dc4aa4fb9f2db6f9a6be457c468b7f2b0f6319", [:mix], [{:phoenix, "~> 1.5.2", [hex: :phoenix, repo: "hexpm", optional: false]}], "hexpm", "b9dc3e3b866e67c5db8f00f4a2adb28fc8636e794f78600e35aba0e55bdac209"},
"plug": {:hex, :plug, "1.11.1", "f2992bac66fdae679453c9e86134a4201f6f43a687d8ff1cd1b2862d53c80259", [:mix], [{:mime, "~> 1.0", [hex: :mime, repo: "hexpm", optional: false]}, {:plug_crypto, "~> 1.1.1 or ~> 1.2", [hex: :plug_crypto, repo: "hexpm", optional: false]}, {:telemetry, "~> 0.4", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "23524e4fefbb587c11f0833b3910bfb414bf2e2534d61928e920f54e3a1b881f"},
"plug_cowboy": {:hex, :plug_cowboy, "2.4.1", "779ba386c0915027f22e14a48919a9545714f849505fa15af2631a0d298abf0f", [:mix], [{:cowboy, "~> 2.7", [hex: :cowboy, repo: "hexpm", optional: false]}, {:cowboy_telemetry, "~> 0.3", [hex: :cowboy_telemetry, repo: "hexpm", optional: false]}, {:plug, "~> 1.7", [hex: :plug, repo: "hexpm", optional: false]}, {:telemetry, "~> 0.4", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "d72113b6dff7b37a7d9b2a5b68892808e3a9a752f2bf7e503240945385b70507"},
"plug_crypto": {:hex, :plug_crypto, "1.2.0", "1cb20793aa63a6c619dd18bb33d7a3aa94818e5fd39ad357051a67f26dfa2df6", [:mix], [], "hexpm", "a48b538ae8bf381ffac344520755f3007cc10bd8e90b240af98ea29b69683fc2"},
"plug_crypto": {:hex, :plug_crypto, "1.2.2", "05654514ac717ff3a1843204b424477d9e60c143406aa94daf2274fdd280794d", [:mix], [], "hexpm", "87631c7ad914a5a445f0a3809f99b079113ae4ed4b867348dd9eec288cecb6db"},
"postgrex": {:hex, :postgrex, "0.15.8", "f5e782bbe5e8fa178d5e3cd1999c857dc48eda95f0a4d7f7bd92a50e84a0d491", [:mix], [{:connection, "~> 1.0", [hex: :connection, repo: "hexpm", optional: false]}, {:db_connection, "~> 2.1", [hex: :db_connection, repo: "hexpm", optional: false]}, {:decimal, "~> 1.5 or ~> 2.0", [hex: :decimal, repo: "hexpm", optional: false]}, {:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: true]}], "hexpm", "698fbfacea34c4cf22c8281abeb5cf68d99628d541874f085520ab3b53d356fe"},
"ranch": {:hex, :ranch, "1.7.1", "6b1fab51b49196860b733a49c07604465a47bdb78aa10c1c16a3d199f7f8c881", [:rebar3], [], "hexpm", "451d8527787df716d99dc36162fca05934915db0b6141bbdac2ea8d3c7afc7d7"},
"ssl_verify_fun": {:hex, :ssl_verify_fun, "1.1.6", "cf344f5692c82d2cd7554f5ec8fd961548d4fd09e7d22f5b62482e5aeaebd4b0", [:make, :mix, :rebar3], [], "hexpm", "bdb0d2471f453c88ff3908e7686f86f9be327d065cc1ec16fa4540197ea04680"},

View file

@ -13,5 +13,5 @@ fi
curl \
-H Authorization:"token $SRHT_ACCESS_TOKEN" \
--data "manifest=$(jq -R -r --slurp < $MANIFEST)" \
--data "note=recycledcloud-management" \
--data "note=recycledcloud-meta" \
-X POST $BUILDS_INSTANCE/api/jobs | jq