Page Menu
Home
Phabricator
Search
Configure Global Search
Log In
Files
F665873
context_plug.ex
No One
Temporary
Actions
Download File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Award Token
Flag For Later
Size
2 KB
Subscribers
None
context_plug.ex
View Options
defmodule
LSGWeb.ContextPlug
do
import
Plug.Conn
import
Phoenix.Controller
def
init
(
opts
\\
[])
do
opts
||
[]
end
def
get_account
(
conn
)
do
cond
do
get_session
(
conn
,
:account
)
->
get_session
(
conn
,
:account
)
get_session
(
conn
,
:oidc_id
)
->
if
account
=
IRC.Account
.
find_meta_account
(
"identity-id"
,
get_session
(
conn
,
:oidc_id
)),
do
:
account
.
id
true
->
nil
end
end
def
call
(
conn
,
opts
)
do
account
=
with
\
{
:account
,
account_id
}
when
is_binary
(
account_id
)
<-
{
:account
,
get_account
(
conn
)},
{
:account
,
account
}
when
not
is_nil
(
account
)
<-
{
:account
,
IRC.Account
.
get
(
account_id
)}
do
account
else
_
->
nil
end
network
=
Map
.
get
(
conn
.
params
,
"network"
)
network
=
if
network
==
"-"
,
do
:
nil
,
else
:
network
oidc_account
=
IRC.Account
.
find_meta_account
(
"identity-id"
,
get_session
(
conn
,
:oidc_id
))
conns
=
IRC.Connection
.
get_network
(
network
)
chan
=
if
c
=
Map
.
get
(
conn
.
params
,
"chan"
)
do
LSGWeb
.
reformat_chan
(
c
)
end
chan_conn
=
IRC.Connection
.
get_network
(
network
,
chan
)
memberships
=
if
account
do
IRC.Membership
.
of_account
(
account
)
end
auth_required
=
cond
do
Keyword
.
get
(
opts
,
:restrict
)
==
:public
->
false
account
==
nil
->
true
network
==
nil
->
false
Keyword
.
get
(
opts
,
:restrict
)
==
:logged_in
->
false
network
&&
chan
->
!
Enum
.
member?
(
memberships
,
{
network
,
chan
})
network
->
!
Enum
.
any?
(
memberships
,
fn
({
n
,
_
})
->
n
==
network
end
)
end
bot
=
cond
do
network
&&
chan
&&
chan_conn
->
chan_conn
.
nick
network
&&
conns
->
conns
.
nick
true
->
nil
end
cond
do
account
&&
auth_required
->
conn
|>
put_status
(
404
)
|>
text
(
"Page not found"
)
|>
halt
()
auth_required
->
conn
|>
put_status
(
403
)
|>
render
(
LSGWeb.AlcoologView
,
"auth.html"
,
bot
:
bot
,
no_header
:
true
,
network
:
network
)
|>
halt
()
(
network
&&
!
conns
)
->
conn
|>
put_status
(
404
)
|>
text
(
"Page not found"
)
|>
halt
()
(
chan
&&
!
chan_conn
)
->
conn
|>
put_status
(
404
)
|>
text
(
"Page not found"
)
|>
halt
()
true
->
conn
=
conn
|>
assign
(
:network
,
network
)
|>
assign
(
:chan
,
chan
)
|>
assign
(
:bot
,
bot
)
|>
assign
(
:account
,
account
)
|>
assign
(
:oidc_account
,
oidc_account
)
|>
assign
(
:memberships
,
memberships
)
end
end
end
File Metadata
Details
Attached
Mime Type
text/x-ruby
Expires
Sat, Feb 28, 10:02 AM (1 d, 20 h)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
87453
Default Alt Text
context_plug.ex (2 KB)
Attached To
rNOLA Nola
Event Timeline
Log In to Comment