mirror of
https://github.com/iv-org/invidious.git
synced 2025-08-28 23:48:31 +00:00
Split sign-in and sign-out pages
This commit is contained in:
parent
b3ee685a70
commit
0f20d2d8ee
@ -14,22 +14,9 @@ module Invidious::Routes::Login
|
|||||||
return error_template(400, "Login has been disabled by administrator.")
|
return error_template(400, "Login has been disabled by administrator.")
|
||||||
end
|
end
|
||||||
|
|
||||||
email = nil
|
|
||||||
password = nil
|
|
||||||
captcha = nil
|
|
||||||
|
|
||||||
account_type = env.params.query["type"]?
|
|
||||||
account_type ||= "invidious"
|
|
||||||
|
|
||||||
captcha_type = env.params.query["captcha"]?
|
|
||||||
captcha_type ||= "image"
|
|
||||||
|
|
||||||
templated "user/login"
|
templated "user/login"
|
||||||
end
|
end
|
||||||
|
|
||||||
def self.signup_page(env)
|
|
||||||
end
|
|
||||||
|
|
||||||
def self.login(env)
|
def self.login(env)
|
||||||
locale = env.get("preferences").as(Preferences).locale
|
locale = env.get("preferences").as(Preferences).locale
|
||||||
|
|
||||||
@ -84,6 +71,32 @@ module Invidious::Routes::Login
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def self.signup_page(env)
|
||||||
|
locale = env.get("preferences").as(Preferences).locale
|
||||||
|
|
||||||
|
user = env.get? "user"
|
||||||
|
|
||||||
|
referer = get_referer(env, "/feed/subscriptions")
|
||||||
|
|
||||||
|
return env.redirect referer if user
|
||||||
|
|
||||||
|
if !CONFIG.registration_enabled
|
||||||
|
return error_template(400, "Registration has been disabled by administrator.")
|
||||||
|
end
|
||||||
|
|
||||||
|
email = nil
|
||||||
|
password = nil
|
||||||
|
captcha = nil
|
||||||
|
|
||||||
|
account_type = env.params.query["type"]?
|
||||||
|
account_type ||= "invidious"
|
||||||
|
|
||||||
|
captcha_type = env.params.query["captcha"]?
|
||||||
|
captcha_type ||= "image"
|
||||||
|
|
||||||
|
templated "user/register"
|
||||||
|
end
|
||||||
|
|
||||||
def self.signup(env)
|
def self.signup(env)
|
||||||
locale = env.get("preferences").as(Preferences).locale
|
locale = env.get("preferences").as(Preferences).locale
|
||||||
referer = get_referer(env, "/feed/subscriptions")
|
referer = get_referer(env, "/feed/subscriptions")
|
||||||
@ -95,14 +108,14 @@ module Invidious::Routes::Login
|
|||||||
email = env.params.body["email"]?.try &.downcase.byte_slice(0, 254)
|
email = env.params.body["email"]?.try &.downcase.byte_slice(0, 254)
|
||||||
password = env.params.body["password"]?
|
password = env.params.body["password"]?
|
||||||
|
|
||||||
if password.nil? || password.empty?
|
|
||||||
return error_template(401, "Password cannot be empty")
|
|
||||||
end
|
|
||||||
|
|
||||||
if email.nil? || email.empty?
|
if email.nil? || email.empty?
|
||||||
return error_template(401, "User ID is a required field")
|
return error_template(401, "User ID is a required field")
|
||||||
end
|
end
|
||||||
|
|
||||||
|
if password.nil? || password.empty?
|
||||||
|
return error_template(401, "Password cannot be empty")
|
||||||
|
end
|
||||||
|
|
||||||
# See https://security.stackexchange.com/a/39851
|
# See https://security.stackexchange.com/a/39851
|
||||||
if password.bytesize > 55
|
if password.bytesize > 55
|
||||||
return error_template(400, "Password cannot be longer than 55 characters")
|
return error_template(400, "Password cannot be longer than 55 characters")
|
||||||
@ -129,14 +142,13 @@ module Invidious::Routes::Login
|
|||||||
captcha = Invidious::User::Captcha.generate_text(HMAC_KEY)
|
captcha = Invidious::User::Captcha.generate_text(HMAC_KEY)
|
||||||
end
|
end
|
||||||
|
|
||||||
return templated "user/login"
|
return templated "user/register"
|
||||||
end
|
end
|
||||||
|
|
||||||
tokens = env.params.body.select { |k, _| k.match(/^token\[\d+\]$/) }.map { |_, v| v }
|
tokens = env.params.body.select { |k, _| k.match(/^token\[\d+\]$/) }.map { |_, v| v }
|
||||||
|
|
||||||
answer ||= ""
|
answer ||= ""
|
||||||
captcha_type ||= "image"
|
captcha_type ||= "image"
|
||||||
|
|
||||||
case captcha_type
|
case captcha_type
|
||||||
when "image"
|
when "image"
|
||||||
answer = answer.lstrip('0')
|
answer = answer.lstrip('0')
|
||||||
|
@ -55,8 +55,11 @@ module Invidious::Routing
|
|||||||
def register_user_routes
|
def register_user_routes
|
||||||
# User login/out
|
# User login/out
|
||||||
get "/login", Routes::Login, :login_page
|
get "/login", Routes::Login, :login_page
|
||||||
get "/signup", Routes::Login, :signup_page
|
|
||||||
post "/login", Routes::Login, :login
|
post "/login", Routes::Login, :login
|
||||||
|
|
||||||
|
get "/signup", Routes::Login, :signup_page
|
||||||
|
post "/signup", Routes::Login, :signup
|
||||||
|
|
||||||
post "/signout", Routes::Login, :signout
|
post "/signout", Routes::Login, :signout
|
||||||
|
|
||||||
# User preferences
|
# User preferences
|
||||||
|
@ -7,75 +7,23 @@
|
|||||||
<div class="pure-u-1 pure-u-lg-1-5"></div>
|
<div class="pure-u-1 pure-u-lg-1-5"></div>
|
||||||
<div class="pure-u-1 pure-u-lg-3-5">
|
<div class="pure-u-1 pure-u-lg-3-5">
|
||||||
<div class="h-box">
|
<div class="h-box">
|
||||||
<% case account_type when %>
|
<form class="pure-form pure-form-stacked" action="/login?referer=<%= URI.encode_www_form(referer) %>&type=invidious" method="post">
|
||||||
<% else # "invidious" %>
|
<fieldset>
|
||||||
<form class="pure-form pure-form-stacked" action="/login?referer=<%= URI.encode_www_form(referer) %>&type=invidious" method="post">
|
<label for="email"><%= translate(locale, "User ID") %> :</label>
|
||||||
<fieldset>
|
<input required class="pure-input-1" name="email" type="text" placeholder="<%= translate(locale, "User ID") %>">
|
||||||
<% if email %>
|
|
||||||
<input name="email" type="hidden" value="<%= HTML.escape(email) %>">
|
|
||||||
<% else %>
|
|
||||||
<label for="email"><%= translate(locale, "User ID") %> :</label>
|
|
||||||
<input required class="pure-input-1" name="email" type="text" placeholder="<%= translate(locale, "User ID") %>">
|
|
||||||
<% end %>
|
|
||||||
|
|
||||||
<% if password %>
|
<label for="password"><%= translate(locale, "Password") %> :</label>
|
||||||
<input name="password" type="hidden" value="<%= HTML.escape(password) %>">
|
<input required class="pure-input-1" name="password" type="password" placeholder="<%= translate(locale, "Password") %>">
|
||||||
<% else %>
|
|
||||||
<label for="password"><%= translate(locale, "Password") %> :</label>
|
|
||||||
<input required class="pure-input-1" name="password" type="password" placeholder="<%= translate(locale, "Password") %>">
|
|
||||||
<% end %>
|
|
||||||
|
|
||||||
<% if captcha %>
|
<div class="account-page-action-bar">
|
||||||
<% case captcha_type when %>
|
<a href="/signup" id="signup-link"><%= translate(locale, ("Create an account")) %> </a>
|
||||||
<% when "image" %>
|
|
||||||
<% captcha = captcha.not_nil! %>
|
|
||||||
<img style="width:50%" src='<%= captcha[:question] %>'/>
|
|
||||||
<% captcha[:tokens].each_with_index do |token, i| %>
|
|
||||||
<input type="hidden" name="token[<%= i %>]" value="<%= HTML.escape(token) %>">
|
|
||||||
<% end %>
|
|
||||||
<input type="hidden" name="captcha_type" value="image">
|
|
||||||
<label for="answer"><%= translate(locale, "Time (h:mm:ss):") %></label>
|
|
||||||
<input type="text" name="answer" type="text" placeholder="h:mm:ss">
|
|
||||||
<% else # "text" %>
|
|
||||||
<% captcha = captcha.not_nil! %>
|
|
||||||
<% captcha[:tokens].each_with_index do |token, i| %>
|
|
||||||
<input type="hidden" name="token[<%= i %>]" value="<%= HTML.escape(token) %>">
|
|
||||||
<% end %>
|
|
||||||
<input type="hidden" name="captcha_type" value="text">
|
|
||||||
<label for="answer"><%= captcha[:question] %></label>
|
|
||||||
<input type="text" name="answer" type="text" placeholder="<%= translate(locale, "Answer") %>">
|
|
||||||
<% end %>
|
|
||||||
|
|
||||||
<button type="submit" name="action" value="signin" class="pure-button pure-button-primary">
|
<button type="submit" name="action" value="signin" class="pure-button pure-button-primary" id="signin-button">
|
||||||
<%= translate(locale, "Register") %>
|
<%= translate(locale, "Sign In") %>
|
||||||
</button>
|
</button>
|
||||||
|
</div>
|
||||||
<% case captcha_type when %>
|
</fieldset>
|
||||||
<% when "image" %>
|
</form>
|
||||||
<label>
|
|
||||||
<button type="submit" name="change_type" class="pure-button pure-button-primary" value="text">
|
|
||||||
<%= translate(locale, "Text CAPTCHA") %>
|
|
||||||
</button>
|
|
||||||
</label>
|
|
||||||
<% else # "text" %>
|
|
||||||
<label>
|
|
||||||
<button type="submit" name="change_type" class="pure-button pure-button-primary" value="image">
|
|
||||||
<%= translate(locale, "Image CAPTCHA") %>
|
|
||||||
</button>
|
|
||||||
</label>
|
|
||||||
<% end %>
|
|
||||||
<% else %>
|
|
||||||
<div class="account-page-action-bar">
|
|
||||||
<a href="/signup" id="signup-link"><%= translate(locale, ("Create an account")) %> </a>
|
|
||||||
|
|
||||||
<button type="submit" name="action" value="signin" class="pure-button pure-button-primary" id="signin-button">
|
|
||||||
<%= translate(locale, "Sign In") %>
|
|
||||||
</button>
|
|
||||||
</div>
|
|
||||||
<% end %>
|
|
||||||
</fieldset>
|
|
||||||
</form>
|
|
||||||
<% end %>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="pure-u-1 pure-u-lg-1-5"></div>
|
<div class="pure-u-1 pure-u-lg-1-5"></div>
|
||||||
|
77
src/invidious/views/user/register.ecr
Normal file
77
src/invidious/views/user/register.ecr
Normal file
@ -0,0 +1,77 @@
|
|||||||
|
<% content_for "header" do %>
|
||||||
|
<title><%= translate(locale, "sign_up_page_title") %> - Invidious</title>
|
||||||
|
<link rel="stylesheet" href="/css/signin-signout.css?v=<%= ASSET_COMMIT %>">
|
||||||
|
<% end %>
|
||||||
|
|
||||||
|
<div class="pure-g">
|
||||||
|
<div class="pure-u-1 pure-u-lg-1-5"></div>
|
||||||
|
<div class="pure-u-1 pure-u-lg-3-5">
|
||||||
|
<div class="h-box">
|
||||||
|
<form class="pure-form pure-form-stacked" action="/signup?referer=<%= URI.encode_www_form(referer) %>&type=invidious" method="post">
|
||||||
|
<fieldset>
|
||||||
|
<% if email %>
|
||||||
|
<input name="email" type="hidden" value="<%= HTML.escape(email) %>">
|
||||||
|
<% else %>
|
||||||
|
<label for="email"><%= translate(locale, "User ID") %> :</label>
|
||||||
|
<input required class="pure-input-1" name="email" type="text" placeholder="<%= translate(locale, "User ID") %>">
|
||||||
|
<% end %>
|
||||||
|
|
||||||
|
<% if password %>
|
||||||
|
<input name="password" type="hidden" value="<%= HTML.escape(password) %>">
|
||||||
|
<% else %>
|
||||||
|
<label for="password"><%= translate(locale, "Password") %> :</label>
|
||||||
|
<input required class="pure-input-1" name="password" type="password" placeholder="<%= translate(locale, "Password") %>">
|
||||||
|
<% end %>
|
||||||
|
|
||||||
|
<% if captcha %>
|
||||||
|
<% case captcha_type when %>
|
||||||
|
<% when "image" %>
|
||||||
|
<% captcha = captcha.not_nil! %>
|
||||||
|
<img style="width:50%" src='<%= captcha[:question] %>'/>
|
||||||
|
<% captcha[:tokens].each_with_index do |token, i| %>
|
||||||
|
<input type="hidden" name="token[<%= i %>]" value="<%= HTML.escape(token) %>">
|
||||||
|
<% end %>
|
||||||
|
<input type="hidden" name="captcha_type" value="image">
|
||||||
|
<label for="answer"><%= translate(locale, "Time (h:mm:ss):") %></label>
|
||||||
|
<input type="text" name="answer" type="text" placeholder="h:mm:ss">
|
||||||
|
<% else # "text" %>
|
||||||
|
<% captcha = captcha.not_nil! %>
|
||||||
|
<% captcha[:tokens].each_with_index do |token, i| %>
|
||||||
|
<input type="hidden" name="token[<%= i %>]" value="<%= HTML.escape(token) %>">
|
||||||
|
<% end %>
|
||||||
|
<input type="hidden" name="captcha_type" value="text">
|
||||||
|
<label for="answer"><%= captcha[:question] %></label>
|
||||||
|
<input type="text" name="answer" type="text" placeholder="<%= translate(locale, "Answer") %>">
|
||||||
|
<% end %>
|
||||||
|
|
||||||
|
<button type="submit" name="action" value="signup" class="pure-button pure-button-primary">
|
||||||
|
<%= translate(locale, "Sign Up") %>
|
||||||
|
</button>
|
||||||
|
|
||||||
|
<% case captcha_type when %>
|
||||||
|
<% when "image" %>
|
||||||
|
<label>
|
||||||
|
<button type="submit" name="change_type" class="pure-button pure-button-primary" value="text">
|
||||||
|
<%= translate(locale, "Text CAPTCHA") %>
|
||||||
|
</button>
|
||||||
|
</label>
|
||||||
|
<% else # "text" %>
|
||||||
|
<label>
|
||||||
|
<button type="submit" name="change_type" class="pure-button pure-button-primary" value="image">
|
||||||
|
<%= translate(locale, "Image CAPTCHA") %>
|
||||||
|
</button>
|
||||||
|
</label>
|
||||||
|
<% end %>
|
||||||
|
<% else %>
|
||||||
|
<div class="account-page-action-bar">
|
||||||
|
<button type="submit" name="action" value="signup" class="pure-button pure-button-primary" id="signup-button">
|
||||||
|
<%= translate(locale, "Sign Up") %>
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
<% end %>
|
||||||
|
</fieldset>
|
||||||
|
</form>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="pure-u-1 pure-u-lg-1-5"></div>
|
||||||
|
</div>
|
Loading…
Reference in New Issue
Block a user