Skip to content

Instantly share code, notes, and snippets.

@hopewise
Created March 29, 2017 07:29
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save hopewise/aec9ed8b8fe4ced2f818091e4940ff8e to your computer and use it in GitHub Desktop.
Save hopewise/aec9ed8b8fe4ced2f818091e4940ff8e to your computer and use it in GitHub Desktop.
defmodule Trackware.Schools.SchoolSocket do
use Phoenix.Socket
import Joken
import Logger
alias Trackware.Schools.Repo
alias Trackware.Schools.User
alias Trackware.Schools.Bus
alias Trackware.UserConfig
## Channels
#channel "users_by_token:*", Trackware.UserChannel
# individual channel
channel "drivers:*", Trackware.Schools.UserChannel
channel "parents:*", Trackware.Schools.UserChannel
channel "admins:*", Trackware.Schools.UserChannel
channel "buses:*", Trackware.Schools.BusChannel
channel "process:*", Trackware.CsvChannel
## Transports
transport :websocket, Phoenix.Transports.WebSocket
transport :longpoll, Phoenix.Transports.LongPoll
# Socket params are passed from the client and can
# be used to verify and authenticate a user. After
# verification, you can put default into
# the socket that will be set for all channels, ie
#
# {:ok, assign(socket, :user_id, verified_user_id)}
#
# To deny connection, return `:error`.
#
# See `Phoenix.Token` documentation for examples in
# performing token verification on connect.
def connect(params, socket) do
Logger.info "Try to connect"
case params do
%{"token" => m_sent_token, "csv" => true} ->
{:error, "not implemented yet"}
#csv_connect socket, m_sent_token
%{"token" => m_sent_token, "client_type" => client_type} ->
Logger.info "client _ type"
client_connect socket, m_sent_token, client_type
_ ->
{:error, "it seems that jwt is not sent!"}
end
end
defp client_connect socket, sent_token, client_type do
Logger.info "1 client_connect"
sent_token= Trackware.JWT.clean_token sent_token
my_verified_token = sent_token
|> token
|> with_signer(hs256(Application.get_env(:trackware, :schools_jwt_secret_key)))
|> verify
Logger.info "2 client_connect"
case get_data(my_verified_token) do
{:ok, payload} ->
Logger.info "3 client_connect"
case client_type do
"bus" ->
#bus= Trackware.School.Repo.get!(Bus, payload["bus_id"])
socket= assign(socket, :bus_id, payload["bus_id"])
end
Logger.info "4 client_connect"
{:ok, socket}
{:error, msg } ->
#there is a problem here:
Logger.info "Invalid token, #{msg}"
{:error, msg}
end
end
end
@hopewise
Copy link
Author

hopewise commented Mar 29, 2017

Error I get:

** (exit) an exception was raised:
** (UndefinedFunctionError) function Trackware.Schools.SchoolSocket.id/1 is undefined or private
(trackware) Trackware.Schools.SchoolSocket.id(%Phoenix.Socket{assigns: %{bus_id: 3}, channel: nil, channel_pid: nil, endpoint: Trackware.Schools.Endpoint, handler: Trackware.Schools.SchoolSocket, id: nil, joined: false, pubsub_server: Trackware.PubSub, ref: nil, serializer: Phoenix.Transports.WebSocketSerializer, topic: nil, transport: Phoenix.Transports.WebSocket, transport_name: :websocket, transport_pid: #PID<0.927.0>})
(phoenix) lib/phoenix/socket/transport.ex:169: Phoenix.Socket.Transport.connect_vsn/6
(phoenix) lib/phoenix/transports/websocket.ex:73: Phoenix.Transports.WebSocket.init/2
(phoenix) lib/phoenix/endpoint/cowboy_websocket.ex:12: Phoenix.Endpoint.CowboyWebSocket.init/3
(cowboy) /Users/samir/Documents/projects/elixir/deps/cowboy/src/cowboy_handler.erl:64: :cowboy_handler.handler_init/4
(cowboy) /Users/samir/Documents/projects/elixir/deps/cowboy/src/cow

boy_protocol.erl:442: :cowboy_protocol.execute/4

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment