fix some code style and add checks to ci

Signed-off-by: Thomas Citharel <tcit@tcit.fr>
This commit is contained in:
Thomas Citharel
2018-01-14 17:56:50 +01:00
parent fc89c563ec
commit 1217361b6c
64 changed files with 242 additions and 108 deletions

View File

@@ -1,9 +1,9 @@
defmodule Eventos do
@moduledoc """
Eventos keeps the contexts that define your domain
and business logic.
Eventos is a decentralized and federated Meetup-like using [ActivityPub](http://activitypub.rocks/).
Contexts are also responsible for managing your data, regardless
if it comes from the database, an external API or others.
It consists of an API server build with [Elixir](http://elixir-lang.github.io/) and the [Phoenix Framework](https://hexdocs.pm/phoenix).
Eventos relies on `Guardian` for auth and `Geo`/Postgis for geographical informations.
"""
end

View File

@@ -1,4 +1,7 @@
defmodule Eventos.Accounts.Account do
@moduledoc """
Represents an account (local and remote users)
"""
use Ecto.Schema
import Ecto.Changeset
alias Eventos.Accounts.{Account, User}

View File

@@ -5,7 +5,6 @@ defmodule Eventos.Accounts do
import Ecto.Query, warn: false
alias Eventos.Repo
import Logger
alias Eventos.Accounts.Account
@@ -37,12 +36,12 @@ defmodule Eventos.Accounts do
"""
def get_account!(id) do
account = Repo.get!(Account, id)
Repo.get!(Account, id)
end
def get_account_with_everything!(id) do
account = Repo.get!(Account, id)
|> Repo.preload :organized_events
Repo.preload(account, :organized_events)
end
@doc """
@@ -126,8 +125,8 @@ defmodule Eventos.Accounts do
end
def list_users_with_accounts do
Repo.all(User)
|> Repo.preload :account
users = Repo.all(User)
Repo.preload(users, :account)
end
@doc """
@@ -147,8 +146,8 @@ defmodule Eventos.Accounts do
def get_user!(id), do: Repo.get!(User, id)
def get_user_with_account!(id) do
Repo.get!(User, id)
|> Repo.preload :account
user = Repo.get!(User, id)
Repo.preload(user, :account)
end
@doc """
@@ -156,7 +155,7 @@ defmodule Eventos.Accounts do
"""
def find_by_email(email) do
user = Repo.get_by(User, email: email)
|> Repo.preload :account
Repo.preload(user, :account)
end
@doc """
@@ -199,23 +198,13 @@ defmodule Eventos.Accounts do
account_with_user = Ecto.Changeset.put_assoc(account, :user, user)
try do
coucou = Eventos.Repo.insert!(account_with_user)
Eventos.Repo.insert!(account_with_user)
user = find_by_email(email)
{:ok, user}
rescue
e in Ecto.InvalidChangesetError ->
Logger.debug(inspect e)
{:error, e.changeset.changes.user.errors}
end
# with {:ok, %Account{} = account} <- create_account(%{username: username, suspended: false, domain: nil, private_key: privkey, public_key: pubkey, uri: "h", url: "h"}) do
# case create_user(%{email: email, password: password, account: account}) do
# {:ok, %User{} = user } ->
# {:ok, user}
# {:error, %Ecto.Changeset{} = changeset} ->
# {:error, changeset}
# end
# end
end

View File

@@ -1,4 +1,7 @@
defmodule Eventos.Accounts.User do
@moduledoc """
Represents a local user
"""
use Ecto.Schema
import Ecto.Changeset
alias Eventos.Accounts.{Account, User}

View File

@@ -1,4 +1,7 @@
defmodule Eventos.Application do
@moduledoc """
The Eventos application
"""
use Application
# See https://hexdocs.pm/elixir/Application.html

View File

@@ -1,4 +1,7 @@
defmodule Eventos.Events.Category do
@moduledoc """
Represents a category for events
"""
use Ecto.Schema
import Ecto.Changeset
alias Eventos.Events.Category

View File

@@ -1,4 +1,7 @@
defmodule Eventos.Events.Event.TitleSlug do
@moduledoc """
Generates a slug for an event title
"""
alias Eventos.Events.Event
import Ecto.Query
alias Eventos.Repo
@@ -17,25 +20,16 @@ defmodule Eventos.Events.Event.TitleSlug do
nil -> slug
_event ->
slug
|> increment_slug
|> Eventos.Slug.increment_slug()
|> build_unique_slug(changeset)
end
end
defp increment_slug(slug) do
case List.pop_at(String.split(slug, "-"), -1) do
{nil, _} ->
slug
{suffix, slug_parts} ->
case Integer.parse(suffix) do
{id, _} -> Enum.join(slug_parts, "-") <> "-" <> Integer.to_string(id + 1)
:error -> slug <> "-1"
end
end
end
end
defmodule Eventos.Events.Event do
@moduledoc """
Represents an event
"""
use Ecto.Schema
import Ecto.Changeset
alias Eventos.Events.{Event, Participant, Request, Tag, Session, Track}
@@ -72,4 +66,4 @@ defmodule Eventos.Events.Event do
|> TitleSlug.maybe_generate_slug()
|> TitleSlug.unique_constraint()
end
end
end

View File

@@ -7,7 +7,6 @@ defmodule Eventos.Events do
alias Eventos.Repo
alias Eventos.Events.Event
alias Eventos.Accounts.Account
@doc """
Returns the list of events.

View File

@@ -1,4 +1,7 @@
defmodule Eventos.Events.Participant do
@moduledoc """
Represents a participant, an account participating to an event
"""
use Ecto.Schema
import Ecto.Changeset
alias Eventos.Events.{Participant, Event}

View File

@@ -1,4 +1,7 @@
defmodule Eventos.Events.Request do
@moduledoc """
Represents an account request to join an event
"""
use Ecto.Schema
import Ecto.Changeset
alias Eventos.Events.{Request, Event}

View File

@@ -1,4 +1,7 @@
defmodule Eventos.Events.Session do
@moduledoc """
Represents a session for an event (such as a talk at a conference)
"""
use Ecto.Schema
import Ecto.Changeset
alias Eventos.Events.{Session, Event, Track}

View File

@@ -1,4 +1,7 @@
defmodule Eventos.Events.Tag.TitleSlug do
@moduledoc """
Generates slugs for tags
"""
alias Eventos.Events.Tag
import Ecto.Query
alias Eventos.Repo
@@ -17,25 +20,16 @@ defmodule Eventos.Events.Tag.TitleSlug do
nil -> slug
_story ->
slug
|> increment_slug
|> Eventos.Slug.increment_slug()
|> build_unique_slug(changeset)
end
end
defp increment_slug(slug) do
case List.pop_at(String.split(slug, "-"), -1) do
{nil, _} ->
slug
{suffix, slug_parts} ->
case Integer.parse(suffix) do
{id, _} -> Enum.join(slug_parts, "-") <> "-" <> Integer.to_string(id + 1)
:error -> slug <> "-1"
end
end
end
end
defmodule Eventos.Events.Tag do
@moduledoc """
Represents a tag for events
"""
use Ecto.Schema
import Ecto.Changeset
alias Eventos.Events.Tag
@@ -56,4 +50,4 @@ defmodule Eventos.Events.Tag do
|> TitleSlug.maybe_generate_slug()
|> TitleSlug.unique_constraint()
end
end
end

View File

@@ -1,4 +1,7 @@
defmodule Eventos.Events.Track do
@moduledoc """
Represents a track for an event (such as a theme) having multiple sessions
"""
use Ecto.Schema
import Ecto.Changeset
alias Eventos.Events.{Track, Event, Session}

View File

@@ -1,4 +1,7 @@
defmodule Eventos.Groups.Group.TitleSlug do
@moduledoc """
Slug generation for groups
"""
alias Eventos.Groups.Group
import Ecto.Query
alias Eventos.Repo
@@ -17,25 +20,16 @@ defmodule Eventos.Groups.Group.TitleSlug do
nil -> slug
_story ->
slug
|> increment_slug
|> Eventos.Slug.increment_slug()
|> build_unique_slug(changeset)
end
end
defp increment_slug(slug) do
case List.pop_at(String.split(slug, "-"), -1) do
{nil, _} ->
slug
{suffix, slug_parts} ->
case Integer.parse(suffix) do
{id, _} -> Enum.join(slug_parts, "-") <> "-" <> Integer.to_string(id + 1)
:error -> slug <> "-1"
end
end
end
end
defmodule Eventos.Groups.Group do
@moduledoc """
Represents a group
"""
use Ecto.Schema
import Ecto.Changeset
alias Eventos.Groups.{Group, Member, Request}
@@ -63,4 +57,4 @@ defmodule Eventos.Groups.Group do
|> TitleSlug.maybe_generate_slug()
|> TitleSlug.unique_constraint()
end
end
end

View File

@@ -1,4 +1,7 @@
defmodule Eventos.Groups.Member do
@moduledoc """
Represents the membership of an account to a group
"""
use Ecto.Schema
import Ecto.Changeset
alias Eventos.Groups.{Member, Group}

View File

@@ -1,4 +1,7 @@
defmodule Eventos.Groups.Request do
@moduledoc """
Represents a group request, when an user wants to be member of a group
"""
use Ecto.Schema
import Ecto.Changeset
alias Eventos.Groups.Request

View File

@@ -1,3 +1,3 @@
Postgrex.Types.define(Eventos.PostgresTypes,
[Geo.PostGIS.Extension] ++ Ecto.Adapters.Postgres.extensions(),
json: Poison)
json: Poison)

View File

@@ -1,4 +1,7 @@
defmodule Eventos.Repo do
@moduledoc """
Eventos Repo
"""
use Ecto.Repo, otp_app: :eventos
@doc """

16
lib/eventos/slug.ex Normal file
View File

@@ -0,0 +1,16 @@
defmodule Eventos.Slug do
@moduledoc """
Common functions for slug generation
"""
def increment_slug(slug) do
case List.pop_at(String.split(slug, "-"), -1) do
{nil, _} ->
slug
{suffix, slug_parts} ->
case Integer.parse(suffix) do
{id, _} -> Enum.join(slug_parts, "-") <> "-" <> Integer.to_string(id + 1)
:error -> slug <> "-1"
end
end
end
end

View File

@@ -1,8 +1,11 @@
defmodule EventosWeb.AuthErrorHandler do
@moduledoc """
In case we have an auth error
"""
import Plug.Conn
def auth_error(conn, {type, _reason}, _opts) do
body = Poison.encode!(%{message: to_string(type)})
send_resp(conn, 401, body)
end
end
end

View File

@@ -1,4 +1,7 @@
defmodule EventosWeb.AuthPipeline do
@moduledoc """
Handles the app sessions
"""
use Guardian.Plug.Pipeline, otp_app: :eventos,
module: EventosWeb.Guardian,
@@ -8,4 +11,4 @@ defmodule EventosWeb.AuthPipeline do
plug Guardian.Plug.EnsureAuthenticated
plug Guardian.Plug.LoadResource, ensure: true
end
end

View File

@@ -1,10 +1,13 @@
defmodule EventosWeb.UserSocket do
@moduledoc """
Channel for User
"""
use Phoenix.Socket
## Channels
# Channels
# channel "room:*", EventosWeb.RoomChannel
## Transports
# Transports
transport :websocket, Phoenix.Transports.WebSocket
# transport :longpoll, Phoenix.Transports.LongPoll

View File

@@ -1,9 +1,11 @@
defmodule EventosWeb.AccountController do
@moduledoc """
Controller for Accounts
"""
use EventosWeb, :controller
alias Eventos.Accounts
alias Eventos.Accounts.Account
import Logger
action_fallback EventosWeb.FallbackController

View File

@@ -1,4 +1,7 @@
defmodule EventosWeb.CategoryController do
@moduledoc """
Controller for Categories
"""
use EventosWeb, :controller
alias Eventos.Events

View File

