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 - postgresql-contrib
- docker - docker
artifacts: artifacts:
- management/_build/prod/rel/recycledcloud.tar.gz - meta/_build/prod/rel/meta.tar.gz
sources: sources:
- https://code.recycled.cloud/e-Durable/management.git - https://code.recycled.cloud/RecycledCloud/met.git
tasks: tasks:
- setup: | - setup: |
sudo service postgresql setup sudo service postgresql setup
sudo service postgresql start sudo service postgresql start
sudo service docker start sudo service docker start
cd management cd meta
mix local.hex --force mix local.hex --force
mix local.rebar --force mix local.rebar --force
mix deps.get mix deps.get
- build: | - build: |
cd management cd meta
MIX_ENV=test mix deps.compile MIX_ENV=test mix deps.compile
MIX_ENV=test mix compile MIX_ENV=test mix compile
- test: | - test: |
cd management cd meta
sudo docker pull code.ungleich.ch:5050/fnux/e-durable-oci-images/openldap-playground:latest 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 CALL_CONTAINER_RUNTIME_AS_ROOT=1 LDAP_WAIT_LOOPS=100 MIX_ENV=test mix test
- lint: | - lint: |
cd management cd meta
MIX_ENV=test mix credo MIX_ENV=test mix credo
- release: | - release: |
cd management cd meta
MIX_ENV=prod mix compile MIX_ENV=prod mix compile
MIX_ENV=prod mix phx.digest MIX_ENV=prod mix phx.digest
MIX_ENV=prod mix release MIX_ENV=prod mix release
cd _build/prod/rel 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 # management 0.4.0, 2021-04-09
* Initial VM dashboard * 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 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 cloud. It is written in [Elixir](https://elixir-lang.org/), making use of the

View File

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

View File

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

View File

@ -9,7 +9,7 @@ use Mix.Config
# manifest is generated by the `mix phx.digest` task, # manifest is generated by the `mix phx.digest` task,
# which you should run after static files are built and # which you should run after static files are built and
# before starting your production server. # before starting your production server.
config :recycledcloud, RecycledCloudWeb.Endpoint, config :meta, MetaWeb.Endpoint,
url: [host: "example.com", port: 80], url: [host: "example.com", port: 80],
cache_static_manifest: "priv/static/cache_manifest.json" 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 get SSL working, you will need to add the `https` key
# to the previous section and set your `:url` port to 443: # 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], # url: [host: "example.com", port: 443],
# https: [ # https: [
@ -45,7 +45,7 @@ config :logger, level: :info
# We also recommend setting `force_ssl` in your endpoint, ensuring # We also recommend setting `force_ssl` in your endpoint, ensuring
# no data is ever sent via http, always redirecting to https: # no data is ever sent via http, always redirecting to https:
# #
# config :recycledcloud, RecycledCloudWeb.Endpoint, # config :meta, MetaWeb.Endpoint,
# force_ssl: [hsts: true] # force_ssl: [hsts: true]
# #
# Check `Plug.SSL` for all available options in `force_ssl`. # 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 For example: ecto://USER:PASS@HOST/DATABASE
""" """
config :recycledcloud, RecycledCloud.Repo, config :meta, Meta.Repo,
# ssl: true, # ssl: true,
url: database_url, url: database_url,
pool_size: String.to_integer(System.get_env("POOL_SIZE") || "10") 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 You can generate one by calling: mix phx.gen.secret
""" """
config :recycledcloud, RecycledCloudWeb.Endpoint, config :meta, MetaWeb.Endpoint,
http: [ http: [
port: String.to_integer(System.get_env("PORT") || "4000"), port: String.to_integer(System.get_env("PORT") || "4000"),
transport_options: [socket_opts: [:inet6]] transport_options: [socket_opts: [:inet6]]
@ -34,7 +34,7 @@ config :recycledcloud, RecycledCloudWeb.Endpoint,
# If you are doing OTP releases, you need to instruct Phoenix # If you are doing OTP releases, you need to instruct Phoenix
# to start each relevant endpoint: # 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`. # Then you can assemble a release by calling `mix release`.
# See `mix help release` for more information. # 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 # The MIX_TEST_PARTITION environment variable can be used
# to provide built-in test partitioning in CI environment. # to provide built-in test partitioning in CI environment.
# Run `mix help test` for more information. # Run `mix help test` for more information.
config :recycledcloud, RecycledCloud.Repo, config :meta, Meta.Repo,
username: "postgres", username: "postgres",
password: "postgres", password: "postgres",
database: "recycledcloud_test#{System.get_env("MIX_TEST_PARTITION")}", database: "meta_test#{System.get_env("MIX_TEST_PARTITION")}",
hostname: "localhost", hostname: "localhost",
pool: Ecto.Adapters.SQL.Sandbox pool: Ecto.Adapters.SQL.Sandbox
# We don't run a server during test. If one is required, # We don't run a server during test. If one is required,
# you can enable the server option below. # you can enable the server option below.
config :recycledcloud, RecycledCloudWeb.Endpoint, config :meta, MetaWeb.Endpoint,
http: [port: 4002], http: [port: 4002],
server: false server: false
@ -25,7 +25,7 @@ config :recycledcloud, RecycledCloudWeb.Endpoint,
config :logger, level: :warn config :logger, level: :warn
# LDAP configuration # LDAP configuration
config :recycledcloud, :ldap, config :meta, :ldap,
server: "127.0.0.1", server: "127.0.0.1",
port: 3089, port: 3089,
ssl: false, ssl: false,
@ -34,5 +34,5 @@ config :recycledcloud, :ldap,
bind_pw: "admin" bind_pw: "admin"
# Send emails to local memory for testing. # Send emails to local memory for testing.
config :recycledcloud, RecycledCloud.Mailer, config :meta, Meta.Mailer,
adapter: Bamboo.LocalAdapter adapter: Bamboo.LocalAdapter

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -1,8 +1,8 @@
defmodule RecycledCloud.Billing.Partner do defmodule Meta.Billing.Partner do
alias RecycledCloud.Accounts.User alias Meta.Accounts.User
alias RecycledCloud.Billing.Partner alias Meta.Billing.Partner
alias RecycledCloud.Odoo alias Meta.Odoo
alias RecycledCloud.Repo alias Meta.Repo
import Ecto.Changeset import Ecto.Changeset
use Ecto.Schema 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 # We can't use a graphical-only captcha library such as
# https://hex.pm/packages/captcha since it would break accessibility for # https://hex.pm/packages/captcha since it would break accessibility for
# blind people. Let's make it simple maths instead! # 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 require Logger
use GenServer use GenServer
@ -54,7 +54,7 @@ defmodule RecycledCloud.LDAP do
### ###
def search(ldap_conn, field, value, search_timeout \\ 1000) 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 = [ opts = [
{:base, to_charlist(base_dn)}, {:base, to_charlist(base_dn)},
{:scope, :eldap.wholeSubtree()}, {:scope, :eldap.wholeSubtree()},
@ -89,7 +89,7 @@ defmodule RecycledCloud.LDAP do
defp internal_execute_query(query, ldap_conn), do: query.(ldap_conn) defp internal_execute_query(query, ldap_conn), do: query.(ldap_conn)
defp bind(ldap_conn) do defp bind(ldap_conn) do
conf = Application.get_env(:recycledcloud, :ldap, []) conf = Application.get_env(:meta, :ldap, [])
dn = conf |> Keyword.get(:bind_dn) dn = conf |> Keyword.get(:bind_dn)
pw = conf |> Keyword.get(:bind_pw) pw = conf |> Keyword.get(:bind_pw)
@ -98,7 +98,7 @@ defmodule RecycledCloud.LDAP do
# The method is used by the RC.LDAPTestEnvironment module. # The method is used by the RC.LDAPTestEnvironment module.
def connect do def connect do
conf = Application.get_env(:recycledcloud, :ldap, []) conf = Application.get_env(:meta, :ldap, [])
host = Keyword.get(conf, :server, "localhost") |> String.to_charlist host = Keyword.get(conf, :server, "localhost") |> String.to_charlist
opts = [ opts = [

View File

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

View File

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

View File

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

View File

@ -1,4 +1,4 @@
defmodule RecycledCloud.OpenNebula.Schema do defmodule Meta.OpenNebula.Schema do
@moduledoc """ @moduledoc """
Helpers used to process OpenNebula's XSD schema. Helpers used to process OpenNebula's XSD schema.
@ -24,8 +24,8 @@ defmodule RecycledCloud.OpenNebula.Schema do
""" """
require Logger require Logger
alias RecycledCloud.OpenNebula.Schema alias Meta.OpenNebula.Schema
alias RecycledCloud.OpenNebula.Schema.Records alias Meta.OpenNebula.Schema.Records
@opennebula_release "5.12" @opennebula_release "5.12"
@ -33,7 +33,7 @@ defmodule RecycledCloud.OpenNebula.Schema do
# Data-binding: access and extract XSD models. # Data-binding: access and extract XSD models.
defp get_raw(type, object) do 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 {data_dir, extension} = case type do
:xsd -> {"xsd-src", ".xsd"} :xsd -> {"xsd-src", ".xsd"}
:hrl -> {"xsd-records", ".hrl"} :hrl -> {"xsd-records", ".hrl"}
@ -73,8 +73,8 @@ defmodule RecycledCloud.OpenNebula.Schema do
schema = elem(data, 0) schema = elem(data, 0)
if schema in Keyword.keys(Schema.Records.__info__(:macros)) do if schema in Keyword.keys(Schema.Records.__info__(:macros)) do
call = quote do call = quote do
require RecycledCloud.OpenNebula.Schema.Records require Meta.OpenNebula.Schema.Records
RecycledCloud.OpenNebula.Schema.Records."XSD"(:data) Meta.OpenNebula.Schema.Records."XSD"(:data)
end end
replace = fn replace = fn
:XSD, {model, data} -> {model, {model, data}} :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 """ @moduledoc """
Here we define XSD template into something we can play with (Records). 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 code - which is what we're doing right now: the records are defined in .hrl
(erlang headers) by erlsom. (erlang headers) by erlsom.
See RecycledCloud.OpenNebula.Schema module for details. See Meta.OpenNebula.Schema module for details.
""" """
require Record require Record
alias RecycledCloud.OpenNebula.Schema alias Meta.OpenNebula.Schema
@models %{ @models %{
"vm" => Schema.generate_model_for("vm"), "vm" => Schema.generate_model_for("vm"),

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -1,8 +1,8 @@
defmodule RecycledCloudWeb.BillingController do defmodule MetaWeb.BillingController do
use RecycledCloudWeb, :controller use MetaWeb, :controller
alias RecycledCloud.Billing.{Partner, Invoice} alias Meta.Billing.{Partner, Invoice}
alias RecycledCloud.Repo alias Meta.Repo
def current_partner(conn) do def current_partner(conn) do
user = conn.assigns.current_user 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 defmodule MetaWeb.SupportController do
use RecycledCloudWeb, :controller use MetaWeb, :controller
alias RecycledCloud.SupportRequest alias Meta.SupportRequest
alias RecycledCloud.Captcha alias Meta.Captcha
def new(conn, _params) do def new(conn, _params) do
{captcha_text, captcha_result} = Captcha.generate() {captcha_text, captcha_result} = Captcha.generate()

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -4,7 +4,7 @@
<meta charset="utf-8"/> <meta charset="utf-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=edge"/> <meta http-equiv="X-UA-Compatible" content="IE=edge"/>
<meta name="viewport" content="width=device-width, initial-scale=1.0"/> <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") %>"/> <link rel="stylesheet" href="<%= Routes.static_path(@conn, "/css/app.css") %>"/>
</head> </head>
<body> <body>
@ -15,7 +15,7 @@
<img id="nav-logo" src="<%= Routes.static_path(@conn, "/images/cloud.svg") %>"></img> <img id="nav-logo" src="<%= Routes.static_path(@conn, "/images/cloud.svg") %>"></img>
<p class="nav-notice"> <p class="nav-notice">
<small> <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> </small>
</p> </p>
</div> </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 """ @moduledoc """
Conveniences for translating and building error messages. 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 # should be written to the errors.po file. The :count option is
# set by Ecto and indicates we should also apply plural rules. # set by Ecto and indicates we should also apply plural rules.
if count = opts[:count] do if count = opts[:count] do
Gettext.dngettext(RecycledCloudWeb.Gettext, "errors", msg, msg, count, opts) Gettext.dngettext(MetaWeb.Gettext, "errors", msg, msg, count, opts)
else else
Gettext.dgettext(RecycledCloudWeb.Gettext, "errors", msg, opts) Gettext.dgettext(MetaWeb.Gettext, "errors", msg, opts)
end end
end end
end end

View File

@ -1,5 +1,5 @@
defmodule RecycledCloudWeb.ErrorView do defmodule MetaWeb.ErrorView do
use RecycledCloudWeb, :view use MetaWeb, :view
# If you want to customize a particular status code # If you want to customize a particular status code
# for a certain format, you may uncomment below. # 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 defmodule MetaWeb.VirtualMachineHostingView do
use RecycledCloudWeb, :view use MetaWeb, :view
alias RecycledCloud.OpenNebula, as: ONE alias Meta.OpenNebula, as: ONE
alias RecycledCloud.OpenNebula.VM alias Meta.OpenNebula.VM
def render_state(vm) do def render_state(vm) do
state = Map.get(vm, :STATE) |> VM.state_for 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" @shortdoc "Generate erlang records from OpenNebula's XSD templates"
def run(_) do 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"]) xsd_dir = Path.join([priv_dir, "opennebula", @opennebula_release, "xsd-src"])
hrl_dir = Path.join([priv_dir, "opennebula", @opennebula_release, "xsd-records"]) 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 use Mix.Project
def project do def project do
[ [
app: :recycledcloud, app: :meta,
version: "0.4.0", version: "0.4.0",
elixir: "~> 1.7", elixir: "~> 1.7",
elixirc_paths: elixirc_paths(Mix.env()), elixirc_paths: elixirc_paths(Mix.env()),
@ -12,7 +12,7 @@ defmodule RecycledCloud.MixProject do
aliases: aliases(), aliases: aliases(),
deps: deps(), deps: deps(),
releases: [ releases: [
recycledcloud: [ meta: [
include_executables_for: [:unix], include_executables_for: [:unix],
applications: [runtime_tools: :permanent], applications: [runtime_tools: :permanent],
include_erts: true, include_erts: true,
@ -27,7 +27,7 @@ defmodule RecycledCloud.MixProject do
# Type `mix help compile.app` for more information. # Type `mix help compile.app` for more information.
def application do def application do
[ [
mod: {RecycledCloud.Application, []}, mod: {Meta.Application, []},
extra_applications: [:logger, :runtime_tools, :eldap] extra_applications: [:logger, :runtime_tools, :eldap]
] ]
end 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", []}, "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"}, "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"}, "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"}, "comeonin": {:hex, :comeonin, "5.3.2", "5c2f893d05c56ae3f5e24c1b983c2d5dfb88c6d979c9287a76a7feb1e1d8d646", [:mix], [], "hexpm", "d0993402844c49539aeadb3fe46a3c9bd190f1ecf86b6f9ebd71957534c95f04"},
"connection": {:hex, :connection, "1.1.0", "ff2a49c4b75b6fb3e674bfc5536451607270aac754ffd1bdfe175abe4a6d7a68", [:mix], [], "hexpm", "722c1eb0a418fbe91ba7bd59a47e28008a189d47e37e0e7bb85585a016b2869c"}, "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": {: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"}, "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"}, "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"}, "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"}, "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": {: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.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_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"}, "elixir_make": {:hex, :elixir_make, "0.6.2", "7dffacd77dec4c37b39af867cedaabb0b59f6a871f89722c25b28fcd4bd70530", [:mix], [], "hexpm", "03e49eadda22526a7e5279d53321d1cced6552f344ba4e03e619063de75348d9"},
"erlsom": {:hex, :erlsom, "1.5.0", "c5a5cdd0ee0e8dca62bcc4b13ff08da24fdefc16ccd8b25282a2fda2ba1be24a", [:rebar3], [], "hexpm", "55a9dbf9cfa77fcfc108bd8e2c4f9f784dea228a8f4b06ea10b684944946955a"}, "erlsom": {:hex, :erlsom, "1.5.0", "c5a5cdd0ee0e8dca62bcc4b13ff08da24fdefc16ccd8b25282a2fda2ba1be24a", [:rebar3], [], "hexpm", "55a9dbf9cfa77fcfc108bd8e2c4f9f784dea228a8f4b06ea10b684944946955a"},
"file_system": {:hex, :file_system, "0.2.10", "fb082005a9cd1711c05b5248710f8826b02d7d1784e7c3451f9c1231d4fc162d", [:mix], [], "hexpm", "41195edbfb562a593726eda3b3e8b103a309b733ad25f3d642ba49696bf715dc"}, "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"}, "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"}, "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"}, "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"}, "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"}, "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"}, "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"}, "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"}, "mimerl": {:hex, :mimerl, "1.2.0", "67e2d3f571088d5cfd3e550c383094b47159f3eee8ffa08e64106cdf5e981be3", [:rebar3], [], "hexpm", "f278585650aa581986264638ebf698f8bb19df297f66ad91b18910dfc6e19323"},
"parse_trans": {:hex, :parse_trans, "3.3.1", "16328ab840cc09919bd10dab29e431da3af9e9e7e7e6f0089dd5a2d2820011d8", [:rebar3], [], "hexpm", "07cd9577885f56362d414e8c4c4e6bdf10d43a8767abb92d24cbe8b24c54888b"}, "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_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_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_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"}, "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"}, "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.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"}, "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_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"}, "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"}, "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"}, "ssl_verify_fun": {:hex, :ssl_verify_fun, "1.1.6", "cf344f5692c82d2cd7554f5ec8fd961548d4fd09e7d22f5b62482e5aeaebd4b0", [:make, :mix, :rebar3], [], "hexpm", "bdb0d2471f453c88ff3908e7686f86f9be327d065cc1ec16fa4540197ea04680"},

View File

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