@@ -1,4 +1,7 @@
defmodule EventosWeb.EventController do
@moduledoc """
Controller for Events
"""
use EventosWeb, :controller
alias Eventos.Events

View File

@@ -1,4 +1,7 @@
defmodule EventosWeb.GroupController do
@moduledoc """
Controller for Groups
"""
use EventosWeb, :controller
alias Eventos.Groups

View File

@@ -1,4 +1,7 @@
defmodule EventosWeb.PageController do
@moduledoc """
Controller to load our webapp
"""
use EventosWeb, :controller
plug :put_layout, false

View File

@@ -1,4 +1,7 @@
defmodule EventosWeb.SessionController do
@moduledoc """
Controller for (event) Sessions
"""
use EventosWeb, :controller
alias Eventos.Events

View File

@@ -1,4 +1,7 @@
defmodule EventosWeb.TagController do
@moduledoc """
Controller for Tags
"""
use EventosWeb, :controller
alias Eventos.Events

View File

@@ -1,4 +1,7 @@
defmodule EventosWeb.TrackController do
@moduledoc """
Controller for Tracks
"""
use EventosWeb, :controller
alias Eventos.Events

View File

@@ -1,6 +1,8 @@
defmodule EventosWeb.UserController do
@moduledoc """
Controller for Users
"""
use EventosWeb, :controller
import Logger
alias Eventos.Accounts
alias Eventos.Accounts.User
@@ -16,11 +18,10 @@ defmodule EventosWeb.UserController do
def register(conn, %{"username" => username, "email" => email, "password" => password}) do
case Accounts.register(%{email: email, password: password, username: username}) do
{:ok, %User{} = user} ->
Logger.debug(inspect user)
{:ok, token, _claims} = EventosWeb.Guardian.encode_and_sign(user)
conn
|> put_status(:created)
|> render "show_with_token.json", %{token: token, user: user}
|> render("show_with_token.json", %{token: token, user: user})
{:error, error} ->
conn
|> put_resp_content_type("application/json")
@@ -30,12 +31,14 @@ defmodule EventosWeb.UserController do
def show_current_account(conn, _params) do
user = Guardian.Plug.current_resource(conn)
|> Repo.preload :account
user
|> Repo.preload(:account)
render(conn, "show_simple.json", user: user)
end
defp handle_changeset_errors(errors) do
Enum.map(errors, fn {field, detail} ->
errors
|> Enum.map(fn {field, detail} ->
"#{field} " <> render_detail(detail)
end)
|> Enum.join

View File

@@ -1,8 +1,10 @@
defmodule EventosWeb.UserSessionController do
@moduledoc """
Controller for user sessions
"""
use EventosWeb, :controller
alias Eventos.Accounts.User
alias Eventos.Accounts
import Logger
def sign_in(conn, %{"email" => email, "password" => password}) do
case Accounts.find_by_email(email) do
@@ -22,7 +24,7 @@ defmodule EventosWeb.UserSessionController do
def sign_out(conn, _params) do
conn
|> Guardian.Plug.sign_out()
|> EventosWeb.Guardian.Plug.sign_out()
|> send_resp(204, "")
end
end
end

View File

@@ -1,4 +1,7 @@
defmodule EventosWeb.Endpoint do
@moduledoc """
Endpoint for Eventos app
"""
use Phoenix.Endpoint, otp_app: :eventos
socket "/socket", EventosWeb.UserSocket

View File

@@ -1,15 +1,16 @@
defmodule EventosWeb.Guardian do
@moduledoc """
Handles the JWT tokens encoding and decoding
"""
use Guardian, otp_app: :eventos, permissions: %{
superuser: [:moderate, :super],
user: [:base]
}
import Logger
alias Eventos.Accounts
alias Eventos.Accounts.{Account, User}
alias Eventos.Accounts.User
def subject_for_token(user = %User{}, _claims) do
def subject_for_token(%User{} = user, _claims) do
{:ok, "User:" <> to_string(user.id)}
end
@@ -19,8 +20,6 @@ defmodule EventosWeb.Guardian do
def resource_from_claims(%{"sub" => "User:" <> uid_str}) do
try do
Logger.debug("Inspecting resource token")
Logger.debug(inspect uid_str)
case Integer.parse(uid_str) do
{uid, ""} ->
{:ok, Accounts.get_user_with_account!(uid)}
@@ -32,9 +31,7 @@ defmodule EventosWeb.Guardian do
end
end
def resource_from_claims(claims) do
Logger.debug("Check bad resource")
Logger.debug(inspect claims)
def resource_from_claims(_) do
{:error, :reason_for_error}
end
@@ -45,7 +42,6 @@ defmodule EventosWeb.Guardian do
end
def on_verify(claims, token, _options) do
Logger.debug(inspect claims)
with {:ok, _} <- Guardian.DB.on_verify(claims, token) do
{:ok, claims}
end
@@ -62,4 +58,4 @@ defmodule EventosWeb.Guardian do
# |> encode_permissions_into_claims!(Keyword.get(opts, :permissions))
# {:ok, claims}
# end
end
end

View File

@@ -1,4 +1,7 @@
defmodule EventosWeb.Router do
@moduledoc """
Router for eventos app
"""
use EventosWeb, :router
pipeline :api do

View File

@@ -1,4 +1,7 @@
defmodule EventosWeb.AccountView do
@moduledoc """
View for Accounts
"""
use EventosWeb, :view
alias EventosWeb.AccountView

View File

@@ -1,4 +1,7 @@
defmodule EventosWeb.CategoryView do
@moduledoc """
View for Categories
"""
use EventosWeb, :view
alias EventosWeb.CategoryView

View File

@@ -1,4 +1,7 @@
defmodule EventosWeb.ChangesetView do
@moduledoc """
View for changesets in case of errors
"""
use EventosWeb, :view
@doc """

View File

@@ -1,4 +1,7 @@
defmodule EventosWeb.ErrorView do
@moduledoc """
View for errors
"""
use EventosWeb, :view
def render("404.html", _assigns) do

View File

@@ -1,4 +1,7 @@
defmodule EventosWeb.EventView do
@moduledoc """
View for Events
"""
use EventosWeb, :view
alias EventosWeb.EventView

View File

@@ -1,4 +1,7 @@
defmodule EventosWeb.GroupView do
@moduledoc """
View for Groups
"""
use EventosWeb, :view
alias EventosWeb.GroupView

View File

@@ -1,4 +1,7 @@
defmodule EventosWeb.MemberView do
@moduledoc """
View for Members
"""
use EventosWeb, :view
alias EventosWeb.MemberView

View File

@@ -1,3 +1,6 @@
defmodule EventosWeb.PageView do
@moduledoc """
View for our webapp
"""
use EventosWeb, :view
end

View File

@@ -1,4 +1,7 @@
defmodule EventosWeb.ParticipantView do
@moduledoc """
View for Participants
"""
use EventosWeb, :view
alias EventosWeb.ParticipantView

View File

@@ -1,4 +1,7 @@
defmodule EventosWeb.RequestView do
@moduledoc """
View for event request
"""
use EventosWeb, :view
alias EventosWeb.RequestView

View File

@@ -1,4 +1,7 @@
defmodule EventosWeb.SessionView do
@moduledoc """
View for event Sessions
"""
use EventosWeb, :view
alias EventosWeb.SessionView

View File

@@ -1,4 +1,7 @@
defmodule EventosWeb.TagView do
@moduledoc """
View for Tags
"""
use EventosWeb, :view
alias EventosWeb.TagView

View File

@@ -1,4 +1,7 @@
defmodule EventosWeb.TrackView do
@moduledoc """
View for Tracks
"""
use EventosWeb, :view
alias EventosWeb.TrackView

View File

@@ -1,4 +1,7 @@
defmodule EventosWeb.UserSessionView do
@moduledoc """
View for user Sessions
"""
use EventosWeb, :view
def render("token.json", %{token: token, user: user}) do

View File

@@ -1,4 +1,7 @@
defmodule EventosWeb.UserView do
@moduledoc """
View for Users
"""
use EventosWeb, :view
alias EventosWeb.UserView
alias EventosWeb.AccountView