First off:
Walltaker is an app built by adults, for adults. You must be over the age of 18 to use it.
- Walltaker is
- inspired by the WallClaimer app, which allows you to set the
- wallpaper of your friends phones. This however leads to some weird cases where people post stuff that'd be on
- your
- metaphorical blacklist. With that in mind, I wanted it to be restricted to
- e621.net
+ Walltaker is inspired by the WallClaimer app, which allows you to set the
+ wallpaper of your friend's phones. This however leads to some weird cases where people post stuff that'd be on
+ your metaphorical blacklist. With that in mind, I wanted it to be restricted to e621.net
results, with an enforced blacklist. This keeps you in control, but not too much control.
What do I need?
- Walltaker requires you to make an account on the website (here!) first. Once you have an
- account, you
- can generate
- links to send to friends/enemies, which will enqueue new wallpapers for your account. When you want to start
- seeing
- these new wallpapers, then you can download the companion apps listed below which is able to
- listen
- to wallpaper changes to any
+ Walltaker requires you to make an account on the website (here!) first. Once you have an account, you can generate
+ links to send to friends/enemies, which will enqueue new wallpapers for your account. When you want to start seeing
+ these new wallpapers, then you can download the companion apps listed below which is able to listen to wallpaper changes to any
account. Enter your username, and then go about your day!
- We'll be upfront! This site very cheap to operate. We have very little in running costs, and I am personally OK with
- paying the $3-5 a month it costs in bandwidth and compute that it takes to keep this service online; however, a few
- folks have asked if they can compensate our time as a tip, so we set up a kofi!
-
-
- Know that this is
- just for donating to us, because we like money. The site is cheap to run, interesting to work on, and is
- not in danger of being shut down due
- to expenses. It's just a nice gesture that's very much appreciated.
+ <%= image_tag 'mascot/TaylorNSFW.png', alt: 'Taylor, a gray and yellow lizard with tits, shaking them at you', class: 'mascot float-right', width: 195 %>
+ We'll be upfront! The site pretty cheap to operate. We have very little in running costs, and I am somewhat OK with
+ paying the ~$40 a month it costs in bandwidth and compute that it takes to keep this service online; however, a few
+ folks have asked if they can help out or compensate our time as a tip, so we set up a Ko-Fi!
@@ -182,4 +198,4 @@
Just the tip!
-
+
\ No newline at end of file
diff --git a/app/views/errors/not_found.html.erb b/app/views/errors/not_found.html.erb
new file mode 100644
index 00000000..36306379
--- /dev/null
+++ b/app/views/errors/not_found.html.erb
@@ -0,0 +1,18 @@
+<%
+ mascot = current_user&.mascot || 'ki'
+%>
+
+
+ 404: Page missing or hidden
+
+
+
+ ...but you can use the links above to continue browsing the site. If you are 100% sure this is a mistake, or an error
+ has occured, you can contact <%= link_to 'Gray', users_path('gray') %> with the URL you used to get here.
+
<% if action_name == 'index' %>
+ <% if friendship.controllable(other_user) %>
+ <%= button_to assume_surrender_path(friendship.surrenders.for_user(other_user)), method: :post, class: 'no-underline primary' do %>
+
+ Take control
+ <% end %>
+ <% end %>
<%= button_tag class: 'no-underline secondary', data: { action: 'click->friendship#confirm' } do %>
- Unfriend
+ Delete
<% end %>
<% end %>
<% if action_name == 'requests' %>
diff --git a/app/views/friendships/index.html.erb b/app/views/friendships/index.html.erb
index aab37943..95f772ef 100644
--- a/app/views/friendships/index.html.erb
+++ b/app/views/friendships/index.html.erb
@@ -8,6 +8,10 @@
<% if action_name == 'index' %>
+ <%= link_to surrenders_path, class: 'no-underline' do %>
+
+ Surrender
+ <% end %>
<% if has_requests? %>
New Requests
<% end %>
diff --git a/app/views/help/client_guide.html.erb b/app/views/help/client_guide.html.erb
new file mode 100644
index 00000000..cdd3683f
--- /dev/null
+++ b/app/views/help/client_guide.html.erb
@@ -0,0 +1,155 @@
+<% content_for :stylesheets do %>
+
+
+
+<% end %>
+
+
+
+ Client Guide
+
+
+ <%= image_tag 'mascot/WarrenAPIExtrodinaire.png', alt: "Warren making a client with great difficulty", width: 240, style: "float: right" %>
+ You can make your own Walltaker client! A user should be able to supply any link ID,
+ that you can then use to pull down the latest wallpaper for that instance. I suggest you poll the endpoint ~10 seconds
+ and cache the last post url, so you can skip downloading if it hasn't changed since the last one.
+
+
+ Something to know, this part of the docs is still being worked on! There are two ways to write clients. This only covers the simple way. It's still preferred you experiment with this version of the API, but a live web-socket based API is available, and will appear here soon™
+
+
+
+
+
GET https://walltaker.joi.how/api/links/[id].json
+
Gets the current link status. This is what you could poll every 10 seconds to check if the wallpaper has changed. Use
+ post_url as the current wallpaper's URL. This is always an image by default, but users can enable
+ videos/gifs on a link, so please handle error checking if you see a file type you can't display.
POST https://walltaker.joi.how/api/links/[id]/response.json
+
Set a response for a given link. There are 3 kinds of responses.
+
🔑 Requires user's API Key.
+
+
+
+
+
type
+
Shown In UI as
+
Effect
+
+
+
+
+
"horny"
+
Love it
+
User who set wallpaper gets notification, response text displayed on link in webapp
+
+
+
"disgust"
+
Hate it
+
User who set wallpaper gets notification, wallpaper rolled back to previous image
+
+
+
"came"
+
Came
+
User who set wallpaper gets notification, response text displayed on link in webapp
+
+
+
+
+
+
⚠️ I suggest re-pinging the link after sending a "disgust" response, so you can reset the user's
+ wallpaper to the previous version as soon as possible.
+
+
\ No newline at end of file
diff --git a/app/views/help/faq.html.erb b/app/views/help/faq.html.erb
new file mode 100644
index 00000000..2deaca1a
--- /dev/null
+++ b/app/views/help/faq.html.erb
@@ -0,0 +1,146 @@
+
+
+ FAQs
+
+
+
+
I got a wallpaper I don't like.
+
+
+
+ Walltaker is an app for letting others change your wallpaper, without your
+ approval. While I provide as many tools as possible to ensure you only get wallpapers you like, know that the
+ point
+ of this app is to be out of control to some extent. Here are some tips to use Walltaker's
+ filtering
+ features to their fullest:
+
+
+
Add people you trust as friends, this allows you to use
+
+ friends-only links, which stops anon spam. This is by far the most effective route.
+
+
Use a theme tag. A theme tag allows you to force a tag to be present on wallpapers people
+ pick
+ for you. This can normally be good at filtering out things like genitalia (penis) you don't want to see or
+ forcing a
+ specific sexuality. (male/female)
+
+
Fill out your blacklist honestly. If you don't like most foot-fetish art, then it
+ should be in your blacklist, even if there's some art you do like. People don't read your link terms enough to
+ understand nuance.
+
+
+ Be clear in your terms. A lot of bad wallpapers are simply mistakes. Use as few words as
+ possible to express what you want.
+
+
+
+ As always, if you think you're being harassed, contact an admin on the Discord (See link in the header) who can
+ look into it for you, and will IP ban an anon user if they're trying to be malicious.
+
+
+
+
+
+
+
Can I make my own client?
+
+
+
+ Yes! I have some API documentation on our
+ GitHub. You can contact
+ an admin on discord to get it listed on the site.
+
+ Here are some tips for what makes a good client:
+
+
+
+ It doesn't just have to be wallpapers! iOS has no native APIs for setting lock screen or home
+ screen wallpapers. Maybe a good idea would be a home screen widget that could show the current wallpaper
+ instead?
+
+
+ Use native APIs to set the wallpaper if available. A good example of why this is a good idea
+ is
+ the MacOS client. It uses the Cocoa APIs to affect the wallpaper instead of using the more-universal
+ AppleScript
+ solution common in apps not made with swift/obj-c. This is a FAR less buggy way to assign wallpapers,
+ and doesn't
+ require as many permissions. Research if there's an SDK/language you should use to better take advantage of
+ native APIs.
+
+
+ Just because we're short-polling, doesn't mean you can ping us as fast as you want! Please
+ keep
+ requests at around 1 request per 10 seconds. This service is hosted at my expensive, and heavy load will mean
+ I have
+ to vertically scale up the server it lives on. Don't be an asshole.
+
+
+
+
+
+
+
+
How do I change my username / email?
+
+
+
+ Please message a staff member on our Discord to change your username/email.
+
+ ⚠️Do NOT post your email address in any public channel
+
+
Username change: Provide your full email address
+
Email change: Provide both your old and new email addresses
+
+
+
+
+
+
+
Why do I keep getting kicked from the Discord server?
+
+
+
+ Ensure that your account is at least 1 week old and has a profile picture before attempting to join the server.
+
+
+
+
+
+
+
Help! The client I am using doesn't work
+
+
+
+ Check if there are any known issues with the client you are using. If you require further support, please join the
+ Discord server and use the appropriate forum to report bugs with the client.
+ Forums can be found at the bottom of the channel list.
+
+
+
+
+
+
+
I would like to merge two accounts.
+
+
+
+ Message Gray on our Discord and provide them with both email addresses and let them know which account you want to
+ keep using.
+
+
+
+
+
+
+
I have feedback/suggestion
+
+
+
+ Join our Discord and post your feedback/suggestion in the #walltaker-site forum.
+
+
+
+
\ No newline at end of file
diff --git a/app/views/help/index.html.erb b/app/views/help/index.html.erb
index d4b066c9..86aa2d15 100644
--- a/app/views/help/index.html.erb
+++ b/app/views/help/index.html.erb
@@ -3,20 +3,22 @@
Help!
+<%= image_tag 'mascot/Wizards.png', alt: 'A suave little lizard welcoming you to the website.', class: 'mascot float-right', width: 300 %>
+
Q: How do I set this up?
A:
Thanks for being willing to give Walltaker a try! It's pretty easy to get started, but it might seem a bit weird at
- first since there's some hoops we have to jump thru to be able to update your wallpaper.
+ first since there are some hoops we have to jump through to be able to update your wallpaper.
0. Log in
Firstly, you will need an account. You can make an account by pressing the
- Sign Up link in the top-right-hand side of the screen, in the header. Once you have
- an account (which should only take 1 minute) return to this page. You must be logged in to continue.
+ Sign Up link on the top-right-hand side of the screen. Once you have created
+ an account (which should only take a minute) return to this page. You must be logged in to continue.
- ...then confire your new link.
+ ...then configure your new link.
- There are 6 options to change here that affect who can set your wallpaper, and what
+ There are 8 options to change here that affect who can set your wallpaper, and what
restrictions they have to work within. Set these as you see fit, using the key below to explain what each
option does.
- This is the date at which this link will not accept more wallpaper changes. Clicking
- it will open a date picker. You could use this for example if you want to use walltaker for a full
- weekend,
- but
- want it to stop on monday for work.
+ Your link terms are simply an area to express what you'd like to see as wallpapers more generally. Nothing
+ here is enforced, it's just a text field for you to leave a note that appears on the link. I suggest you
+ outline what things turn you on here.
-
-
#2 Never Expires
+
#2 Custom URL
+
+ Once you have achieved the silver trophy (by having set 300 wallpapers to other users), then you will be
+ able to set a custom URL.
+ This means that in addition to your regular walltaker link URL
+ (https://walltaker.joi.how/links/1), you can provide your own
+ text for a custom url. It will also be accessible as https://walltaker.joi.how/links/
+ your-text-here
+
+
+
#3 Never Expires
Ensures that the link will never expire, and people you allow to set the link will be able to do so until
- you
- delete it.
+ you delete it.
- When checked,
- this link will never expire, and the #1 Expires option will be ignored.
+ When checked, this link will never expire, and the #4 Expires option will be ignored.
- When unchecked,
- this link will expire at the date indicated by the #1 Expires option.
+ When unchecked, this link will expire at the date indicated by the #4 Expires option.
-
-
#3 Friends Only
+ ⚠️ With an expired link, Pornbot and the Pornlizards will still be able to set your wallpaper and you will
+ still be able to connect a client.
+
#5 Friends Only
This restricts who can set wallpapers on this link.
- When checked,
- ONLY people you have accepted friend requests with will be able to see and set your wallpaper.
+ When checked, ONLY people you have accepted friend requests with will be able to see and set
+ your wallpaper.
- When unchecked,
- ANYONE (including anon users) will be able to see and set your wallpaper.
+ When unchecked, ANYONE (including anon users) will be able to see and set your wallpaper.
-
-
#4 Blacklist
+
#6 Blacklist
A list of E621 tags that must NOT appear on wallpapers people submit.
- Tags are separated by spaces or commas, and cannot be special tags. (such as rating:e)
+ Tags are separated by spaces or commas.
female feral feline will prevent any posts with females presenting characters, feral
characters, or felines. male/male group_sex solo will mean you only get extremely boring, straight, 1-on-1 porn.
- You
- weirdo.
+ You weirdo.
-
-
#5 Terms
-
- Your link terms are simply an area to express what you'd like to see as wallpapers more generally. Nothing
- here
- is enforced, it's just a text field for you to leave a note that appears on the link. I suggest you
- outline
- what
- things turn you on here.
-
-
-
#6 Theme Tag
+
#7 Theme Tag
Theme tags are special! This is a way to enforce all wallpapers submitted to this link to be tagged with a
single, specific tag of your choosing. Use this when you're looking for something specific, like a
specific
species or sex act. You're horny, you'll come up with something fun.
Be careful about how you type your tag in here. If you misspell this theme tag, no one
- will
- be
+ will be
able to submit anything until you remove it or correct the spelling. Confirm spelling on E621 if you have
- to.
+ to. Filter tags cannot be used.
@@ -141,12 +132,15 @@
loimu_(character) all posts will feature Loimu 🦌. Any other characters are blocked.
- pokeemon a missspelled tag! No one will be able to submit anything.
+ pokémon a misspelled tag! No one will be able to submit anything.
tits an alias tag! While this works in e621 search, the real tag is "breasts", so this is the
- same
- as misspelling a tag.
+ same as misspelling a tag.
+
+
+ rating:e a filter tag! While this works in e621 search, filter tags are unsupported when
+ setting a theme.
@@ -166,45 +160,81 @@
Congratulations! You should have a fresh link ready to share with the world. However, it currently doesn't change
- the wallpaper on anything. This is because, as simply a website, Walltaker can not change your wallpaper for you.
+ the wallpaper on anything. This is because, as simply a website, Walltaker cannot change your wallpaper for you.
To allow us to do this,
we need a Walltaker Client, which is an app you can install on which ever devices you'd
- like to get wallpaper updates on. It will silently check your link every 10 seconds, and update your
- wallpaper if
- there's a new one, automatically.
+ like to get wallpaper updates on. It will silently check your link every few seconds, and update your
+ wallpaper if there's someone has updated your wallpaper, automatically.
You can download a client for which ever device you'd like to use. Follow the instructions for each one for how to
install it, then return to this tutorial.
+ Please try using clients that are still being maintained before trying unmaintained clients.
Then...
@@ -253,7 +283,6 @@
Then...
-
Follow the instructions for your client to add this link to it. Normally it's in a menu where you can simply type
in the link ID.
@@ -304,7 +333,7 @@
Some phone operating systems kill background apps, this can sometimes affect clients. Refer to client
documentation.
-
Did you change the frequency of checks? It must be under 1minute to be
+
Did you change the frequency of checks? It must be under 1 minute to appear
Online
@@ -330,62 +359,13 @@
-
-
Q: I got a wallpaper I don't like.
-
- A:
- Walltaker is an app for letting others change your wallpaper, without your
- approval. While I provide as many tools as possible to ensure you only get wallpapers you like, know that the point
- of this app is to be out of control to some extent. Here are some tips to use walltaker's filtering
- features to their fullest:
-
-
-
Add people you trust as friends, this allows you to use
-
- friends-only links, which stops anon spam. This is by far the most effective route.
-
-
Use a theme tag. A theme tag allows you to force a tag to be present on wallpapers people pick
- for you. This can normally be good at filtering out things like genitalia (gay) you don't want to see or forcing a
- specific sexuality. (male/female)
-
-
Fill out your blacklist honestly. If you don't like most foot-fetish art, then it
- should be in your
- blacklist, even if there's some art you do like. People don't read your link terms enough to understand nuance.
-
-
Be clear in your terms. A lot of bad wallpapers are simply mistakes. Use as few words as
- possible to express
- what you want.
-
-
-
- As always, if you think you're being harassed, contact an admin on the discord (See link in the header) who can
- look into it for you, and IP ban an anon user if they're trying to be malicious.
-
-
-
-
-
Q: Can I make my own client?
-
- A:
- Yes! I have some API documentation on our github. You can contact
- an admin on discord to get it listed on the site. Here's some tips for what makes a good client:
-
-
-
- It doesn't just have to be wallpapers! iOS has no native APIs for setting lock screen or home
- screen wallpapers. Maybe a good idea would be a home screen widget that could show the current wallpaper instead?
-
-
- Just because we're short-polling, doesn't mean you can ping us as fast as you want! Please keep
- requests at around 1request per 10seconds. This service is hosted at my expensive, and heavy load will mean I have
- to vertically scale up the server it lives on. Don't be an asshole.
-
-
- Use native APIs to set the wallpaper if available. A good example of why this is a good idea is
- the MacOS client. It uses the Cocoa APIs to affect the wallpaper instead of using the more-universal apple-script
- solution common in apps not made with swift/obj-c. This is MUCH less buggy way to assign wallpapers, and doesn't
- require as many permissions. Research if there's an SDK/language you should use to better take advantage of native
- APIs.
-
-
+
+
FAQs
+
+
+
+ To view some recently asked questions, check out <%= link_to 'FAQs', faq_path %>
+
+
+
\ No newline at end of file
diff --git a/app/views/kink/_e621_status.html.erb b/app/views/kink/_e621_status.html.erb
new file mode 100644
index 00000000..4ae5662e
--- /dev/null
+++ b/app/views/kink/_e621_status.html.erb
@@ -0,0 +1,19 @@
+<%# locals: (kink:, failed: false) -%>
+
+<%= turbo_frame_tag dom_id(kink) + '_e621_status', class: 'kink__status' do %>
+ <% if kink.works_on_e621? %>
+ <%= link_to "https://e621.net/posts?tags=#{kink.name}", target: '_blanks', class: 'no-underline' do %>
+
+ e621
+ <% end %>
+ <% else %>
+ <% if failed %>
+ Invalid tag, are you sure it's spelt right?
+ <% else %>
+ <%= button_to kink_e621_path(kink), method: :post do %>
+
+ Test on e621
+ <% end %>
+ <% end %>
+ <% end %>
+<% end %>
\ No newline at end of file
diff --git a/app/views/kink/_form.html.erb b/app/views/kink/_form.html.erb
new file mode 100644
index 00000000..13edbd17
--- /dev/null
+++ b/app/views/kink/_form.html.erb
@@ -0,0 +1,6 @@
+<%# locals: (kink:) -%>
+
+<%= form_with model: kink, url: kink_path(kink.id), class: 'kink_form' do |f| %>
+ <%= f.text_field :name, placeholder: 'Enter a kink' %>
+ <%= f.submit '+' %>
+<% end %>
\ No newline at end of file
diff --git a/app/views/kink/_kink.html.erb b/app/views/kink/_kink.html.erb
new file mode 100644
index 00000000..039c523e
--- /dev/null
+++ b/app/views/kink/_kink.html.erb
@@ -0,0 +1,21 @@
+<%# locals: (kink:, is_current_user: false, destination: :kink_show, link: nil, user: nil) -%>
+
+<%= turbo_frame_tag kink, class: ("kink #{kink.works_on_e621? ? 'valid' : 'untested'}") do %>
+ <%= link_to destination == :search ? porn_search_search_path(tags: kink.name, link:, full_rerender: true) : kink_show_path(kink), target: destination == :search ? 'pornsearch' : '_top' do %>
+ <%= kink.name %>
+ <% unless is_current_user %>
+ <% if (link && kink.is_starred?(link.user)) || (user && kink.is_starred?(user)) %>
+
+ <% end %>
+ <% end %>
+ <% end %>
+
+ <% if is_current_user %>
+ <%= button_to kink_toggle_star_path(kink) do %>
+
+ <% end %>
+ <%= button_to kink_remove_path(kink), method: :delete do %>
+
+ <% end %>
+ <% end %>
+<% end %>
\ No newline at end of file
diff --git a/app/views/kink/_kinks.html.erb b/app/views/kink/_kinks.html.erb
new file mode 100644
index 00000000..45db7055
--- /dev/null
+++ b/app/views/kink/_kinks.html.erb
@@ -0,0 +1,7 @@
+<%# locals: (kinks:, is_current_user: false, user: nil) -%>
+
+<%= turbo_frame_tag :kink_list do %>
+ <% kinks.each do |kink| %>
+ <%= render 'kink/kink', kink:, is_current_user:, user: %>
+ <% end %>
+<% end %>
\ No newline at end of file
diff --git a/app/views/kink/_kinks_for_search.html.erb b/app/views/kink/_kinks_for_search.html.erb
new file mode 100644
index 00000000..e7f160bc
--- /dev/null
+++ b/app/views/kink/_kinks_for_search.html.erb
@@ -0,0 +1,7 @@
+<%# locals: (kinks:, link:) -%>
+
+<%= turbo_frame_tag :kink_list, target: 'pornsearch' do %>
+ <% kinks.each do |kink| %>
+ <%= render 'kink/kink', kink:, is_current_user: false, destination: :search, link: %>
+ <% end %>
+<% end %>
\ No newline at end of file
diff --git a/app/views/kink/add.html.erb b/app/views/kink/add.html.erb
new file mode 100644
index 00000000..c3394754
--- /dev/null
+++ b/app/views/kink/add.html.erb
@@ -0,0 +1,2 @@
+
Kink#add
+
Find me in app/views/kink/add.html.erb
diff --git a/app/views/kink/new.html.erb b/app/views/kink/new.html.erb
new file mode 100644
index 00000000..0c3ffd6d
--- /dev/null
+++ b/app/views/kink/new.html.erb
@@ -0,0 +1 @@
+<%= render 'form', kink: @kink %>
\ No newline at end of file
diff --git a/app/views/kink/remove.turbo_stream.erb b/app/views/kink/remove.turbo_stream.erb
new file mode 100644
index 00000000..782d3492
--- /dev/null
+++ b/app/views/kink/remove.turbo_stream.erb
@@ -0,0 +1,3 @@
+<%= turbo_frame_tag @kink do %>
+ <%= turbo_stream.remove @kink %>
+<% end %>
\ No newline at end of file
diff --git a/app/views/kink/search_kinks.html.erb b/app/views/kink/search_kinks.html.erb
new file mode 100644
index 00000000..4f75dff7
--- /dev/null
+++ b/app/views/kink/search_kinks.html.erb
@@ -0,0 +1,3 @@
+<%= turbo_frame_tag :kink_tools, target: 'pornsearch' do %>
+ <%= render 'kinks_for_search', kinks: @kinks, link: @link %>
+<% end %>
\ No newline at end of file
diff --git a/app/views/kink/show.html.erb b/app/views/kink/show.html.erb
new file mode 100644
index 00000000..d00b2749
--- /dev/null
+++ b/app/views/kink/show.html.erb
@@ -0,0 +1,34 @@
+<% content_for(:html_title) { "Walltaker #{@kink.name} Kink" } %>
+
+
+ <% @users.each do |user| %>
+ <%= render user %>
+ <% end %>
+
+<% else %>
+
No one <%= current_user ? 'else' : '' %> has this kink.
+
+ Kinks can be set on your profile, try and get others to use this one if you want to see more of it! When set, you'll
+ see <%= @kink.name %> appear in their profile, and they will be listed here.
+
+<% end %>
\ No newline at end of file
diff --git a/app/views/kink/toggle_star.turbo_stream.erb b/app/views/kink/toggle_star.turbo_stream.erb
new file mode 100644
index 00000000..addd2fbc
--- /dev/null
+++ b/app/views/kink/toggle_star.turbo_stream.erb
@@ -0,0 +1 @@
+<%= turbo_stream.replace @kink, partial: 'kink/kink', locals: { kink: @kink, is_current_user: true } %>
\ No newline at end of file
diff --git a/app/views/kink/update.turbo_stream.erb b/app/views/kink/update.turbo_stream.erb
new file mode 100644
index 00000000..0cdc844c
--- /dev/null
+++ b/app/views/kink/update.turbo_stream.erb
@@ -0,0 +1 @@
+<%= turbo_stream.append :kink_list, partial: 'kink/kink', locals: {kink: @kink, is_current_user: true} %>
\ No newline at end of file
diff --git a/app/views/kink/users_kinks.html.erb b/app/views/kink/users_kinks.html.erb
new file mode 100644
index 00000000..471e4c00
--- /dev/null
+++ b/app/views/kink/users_kinks.html.erb
@@ -0,0 +1,9 @@
+<%= turbo_frame_tag :kink_tools do %>
+
+<% end %>
\ No newline at end of file
diff --git a/app/views/layouts/_mascot_picker.erb b/app/views/layouts/_mascot_picker.erb
new file mode 100644
index 00000000..4278e005
--- /dev/null
+++ b/app/views/layouts/_mascot_picker.erb
@@ -0,0 +1,11 @@
+<%= turbo_frame_tag 'mascot_picker', class: "mascot-picker" do %>
+ <%= button_to api_mascot_next_path, data: {'turbo-frame': 'title'}, title: 'next mascot' do %>
+
+ <% end %>
+
+ <%= button_to api_pervert_toggle_path, data: {'turbo-frame': 'title'}, title: 'naughty toggle' do %>
+ <%= current_user&.pervert ? '>_<' : 'OwO' %>
+ <% end %>
+
+ <%= current_user&.mascot&.capitalize %>
+<% end %>
\ No newline at end of file
diff --git a/app/views/layouts/_title.erb b/app/views/layouts/_title.erb
new file mode 100644
index 00000000..e1b983b0
--- /dev/null
+++ b/app/views/layouts/_title.erb
@@ -0,0 +1,21 @@
+<%
+ mascot ||= 'ki'
+ pervert ||= false
+%>
+
+<%= turbo_frame_tag 'title' do %>
+
+ Walltaker
+
+ <%= image_tag("mascot/Ki#{pervert ? 'NSFW' : ''}.png", alt: 'A suave little lizard welcoming you to the website.', class: 'mascot', height: 190) if mascot == 'ki' %>
+ <%= image_tag("mascot/Warren#{pervert ? 'N' : ''}SFW.png", alt: 'A suave little lizard welcoming you to the website.', class: 'mascot', height: 190) if mascot == 'warren' %>
+ <%= image_tag("mascot/Taylor#{pervert ? 'N' : ''}SFW.png", alt: 'A suave little lizard welcoming you to the website.', class: 'mascot', height: 190) if mascot == 'taylor' %>
+
+
+ WT
+
+ <%= image_tag("mascot/Ki#{pervert ? 'NSFW' : ''}.png", alt: 'A suave little lizard welcoming you to the website.', class: 'mascot', height: 100) if mascot == 'ki' %>
+ <%= image_tag("mascot/Warren#{pervert ? 'N' : ''}SFW.png", alt: 'A suave little lizard welcoming you to the website.', class: 'mascot', height: 100) if mascot == 'warren' %>
+ <%= image_tag("mascot/Taylor#{pervert ? 'N' : ''}SFW.png", alt: 'A suave little lizard welcoming you to the website.', class: 'mascot', height: 100) if mascot == 'taylor' %>
+
+<% end %>
\ No newline at end of file
diff --git a/app/views/layouts/application.html.erb b/app/views/layouts/application.html.erb
index 0e3c3214..57a5d3f8 100644
--- a/app/views/layouts/application.html.erb
+++ b/app/views/layouts/application.html.erb
@@ -1,16 +1,21 @@
+<% mascot = current_user&.mascot || 'ki' %>
-
+">
<%= content_for?(:html_title) ? yield(:html_title) : "Walltaker" %>
+ <%= favicon_link_tag 'mascot/KiHead.png' if mascot == 'ki'%>
+ <%= favicon_link_tag 'mascot/WarrenHead.png' if mascot == 'warren'%>
+ <%= favicon_link_tag 'mascot/TaylorHead.png' if mascot == 'taylor'%>
-
-
-
-
-
-
+
+
+
+
+
+
+ <%= yield :stylesheets %>
@@ -19,20 +24,28 @@
<%= action_cable_meta_tag %>
<%= stylesheet_link_tag "application", "data-turbo-track": "reload" %>
+
<%= javascript_importmap_tags %>
- 🔞 This is an app for adults over the age of 18 only.
- Requests? Bugs? Gios made us a discord!
+ 🔞 This is an app for adults over the age of 18 only.
+ <% if current_user&.current_surrender && cookies.signed[:surrender_id].nil? %>
+ <% surrender = current_user.current_surrender %>
+
+ Your account is surrendered to <%= link_to surrender.controller.username, user_path(surrender.controller.username) %>.
+
+ <%= link_to 'Help me!', surrender_path(surrender) %>
+ <% end %>
+<% end %>
+
+
+ <%= yield %>
+
+
+
+
+
+
+
+
diff --git a/app/views/layouts/link_wizard.html.erb b/app/views/layouts/link_wizard.html.erb
new file mode 100644
index 00000000..5a15e0a2
--- /dev/null
+++ b/app/views/layouts/link_wizard.html.erb
@@ -0,0 +1,21 @@
+<% content_for :stylesheets do %>
+
+<% end %>
+<% content_for :content do %>
+
+
+ <%= link_to "Come back later", link_path(@link.id) %>
+
+
+
+
+
+
+ Wizard
+
+
+
+
+ <%= yield :step %>
+<% end %>
+<%= render template: 'layouts/application' %>
\ No newline at end of file
diff --git a/app/views/link_wizard/control.html.erb b/app/views/link_wizard/control.html.erb
new file mode 100644
index 00000000..26460a7e
--- /dev/null
+++ b/app/views/link_wizard/control.html.erb
@@ -0,0 +1,87 @@
+<% content_for :step do %>
+
+
+
+ No problem hun!
+ We should really get to work though! This fresh link is some nice work, but it's a bit boring at the moment,
+ maybe even a little dangerous!
+
+ <%= image_tag 'mascot/TaylorSFW.png', alt: 'Two link mages crafting your link.', class: 'mascot', width: 160 %>
+
+
+
+ <%= render @link %>
+
+
+
+
+
<%= image_tag 'mascot/TaylorHead.png', alt: 'Two link mages crafting your link.', class: 'mascot', width: 70 %>
+
+ Without a blacklist, someone could send you really shocking posts!
+
+
+
+
+
+ Probably from me heheheheheheheh
+
+
<%= image_tag 'mascot/WarrenHead.png', alt: 'Two link mages crafting your link.', class: 'mascot', width: 70 %>
+
+
+
+
<%= image_tag 'mascot/TaylorHead.png', alt: 'Two link mages crafting your link.', class: 'mascot', width: 70 %>
+
+ Well, yes that sometimes does happen, where someone picks a wallpaper that they think you might like, but ends up
+ being something you'd rather not see. But there's also assholes out there that just like posting the worst E621
+ has to offer! We need to have a strong blacklist to put these dicks in their place!
+
+
+
+
+
+ You can put my dick... You can put in place... My dick can be put in place by...
+
+
<%= image_tag 'mascot/WarrenHead.png', alt: 'Two link mages crafting your link.', class: 'mascot', width: 70 %>
+
+
+
+
<%= image_tag 'mascot/TaylorHead.png', alt: 'Two link mages crafting your link.', class: 'mascot', width: 70 %>
+
+ ...
+
+
+
+
+
+ I want to fuck your cunt again.
+
+
<%= image_tag 'mascot/WarrenHead.png', alt: 'Two link mages crafting your link.', class: 'mascot', width: 70 %>
+
+
+
+
<%= image_tag 'mascot/TaylorHead.png', alt: 'Two link mages crafting your link.', class: 'mascot', width: 70 %>
+
+ ... you tried at least.
+
+
+
+
+
<%= image_tag 'mascot/TaylorHead.png', alt: 'Two link mages crafting your link.', class: 'mascot', width: 70 %>
+
+ <%= current_user.username.capitalize %>, could you choose the level of control you'd like by default? Keeping in mind people like him (<%= image_tag 'mascot/WarrenHead.png', size: '25' %>) exist. I've highlighted the one most people choose for you, but if you're new, I suggest going 1 level up.
+
+
+
+
+
+
+ You choose!
+
+
+ <%= button_to 'Maximum! I always use protection.', apply_link_wizard_path(protect: 5), class: 'secondary' %>
+ <%= button_to 'Higher! The internet scares me.', apply_link_wizard_path(protect: 4), class: 'secondary' %>
+ <%= button_to 'Normal. I know how the internet works.', apply_link_wizard_path(protect: 3) %>
+ <%= button_to 'Lower! I love how the internet works.', apply_link_wizard_path(protect: 2), class: 'secondary' %>
+ <%= button_to 'None! Shrek and nazi fan art excites me!', apply_link_wizard_path(protect: 1), class: 'secondary' %>
+
+<% end %>
\ No newline at end of file
diff --git a/app/views/link_wizard/gender.html.erb b/app/views/link_wizard/gender.html.erb
new file mode 100644
index 00000000..3092b160
--- /dev/null
+++ b/app/views/link_wizard/gender.html.erb
@@ -0,0 +1,124 @@
+<% content_for :step do %>
+
+
+
+ My turn! We're going to sort out your sexuality... to the extent a lizard and a website can do that!
+
+ <%= image_tag 'mascot/Ki.png', alt: 'Two link mages crafting your link.', class: 'mascot', width: 160 %>
+
+
+
+ <%= render @link %>
+
+
+
+
+
<%= image_tag 'mascot/KiHead.png', alt: 'Two link mages crafting your link.', class: 'mascot', width: 70 %>
+
+ Sexual preference and gender identity are diverse subjects, and I'm sure you know many of the details already.
+
+
+
+
+
+ Many of our users aren't strictly male or female, or straight or gay.
+
+
<%= image_tag 'mascot/TaylorHead.png', alt: 'Two link mages crafting your link.', class: 'mascot', width: 70 %>
+
+
+
+
<%= image_tag 'mascot/KiHead.png', alt: 'Two link mages crafting your link.', class: 'mascot', width: 70 %>
+
+ Right! It's really important we understand that. Some people, (possibly
+ you <%= current_user.username.capitalize %>!) may feel deeply uncomfortable with depictions of genitalia or gender
+ identity that they would rather not see.
+
+
+
+
+
+ We can't promise you that your link will always prevent content you'd rather not see from appearing, but we can
+ get you set up so it works most of the time.
+
+
<%= image_tag 'mascot/TaylorHead.png', alt: 'Two link mages crafting your link.', class: 'mascot', width: 70 %>
+
+
+
+
<%= image_tag 'mascot/KiHead.png', alt: 'Two link mages crafting your link.', class: 'mascot', width: 70 %>
+
+ <%= current_user.username.capitalize %>, can you select which of the following gender expressions and genitalia
+ you'd NOT like to see as your wallpaper? If you don't select something, you will see it. It's OK to select nothing at all as well!
+
+<% end %>
\ No newline at end of file
diff --git a/app/views/link_wizard/intro.html.erb b/app/views/link_wizard/intro.html.erb
new file mode 100644
index 00000000..cd11bae8
--- /dev/null
+++ b/app/views/link_wizard/intro.html.erb
@@ -0,0 +1,23 @@
+<% content_for :step do %>
+
+ OH! Hi, we were expecting you! Let me get the link-mages in here to get this on a roll! They will need a little
+ input from you, but it won't take long! I promise! There's just one little thing we need to get out of the way.
+
+
+ Could you also, like, just for joke or whatever, just like...
+ vocalize your undying gratitude for porn and it's unrelenting desire to overtake humanity?
+
+<% end %>
\ No newline at end of file
diff --git a/app/views/link_wizard/kinks.html.erb b/app/views/link_wizard/kinks.html.erb
new file mode 100644
index 00000000..8742d753
--- /dev/null
+++ b/app/views/link_wizard/kinks.html.erb
@@ -0,0 +1,122 @@
+<% warren_thinks_youre_perverted = current_user.pervert || @link.blacklist.split(' ').length < 4 %>
+
+<% content_for :step do %>
+
+
+
+ Perfect! I've typed up some blacklist items to best fit your trust level! This space feels really empty
+ though...
+
+ <%= image_tag 'mascot/TaylorSFW.png', alt: 'Two link mages crafting your link.', class: 'mascot', width: 160 %>
+
+
+
+ <%= render @link %>
+
+
+
+
+
<%= image_tag 'mascot/TaylorHead.png', alt: 'Two link mages crafting your link.', class: 'mascot', width: 70 %>
+
+ Your link terms is the best place to let people know what you like!
+
+
+
+
+
+ Give us all the wet, sloppy, throbbing, sticky details!
+
+
<%= image_tag 'mascot/WarrenHead.png', alt: 'Two link mages crafting your link.', class: 'mascot', width: 70 %>
+
+
+
+
<%= image_tag 'mascot/TaylorHead.png', alt: 'Two link mages crafting your link.', class: 'mascot', width: 70 %>
+
+ Exactly! Be detailed, but keep it fun! Big walls of text are rarely read unless they are absolutely dripping in
+ horny sheen.
+
+
+
+
+
+ Great place to pick up twinks. That's why I call my terms the certified bussy magnets.
+
+
<%= image_tag 'mascot/WarrenHead.png', alt: 'Two link mages crafting your link.', class: 'mascot', width: 70 %>
+
+
+
+
<%= image_tag 'mascot/TaylorHead.png', alt: 'Two link mages crafting your link.', class: 'mascot', width: 70 %>
+
+ I'm sure you're well accredited, Dr. Bussyterms.
+
+
+
+
+
+ I am, thank you.
+
+
<%= image_tag 'mascot/WarrenHead.png', alt: 'Two link mages crafting your link.', class: 'mascot', width: 70 %>
+
+
+
+
+ Is that why you asked me go to the office store to laminate a picture of my ass with your named signed on it? They
+ kicked me out and said I can't bring nudes to the Staples ever again. They didn't even have any lick-n-stick gold
+ certification seals like you said they would!
+
+
<%= image_tag 'mascot/KiHead.png', alt: 'Two link mages crafting your link.', class: 'mascot', width: 70 %>
+
+
+
+
+ Staples isn't ready for my resea-
+
+
<%= image_tag 'mascot/WarrenHead.png', alt: 'Two link mages crafting your link.', class: 'mascot', width: 70 %>
+
+
+
+
<%= image_tag 'mascot/TaylorHead.png', alt: 'Two link mages crafting your link.', class: 'mascot', width: 70 %>
+
+ Warren shut up.
+
+
+
+
+
<%= image_tag 'mascot/TaylorHead.png', alt: 'Two link mages crafting your link.', class: 'mascot', width: 70 %>
+
+ <%= current_user.username.capitalize %>, could you write up a basic terms? I've taken the liberty
+ to give you a few prompts you can fill in. Feel free to expand on them, or start new! Remember, be detailed!
+
+
+
+ <% if warren_thinks_youre_perverted %>
+
+
+ pssst, we're both perverts here based on how you're answering this quiz, so I spiced it up a bit!
+
+
<%= image_tag 'mascot/WarrenHead.png', alt: 'Two link mages crafting your link.', class: 'mascot', width: 70 %>
+
+ <% end %>
+
+
+
+
+ You choose!
+
+
+ <%
+ default_terms = <<~BIO
+ #{warren_thinks_youre_perverted ? "I'm a huge fucking gooner" : "Hi! Please read my blacklist carefully just in case I haven't covered everything!"}
+ #{@link.blacklist.split(' ').length > 15 ? "Please NO EXTREME CONTENT.\n" : ''}My biggest turn ons are:
+ #{warren_thinks_youre_perverted ? "My new triggers are" : "I'm learning to like:"}
+
+ #{warren_thinks_youre_perverted ? "I'll let you know if you make me CUM >:)" : "Please make sure your choices fit well on my device!"}
+ BIO
+ %>
+
+ <%= form_with url: apply_link_wizard_path, class: 'full-width' do |f| %>
+ <%= f.text_area :terms, value: default_terms %>
+ <%= f.submit "I'm done!" %>
+ <% end %>
+
+<% end %>
\ No newline at end of file
diff --git a/app/views/link_wizard/no_fun.html.erb b/app/views/link_wizard/no_fun.html.erb
new file mode 100644
index 00000000..b5deaf36
--- /dev/null
+++ b/app/views/link_wizard/no_fun.html.erb
@@ -0,0 +1,78 @@
+<% content_for :step do %>
+
+
+
+ You're pretty much done! There's just one more step!
+
+ <% if current_user.pervert %>
+ <%= image_tag 'mascot/TaylorNSFW.png', alt: 'Two link mages crafting your link.', class: 'mascot', width: 160 %>
+ <% else %>
+ <%= image_tag 'mascot/TaylorSFW.png', alt: 'Two link mages crafting your link.', class: 'mascot', width: 160 %>
+ <% end %>
+
+
+
+ <%= render @link %>
+
+
+
+
+
<%= image_tag 'mascot/TaylorHead.png', alt: 'Two link mages crafting your link.', class: 'mascot', width: 70 %>
+
+ Walltaker is all about controlled transfer of control. (and horny surprises.) But sometimes you might not want to give up all control to just... anyone (<%= image_tag 'mascot/WarrenHead.png', size: '25' %>) on the internet.
+
+
+
+
+
+ Babe, you're all over the internet.
+
+
<%= image_tag 'mascot/WarrenHead.png', alt: 'Two link mages crafting your link.', class: 'mascot', width: 70 %>
+
+
+
+
<%= image_tag 'mascot/TaylorTitsSFW.png', alt: 'Two link mages crafting your link.', class: 'mascot', width: 70 %>
<%= image_tag 'mascot/WarrenJacking.png', alt: 'Two link mages crafting your link.', class: 'mascot', width: 70 %>
+
+
+
+
<%= image_tag 'mascot/TaylorHead.png', alt: 'Two link mages crafting your link.', class: 'mascot', width: 70 %>
+
+ Warren, I literally just let you cum in my panties. The begging was getting intense.
+
+
+
+
+
+ ... hey NO! That's not ho-
+
+
<%= image_tag 'mascot/WarrenHead.png', alt: 'Two link mages crafting your link.', class: 'mascot', width: 70 %>
+
+
+
+
<%= image_tag 'mascot/TaylorHead.png', alt: 'Two link mages crafting your link.', class: 'mascot', width: 70 %>
+
+ <%= current_user.username.capitalize %> you can opt to not make your link public. This will mean that people MUST make an account (or already have one) and send you a friend request that you then accept in order to be able to set a wallpaper. This slows down wallpaper changes significantly, but it's the only way we can promise you won't get shock content. (as long as you're careful about who you accept!) Would you like to turn it on?
+
+
+
+
+
+ You can always turn it off later!
+
+
<%= image_tag 'mascot/WarrenHead.png', alt: 'Two link mages crafting your link.', class: 'mascot', width: 70 %>
+
+
+
+
+
+ You choose!
+
+
+ <%= button_to 'Limit to just friends, please!', apply_link_wizard_path(friends_only: true), class: 'secondary' %>
+ <%= button_to 'Anons on the internet for me, please!', apply_link_wizard_path(friends_only: false) %>
+
+<% end %>
\ No newline at end of file
diff --git a/app/views/link_wizard/orgasmic_conclusion.html.erb b/app/views/link_wizard/orgasmic_conclusion.html.erb
new file mode 100644
index 00000000..d9e10bdb
--- /dev/null
+++ b/app/views/link_wizard/orgasmic_conclusion.html.erb
@@ -0,0 +1,50 @@
+<% content_for :step do %>
+
+ <%= render @link %>
+
+
+
+
<%= image_tag 'mascot/KiHead.png', alt: 'Two link mages crafting your link.', class: 'mascot', width: 70 %>
+
+ Great job <%= current_user.username.capitalize %>!
+
+
+
+
+
+ Yeah that's a great looking link!!
+
+
<%= image_tag 'mascot/TaylorHead.png', alt: 'Two link mages crafting your link.', class: 'mascot', width: 70 %>
+
+
+
+
<%= image_tag 'mascot/WarrenHead.png', alt: 'Two link mages crafting your link.', class: 'mascot', width: 70 %>
+
+ We really think you're going to like the site!
+
+
+
+
+
+ Remember that you can change all of this later in link settings under the
Edit
button located on the
links
page! We're just running this little wizard side business to help you get started! Make as many manual edits as you need later.
+
+
<%= image_tag 'mascot/TaylorHead.png', alt: 'Two link mages crafting your link.', class: 'mascot', width: 70 %>
+
+
+
+
<%= image_tag 'mascot/KiHead.png', alt: 'Two link mages crafting your link.', class: 'mascot', width: 70 %>
+
+ There's some stuff in there we didn't tell you about actually, you should check it out!
+
+
+
+
+
+
+ You choose!
+
+
+ <%= button_to "Settings please!", edit_link_path(@link.id), method: :get, class: 'secondary' %>
+ <%= button_to 'Let me use my link!', link_path(@link.id), method: :get %>
+
+<% end %>
\ No newline at end of file
diff --git a/app/views/link_wizard/summon.html.erb b/app/views/link_wizard/summon.html.erb
new file mode 100644
index 00000000..991210b6
--- /dev/null
+++ b/app/views/link_wizard/summon.html.erb
@@ -0,0 +1,21 @@
+<% content_for :step do %>
+
+ We're almost done! You'll like this though, how much do you like surprises?
+
+ <%= image_tag 'mascot/WarrenSFW.png', alt: 'Two link mages crafting your link.', class: 'mascot', width: 160 %>
+
+
+
+ <%= render @link %>
+
+
+
+
+
<%= image_tag 'mascot/WarrenHead.png', alt: 'Two link mages crafting your link.', class: 'mascot', width: 70 %>
+
+ Sometimes, you want people to surprise you with what they think you'll get off too. Other times, you might want to
+ restrict the options to a specific theme.
+
+
+
+
+
+ It's a good question to ask yourself! You might use different links for different moods. Maybe one for "surprises", and
+ another one for a specific... kink... or... somethi-... Warren. Focus.
+
+
<%= image_tag 'mascot/TaylorHead.png', alt: 'Two link mages crafting your link.', class: 'mascot', width: 70 %>
+
+
+
+
<%= image_tag 'mascot/WarrenHeadHorny.png', alt: 'Two link mages crafting your link.', class: 'mascot', width: 70 %>
+
+ Yeah... I am.
+
+
<%= image_tag 'mascot/TaylorTits.png', alt: 'Two link mages crafting your link.', class: 'mascot', width: 70 %>
+
+
+
+
+ While he finishes up and probably cums in my face without asking for the 7th time today, I can tell you we're
+ talking about the theme tag! This limits surprises, but it's fun when you're just really
+ feeling... into something!
+
+
<%= image_tag 'mascot/TaylorHead.png', alt: 'Two link mages crafting your link.', class: 'mascot', width: 70 %>
+
+
+
+
<%= image_tag 'mascot/WarrenHeadHorny.png', alt: 'Two link mages crafting your link.', class: 'mascot', width: 70 %>
+
+ Like slutty lizard boobs.
+
+
+
+
+
+ They're that good, <%= current_user.username.capitalize %>!~ I'd let you grope a bit, but you know... computers?
+ Are you interested in a theme tag? Warren left some suggestions for you.
+
+
<%= image_tag 'mascot/TaylorHead.png', alt: 'Two link mages crafting your link.', class: 'mascot', width: 70 %>
+
+ <%= button_to 'I prefer to be surprised or will decide later.', next_wizard_path, method: :get %>
+
+<% end %>
\ No newline at end of file
diff --git a/app/views/links/_details.html.erb b/app/views/links/_details.html.erb
index 67464525..a806b702 100644
--- a/app/views/links/_details.html.erb
+++ b/app/views/links/_details.html.erb
@@ -1,16 +1,20 @@
<% target = "link_details_#{link.id}" %>
-<% e621_url = "https://e621.net/posts?tags=#{ CGI.escape("md5:#{ link.post_url[/\w*(?=\.(png|jpg|bmp)$)/] }") }" if link.post_url %>
+<% e621_url = "https://e621.net/posts?md5=#{ CGI.escape(link.post_url[/\w*(?=\.(png|jpg|bmp|webm|gif)$)/]) }" if link.post_url %>
<% client = link_agent_to_icon link.last_ping_user_agent %>
<% devices = {
desktop: :desktop,
android: :mobile,
joihow: :desktop,
automate: :mobile,
+ arson_automate: :mobile,
wallpaper_engine: :desktop,
ioswidget: :mobile,
swift: :desktop,
android_changer: :mobile,
jberliner: :desktop,
+ chewtoy: :desktop,
+ kemkem_userscript: :desktop,
+ xenofluff: :desktop,
unknown: :desktop
} %>
<% device = devices[client] %>
@@ -56,4 +60,4 @@
<% end %>
-<% end %>
\ No newline at end of file
+<% end %>
diff --git a/app/views/links/_form.html.erb b/app/views/links/_form.html.erb
index de4e5d2c..7cfe499e 100644
--- a/app/views/links/_form.html.erb
+++ b/app/views/links/_form.html.erb
@@ -152,7 +152,8 @@
<% if can_show_videos %>
- Videos and GIFs can be selected, not just images. Currently, only the Wallpaper Engine client supports videos.
+ Videos and GIFs can be selected, not just images. Currently, only the Wallpaper Engine client supports
+ videos.
<% else %>
Videos and GIFs cannot be selected, only images are selectable. (Default)
<% end %>
@@ -179,7 +180,8 @@
<% if can_be_set_by_porn_bot %>
Your wallpaper will be changed by our resident horny robot: PornBot. They (a gender-defying icon) select
- a highly-rated post that matches your blacklist rules.
+ a highly-rated post that matches your blacklist rules. PornBot has no preferences unlike the
+ PornLizards.
<% else %>
Your wallpaper will not changed by our resident horny robot: PornBot. You will only get wallpapers from
fleshy human-beings.
@@ -192,6 +194,79 @@
<% end %>
+ <% if can_be_set_by_lizard %>
+ Your wallpaper will be changed by your selected PornLizard <%= lizard.capitalize %>
+ ! <%= lizard_to_description(lizard, current_user&.pervert || false) %>
+ <% else %>
+ Your wallpaper will not changed by any of the PornLizards. It's kind of their thing, you should let at
+ least one mess with you! I'm sure <%= lizard.capitalize %> is horny. If you'd like to pick another,
+ choose one from the site header.
+ <% end %>
+
+
+ <% if is_kink_aligned %>
+
+ <% else %>
+
+ <% end %>
+ Profile Kinks are <%= is_kink_aligned ? 'enforced' : 'ignored' %>
+
+
+ <% if is_kink_aligned %>
+ At least 1 of your user profile kinks will be required to appear on posts sent to this link. Be careful!
+ It's easy to make a configuration that no one can change easily! No one wants to skim massive tag lists
+ just to find something for you.
+ <% else %>
+ Your wallpaper configuration is unaffected by your user profile kinks. All the configuration relative to
+ this link is shown on this page, nothing else affects it.
+ <% end %>
+
+ <% if is_kink_aligned %>
+ <%= turbo_frame_tag :kink_tools do %>
+
<% if link.forked_from %>
@@ -134,6 +146,9 @@
+ <% when :arson_automate %>
+ Arson's Client
+
<% when :wallpaper_engine %>
Lycaon's Wallpaper Engine
@@ -149,6 +164,15 @@
<% when :jberliner %>
JBerliner's Walltaker.sh
+ <% when :chewtoy %>
+ Walltaker Engine
+
+ <% when :kemkem_userscript %>
+ Walltaker For Walltaker
+
+ <% when :xenofluff %>
+ Walltaker eXPerience
+
<% when :unknown %>
<% end %>
@@ -174,4 +198,4 @@
<% if !link.never_expires && link.expires <= Time.now.utc %>
<% end %>
-
\ No newline at end of file
+<% end %>
\ No newline at end of file
diff --git a/app/views/links/_links.html.erb b/app/views/links/_links.html.erb
new file mode 100644
index 00000000..f3ed8273
--- /dev/null
+++ b/app/views/links/_links.html.erb
@@ -0,0 +1,17 @@
+<%# locals: (links:) %>
+
+
+ <% links.each do |link| %>
+
+ <%= render link %>
+
+ <% end %>
+
+ <% if links.count == 0 %>
+
No links?
+
+ You'll need to create a link that others can use to push wallpapers to your device. Try the
+ Link Wizardfor a guided tutorial!
+
+ <% end %>
+
\ No newline at end of file
diff --git a/app/views/links/browse.html.erb b/app/views/links/browse.html.erb
index 787fe049..5ad5964f 100644
--- a/app/views/links/browse.html.erb
+++ b/app/views/links/browse.html.erb
@@ -4,6 +4,13 @@
<%= link_to "Back to dashboard", root_path %>
+
+
+ <%= button_to search_path, method: :get do %>
+
+ Search
+ <% end %>
+
@@ -12,10 +19,29 @@
All public online links ordered by who needs the most attention at the top.
+<% if @new_user_links.count != 0 %>
+
+
New User's Links
+
User's who created their account recently get featured here for a short amount of time.
+
+
+ <% @new_user_links.each do |link| %>
+
+ <%= render link %>
+
+ <% end %>
+
+<% end %>
+
+<% if @new_user_links.count != 0 %>
+
+
The "Algorithm"
+
My arbitrary algorithm that determines the order of this list.
+
+<% end %>
<% @links.each do |link| %>
- <%= turbo_stream_from link %>
<%= render link %>
<% end %>
diff --git a/app/views/links/index.html.erb b/app/views/links/index.html.erb
index bffde20f..86b5baed 100644
--- a/app/views/links/index.html.erb
+++ b/app/views/links/index.html.erb
@@ -5,6 +5,10 @@
<%= link_to "Back to dashboard", root_path %>
- You'll need to click New link in the toolbar to set up a link that others can use
- to push wallpapers to your device.
-
- <% end %>
-
\ No newline at end of file
+<%= render 'links', links: @links %>
\ No newline at end of file
diff --git a/app/views/links/show.html.erb b/app/views/links/show.html.erb
index 9a1cd69b..ef207a16 100644
--- a/app/views/links/show.html.erb
+++ b/app/views/links/show.html.erb
@@ -22,12 +22,18 @@
- Copy URL
+ Copy
Edit
+ <% if @link.wizard_page != nil %>
+
+
+ Finish Wizard
+
+ <% end %>
<%= button_tag "Delete", data: { action: 'click->link#confirm' } %>
@@ -244,7 +250,8 @@
- Links that are forks of this link will receive wallpaper changes that are set here; but only if their separete blacklists allow it. You may receive responses from anyone of the following:
+ Links that are forks of this link will receive wallpaper changes that are set here; but only if their separete
+ blacklists allow it. You may receive responses from anyone of the following:
<% @link.forks.each do |fork| %>
diff --git a/app/views/lizard_tools/index.html.erb b/app/views/lizard_tools/index.html.erb
new file mode 100644
index 00000000..47c30281
--- /dev/null
+++ b/app/views/lizard_tools/index.html.erb
@@ -0,0 +1,9 @@
+
+
+ Lizard Browse
+ Browse which users have a lizard selected.
+
+ <% end %>
+ <%= f.submit %>
+ <% end %>
+<% end %>
diff --git a/app/views/mod_tools/_password_reset_form.erb b/app/views/mod_tools/_password_reset_form.erb
new file mode 100644
index 00000000..d4877242
--- /dev/null
+++ b/app/views/mod_tools/_password_reset_form.erb
@@ -0,0 +1,22 @@
+<%= turbo_frame_tag :mod_tools_password_reset_form do %>
+ <%= form_with url: mod_tools_passwords_update_path, method: :post do |f| %>
+ <%= f.label :email, 'Email address user claims is theirs:', style: "display: block" %>
+ <%= f.text_field :email, value: params['email'] %>
+ <%= f.submit 'Try to generate a reset link (case insensitive)' %>
+ <%= f.submit 'Try to generate a reset link (case sensitive)' %>
+ <% end %>
+
+ <% if params['fail'] || params['link'] %>
+
+ <% if params['fail'] %>
+ <%= params['fail'] %>
+ <% end %>
+
+ <% if params['link'] %>
+
+ Found 1 user, <%= params['username'] %>
+ https://walltaker.joi.how/i-forgor/commit/<%= params['link'] %>
+ <% end %>
+ <% end %>
+
+<% end %>
diff --git a/app/views/mod_tools/_pick_user_form.erb b/app/views/mod_tools/_pick_user_form.erb
new file mode 100644
index 00000000..71290514
--- /dev/null
+++ b/app/views/mod_tools/_pick_user_form.erb
@@ -0,0 +1,25 @@
+<%
+ user ||= nil
+ fail ||= nil
+%>
+
+<%= turbo_frame_tag :mod_tools_pick_user_form do %>
+ <%= form_with url: mod_tools_users_index_url, method: :get do |f| %>
+ <%= f.label :email, 'Email address user claims is theirs:', style: "display: block" %>
+ <%= f.text_field :email, value: params['email'] %>
+ <%= f.submit 'Lookup' %>
+ <% end %>
+ <% if user || fail %>
+
+ <% if fail %>
+ <%= fail %>
+ <% end %>
+
+ <% if user %>
+
+ Found 1 user, <%= user.username %>
+ <%= render 'mod_tools/edit_user_form', user: user %>
+ <% end %>
+
+ <% end %>
+<% end %>
diff --git a/app/views/mod_tools/destroy_user.html.erb b/app/views/mod_tools/destroy_user.html.erb
new file mode 100644
index 00000000..deaa66f3
--- /dev/null
+++ b/app/views/mod_tools/destroy_user.html.erb
@@ -0,0 +1,2 @@
+
ModTools#destroy_user
+
Find me in app/views/mod_tools/destroy_user.html.erb
diff --git a/app/views/mod_tools/index.html.erb b/app/views/mod_tools/index.html.erb
new file mode 100644
index 00000000..b15d9ea6
--- /dev/null
+++ b/app/views/mod_tools/index.html.erb
@@ -0,0 +1,55 @@
+
+
+
+
+ Read me
+
+
+ You can cause IRREVERSIBLE damage here. Both to the site, and our user's privacy. There are no
+ confirmations before you do an action. You need to think before you click.
+
+
+
+ We consider the following to be PII (Personally Identifiable Information):
+
+
+
Email address
+
IP Addresses
+
Messages
+
+
+ This information should NEVER be provided to anyone. That includes,
+ NOT EVEN TELLING THE USER THEIR OWN PII INFO. Always assume someone's account is hacked and
+ that you are being manipulated. You may ONLY ask for THEM to provide it, and you
+ can confirm if it's correct or not. Provide no more information.
+
+
+
+ If you fuck up with tools I provide to you on this panel, you will lose all access. - Gray
+
+
+
+
+
+ Mod Tools
+ Gray trusts you. The highlighted button in each category is the most useful.
+
+ Ask something like the following: "Can you give me all or part of the email you used to make the account? I only need it to confirm this is your account." A partial email is alright, as long as it contains something on the left side of the @ symbol. Make sure they at least give you most of it though, single words might be guessable. If they say "it was a gmail.com address", this does not count.
+
+
+
+
+
+
+ Be vigilant.
+
+
If they refuse, or say they forgot entirely, you cannot reset their password. Simply refuse, explain that it's required, and end the DM. They may be manipulating you to get access to the account. This has happened before.
+
+
If they used an email hiding service, that's not an excuse for not remembering it.
+
+
+
Step 2: Check proof and generate link
+
+ Enter their response below. This does a check thru the user's table, looking for an email similar to the entered value. Capitalization is ignored, but it must be one whole chunk of the email address. ("gray@gmail.com" will match "pupgray@gmail.com", but NOT "pupg@gmail.com")
+
+
+
+
+
+
+ Be vigilant.
+
+
Be somewhat flexible if it's obvious they made a typo, but if there is no results, and they are sure that their email is that, end the DM. Give maybe 2 chances to try different ones.
+
+
If they used an email hiding service, that's not an excuse for not remembering it.
+ Verify that you got a green checkbox in step 2, and that the user name that showed up matches what it should be for this user. If yes, you may give them the password reset link from step 2.
+
+
+
+ If you got a red cross, this means no account was found. Use your best judgement about if user should be asked again. Remember, anyone could be trying to get into an account.
+
\ No newline at end of file
diff --git a/app/views/mod_tools/show_quarantine.html.erb b/app/views/mod_tools/show_quarantine.html.erb
new file mode 100644
index 00000000..d3df9839
--- /dev/null
+++ b/app/views/mod_tools/show_quarantine.html.erb
@@ -0,0 +1,89 @@
+
+<% end %>
\ No newline at end of file
diff --git a/app/views/mod_tools/show_recent_events.html.erb b/app/views/mod_tools/show_recent_events.html.erb
new file mode 100644
index 00000000..6504554c
--- /dev/null
+++ b/app/views/mod_tools/show_recent_events.html.erb
@@ -0,0 +1,44 @@
+
+
+ <%= link_to "Cancel", mod_tools_index_path %>
+
+
+
+
+
+ Recent Events
+ Gray trusts you.
+
+
+
+ <% @events.each do |event| %>
+
+
+
<%= event.name %>
+
+
+ <%= event.visit.banned_ip.present? ? "❌ IPBANNED BY #{event.visit.banned_ip.banned_by.username.upcase}" : '' %>
+ <%= event.visit.ip %>
+ <% if event.user %>
+ <%= link_to "Caused by #{event.user.username}", mod_tools_users_index_url(email: event.user.email) %>
+ <% else %>
+ Caused by ⚠️ Anon!
+ <% end %>
+
+ <% if event.properties.key? 'attempted_post_id' %>
+ <%= link_to "https://e621.net/posts/#{event.properties['attempted_post_id']}", "https://e621.net/posts/#{event.properties['attempted_post_id']}", target: '_blank' %>
+ <% end %>
+ <% if event.properties.key? 'past_link_id' %>
+ <% past_link = PastLink.find_by_id(event.properties['past_link_id']) %>
+ <% if past_link %>
+ <%= image_tag past_link.post_thumbnail_url, width: 320 %>
+ <% end %>
+ <% end %>
+ <%= event.properties %>
+
\ No newline at end of file
diff --git a/app/views/mod_tools/show_user.html.erb b/app/views/mod_tools/show_user.html.erb
new file mode 100644
index 00000000..1ba3feed
--- /dev/null
+++ b/app/views/mod_tools/show_user.html.erb
@@ -0,0 +1,20 @@
+<% user ||= nil %>
+
+
+
+ <%= link_to "Cancel", mod_tools_index_path %>
+
+
+
+
+
+ Edit Any User
+ Gray trusts you. Remember our PII rules.
+
+ Woogle searches for links, but will look at the user's bio and username as well.
+ This means you may see links that don't seem to contain your search term. This just means the
+ word appeared in their user profile.
+
+
+ <% end %>
+<% end %>
diff --git a/app/views/search/results.html.erb b/app/views/search/results.html.erb
new file mode 100644
index 00000000..703ed0b2
--- /dev/null
+++ b/app/views/search/results.html.erb
@@ -0,0 +1,14 @@
+<%= turbo_frame_tag :link_search_results do %>
+ Found <%= pluralize @total, 'result' %>
+ <% @links.each do |link| %>
+
+<% end %>
\ No newline at end of file
diff --git a/app/views/session/new.html.erb b/app/views/session/new.html.erb
index 3b94a3aa..5bcaefca 100644
--- a/app/views/session/new.html.erb
+++ b/app/views/session/new.html.erb
@@ -19,7 +19,7 @@
<%= check_box_tag :keep_me_logged_in %>
- <%= label_tag :keep_me_logged_in %>
+ <%= label_tag 'Keep me logged in for 2 weeks' %>
\ No newline at end of file
diff --git a/app/views/settings/save.html.erb b/app/views/settings/save.html.erb
new file mode 100644
index 00000000..127a11e8
--- /dev/null
+++ b/app/views/settings/save.html.erb
@@ -0,0 +1,2 @@
+
Settings#save
+
Find me in app/views/settings/save.html.erb
diff --git a/app/views/surrenders/_form.html.erb b/app/views/surrenders/_form.html.erb
new file mode 100644
index 00000000..421a4622
--- /dev/null
+++ b/app/views/surrenders/_form.html.erb
@@ -0,0 +1,10 @@
+<%# locals: (surrender:, friendship_options:) -%>
+
+<%= form_with model: surrender do |f| %>
+ <%= f.label :friendship, class: 'form__row form__row--stacking' do %>
+ Surrender To
+ <%= f.select :friendship, friendship_options, {}, class: 'no-margin' %>
+ <% end %>
+
+ <%= f.submit "Give them my account for up to 24hrs", class: 'danger-button accent-block__button' %>
+<% end %>
\ No newline at end of file
diff --git a/app/views/surrenders/_surrender.html.erb b/app/views/surrenders/_surrender.html.erb
new file mode 100644
index 00000000..d708b069
--- /dev/null
+++ b/app/views/surrenders/_surrender.html.erb
@@ -0,0 +1,17 @@
+<%# locals: (surrender:) -%>
+
+<%= turbo_frame_tag dom_id(surrender), target: '_top' do %>
+
+
+
+ Only you see this
+
+
+ Surrendered to <%= surrender.controller.username %>
+
+
+ <%= button_to surrender_path(surrender), method: :delete, class: 'accent-block__button' do %>
+ Stop and return account
+ <% end %>
+
+<% end %>
\ No newline at end of file
diff --git a/app/views/surrenders/index.html.erb b/app/views/surrenders/index.html.erb
new file mode 100644
index 00000000..2641db30
--- /dev/null
+++ b/app/views/surrenders/index.html.erb
@@ -0,0 +1,74 @@
+
+ Do you like profile play? Normally, accounts on most websites can only be given up to someone by
+ sharing a password. Not only is this a horrible idea for your own personal security, for a website, it's also
+ detrimental! We need to be able to attribute actions to a user to moderate and secure the site.
+
+
+
+ So wouldn't it be cool if you could just...
+ give your account to a friend for a bit, no questions asked?
+
+
+
+
+
+
+ Your failure to read this is not a bug.
+
+
+ This tool instead allows you to give full access to your account to any friend. You do not need to
+ share your password. They will not see your email address, or login credentials. (not even
+ walltaker
+ can know what your plain-text password is in-fact!)
+
+
+
+ A walltaker moderator will NEVER ask you to use this tool.
+
+
+
+ Full access, means full access. This is giving up your account to someone temporarily! You are able
+ to
+ abort during the time period when the other user has access to your account, but there is no easy undo option for
+ things they would've already done.
+
+
+
+ They can
+
+
+
chat,
+
make links,
+
send wallpapers to others,
+
change your profile and link settings,
+
delete or add friends,
+
and otherwise, use and abuse your account appearing as you.
+
+
+
+ They cannot
+
+
+
see your password,
+
see your email address.
+
That's literally it. Have I made it clear yet? They can do a lot.
+
+
+
+
+
+
+ If you aren't scared off, and want someone to control your account...
+
+ Remember, you are giving up your full account, for up to 24hrs, to someone that will appear as
+ you
+ on the website. You can abort this once started, however damage already done by the person using
+ your account is only reparable manually. (this includes social damage, they will be able to message your friends
+ in
+ Goon Threads, or send gross wallpapers.)
+
+
+
+<% end %>
\ No newline at end of file
diff --git a/app/views/users/request_password_reset.html.erb b/app/views/users/request_password_reset.html.erb
index 80998a6c..419bc74e 100644
--- a/app/views/users/request_password_reset.html.erb
+++ b/app/views/users/request_password_reset.html.erb
@@ -4,9 +4,7 @@
- This is an automated password reset system. I cheaped out HARD here, since email delivery is a surprisingly expensive
- service to use when my budget is $3/month. You should receive an email, but some email providers block the service I'm
- using to send this. Check your spam folder. If it never arrives, contact
+ This is an automated password reset system. You'll receive an email with a link to reset your password. If it never arrives, contact
Gray.
diff --git a/app/views/users/sets.html.erb b/app/views/users/sets.html.erb
new file mode 100644
index 00000000..e1aef63e
--- /dev/null
+++ b/app/views/users/sets.html.erb
@@ -0,0 +1,12 @@
+<% content_for(:html_title) { "Walltaker #{@user.username} - Wallpapers Set For Others" } %>
+
+
Below is a list of the last 50 wallpapers by <%= @user.username %> for others. Click any wallpaper to go to see
+ the full size image.
+
+<%= render partial: 'users/past_links', locals: { past_links: @past_links } %>
\ No newline at end of file
diff --git a/app/views/users/show.html.erb b/app/views/users/show.html.erb
index e7ee4e67..c3efa2c0 100644
--- a/app/views/users/show.html.erb
+++ b/app/views/users/show.html.erb
@@ -26,6 +26,10 @@
<% if current_user && current_user.id == @user.id %>
+ <%= link_to '/settings' do %>
+
settings
+ <% end %>
+
<%= button_to "New link", new_link_path, method: :get %>
<% end %>
@@ -38,7 +42,16 @@
<% end %>
- Set <%= @user.set_count %> wallpapers
+ <%= link_to user_sets_path(@user.username) do %>
+ Set <%= @user.set_count %> wallpapers
+ <% end %>
+
+
+ <% if @user.username == 'gray' %>
+ Caused <%= pluralize @total_orgasms_caused, 'orgasm' %>, technically.
+ <% else %>
+ Caused <%= pluralize @total_orgasms_caused, 'orgasm' %>
+ <% end %>
Last online
@@ -51,6 +64,8 @@
<% end %>
+ <%= turbo_frame_tag :kink_tools, src: user_kinks_path(@user.username) %>
+
<% if @total_orgasms_by_day %>
<%= area_chart @total_orgasms_by_day, colors: ["#606575"], legend: false, height: "60px", suffix: '💦', library: {
scales: {
@@ -75,7 +90,7 @@
<% unless @past_links.empty? %>
<%= link_to past_links_path, class: 'small see-all-past-wallpapers' do %>
- See all past wallpapers
+ See past 50 wallpapers
<% end %>
<% end %>
@@ -90,27 +105,29 @@
Only you see this
-
-
- Your API key
-
+
+
+
+ Your API key
+
-
- Use this key to grant special powers to a client you're using. It does not grant full access to your account,
- but does allow clients to set a response on links on your behalf.
- You can only have 1 API key at once. When you randomize a new one, the old one will stop
- working.
-
+
+ Use this key to grant special powers to a client you're using. It does not grant full access to your account,
+ but does allow clients to set a response on links on your behalf.
+ You can only have 1 API key at once. When you randomize a new one, the old one will stop
+ working.
+
+
<% if @user.api_key.present? %>
<%= @user.api_key %>
- <%= button_to user_new_api_key_path(current_user.username), class: 'danger-button' do %>
+ <%= button_to user_new_api_key_path(current_user.username), class: 'danger-button accent-block__button' do %>
Give me a new one
<% end %>
<% else %>
- <%= button_to user_new_api_key_path(current_user.username) do %>
+ <%= button_to user_new_api_key_path(current_user.username), class: 'accent-block__button' do %>
Generate my API key
<% end %>
<% end %>
diff --git a/bin/setup b/bin/setup
index ec47b79b..3cd5a9d7 100755
--- a/bin/setup
+++ b/bin/setup
@@ -5,7 +5,7 @@ require "fileutils"
APP_ROOT = File.expand_path("..", __dir__)
def system!(*args)
- system(*args) || abort("\n== Command #{args} failed ==")
+ system(*args, exception: true)
end
FileUtils.chdir APP_ROOT do
diff --git a/config/application.rb b/config/application.rb
index 7de02abe..4e5eb961 100644
--- a/config/application.rb
+++ b/config/application.rb
@@ -11,6 +11,8 @@ class Application < Rails::Application
# Initialize configuration defaults for originally generated Rails version.
config.load_defaults 7.0
+ config.exceptions_app = self.routes
+
# Configuration for the application, engines, and railties goes here.
#
# These settings can be overridden in specific environments using the files
@@ -20,6 +22,8 @@ class Application < Rails::Application
# config.eager_load_paths << Rails.root.join("extras")
Rails.application.config.hosts << "joi.how"
Rails.application.config.hosts << "walltaker.joi.how"
-
+ Rails.application.config.hosts << "10.244.14.67"
+ Rails.application.config.hosts << "walltaker-master-39nrv.ondigitalocean.app"
+ Rails.application.config.hosts << "walltaker-7e4cf22c7c3d.herokuapp.com"
end
end
diff --git a/config/blazer.yml b/config/blazer.yml
index 83e9959a..6c071e7f 100644
--- a/config/blazer.yml
+++ b/config/blazer.yml
@@ -2,7 +2,7 @@
data_sources:
main:
- url: postgres://postgres:<%= ENV['POSTGRES_PASSWORD'] %>@database:5432/walltaker
+ url: <%= ENV['DATABASE_URL'] %>
# statement timeout, in seconds
# none by default
diff --git a/config/cronotab.rb b/config/cronotab.rb
new file mode 100644
index 00000000..234472ef
--- /dev/null
+++ b/config/cronotab.rb
@@ -0,0 +1,34 @@
+require 'rake'
+
+Rails.app_class.load_tasks
+
+class PornBotJob
+ def perform
+ Rake::Task['walltaker:porn_bot_round'].execute
+ end
+end
+
+class KiJob
+ def perform
+ Rake::Task['walltaker:ki_round'].execute
+ end
+end
+
+
+class WarrenJob
+ def perform
+ Rake::Task['walltaker:warren_round'].execute
+ end
+end
+
+
+class TaylorJob
+ def perform
+ Rake::Task['walltaker:taylor_round'].execute
+ end
+end
+
+Crono.perform(PornBotJob).every 11.minutes
+Crono.perform(KiJob).every 8.minutes
+Crono.perform(WarrenJob).every 8.minutes
+Crono.perform(TaylorJob).every 8.minutes
diff --git a/config/database.yml b/config/database.yml
index 643a2a83..76d45bfd 100644
--- a/config/database.yml
+++ b/config/database.yml
@@ -14,7 +14,7 @@ development: &development
adapter: postgresql
encoding: unicode
database: walltaker
- username: toish
+ username: postgres
password:
host: localhost
port: 5432
@@ -27,11 +27,7 @@ test:
database: walltaker_test
production:
- <<: *default
adapter: postgresql
encoding: unicode
- database: walltaker
- username: <%= ENV['POSTGRES_USER'] %>
- password: <%= ENV['POSTGRES_PASSWORD'] %>
- host: database
- port: 5432
+ timeout: 5000
+ url: <%= ENV['DATABASE_URL'] %>
diff --git a/config/environment.rb b/config/environment.rb
index 096dee72..759681e5 100644
--- a/config/environment.rb
+++ b/config/environment.rb
@@ -5,13 +5,12 @@
Rails.application.initialize!
ActionMailer::Base.smtp_settings = {
- :user_name => 'apikey', # This is the string literal 'apikey', NOT the ID of your API key
- :password => ENV['SENDGRID_API_KEY'], # This is the secret sendgrid API key which was issued during API key creation
- :domain => 'pawcorp.org',
- :address => 'smtp.sendgrid.net',
- :port => 587,
- :authentication => :plain,
- :enable_starttls_auto => true
+ :port => ENV['MAILGUN_SMTP_PORT'],
+ :address => ENV['MAILGUN_SMTP_SERVER'],
+ :user_name => ENV['MAILGUN_SMTP_LOGIN'],
+ :password => ENV['MAILGUN_SMTP_PASSWORD'],
+ :domain => 'walltaker.joi.how',
+ :authentication => :plain
}
ActionMailer::Base.delivery_method = :smtp
ActionMailer::Base.perform_deliveries = true
diff --git a/config/environments/production.rb b/config/environments/production.rb
index c4a85cb2..01a16d0c 100644
--- a/config/environments/production.rb
+++ b/config/environments/production.rb
@@ -23,13 +23,13 @@
# Disable serving static files from the `/public` folder by default since
# Apache or NGINX already handles this.
- config.public_file_server.enabled = true
+ config.public_file_server.enabled = ENV["RAILS_SERVE_STATIC_FILES"].present?
# Compress CSS using a preprocessor.
# config.assets.css_compressor = :sass
# Do not fallback to assets pipeline if a precompiled asset is missed.
- config.assets.compile = true
+ config.assets.compile = false
# Enable serving of images, stylesheets, and JavaScripts from an asset server.
# config.asset_host = "http://assets.example.com"
@@ -44,13 +44,13 @@
# Mount Action Cable outside main process or domain.
# config.action_cable.mount_path = nil
# config.action_cable.url = "wss://walltaker.joi.how/cable"
- config.action_cable.allowed_request_origins = [ "https://walltaker.joi.how", /https:\/\/walltaker.joi.how/, /http:\/\/walltaker.joi.how/, "localhost" ]
-config.action_cable.disable_request_forgery_protection = true
-config.hosts << "localhost"
+ config.action_cable.allowed_request_origins = [ "https://walltaker.joi.how", /https:\/\/walltaker.joi.how/, /http:\/\/walltaker.joi.how/, "localhost", 'walltaker-7e4cf22c7c3d.herokuapp.com' ]
+ config.action_cable.disable_request_forgery_protection = true
+ config.hosts << "localhost"
# Force all access to the app over SSL, use Strict-Transport-Security, and use secure cookies.
- # config.force_ssl = true
+ config.force_ssl = true
# Include generic and useful information about system operation, but avoid logging too much
# information to avoid inadvertent exposure of personally identifiable information (PII).
@@ -60,11 +60,11 @@
config.log_tags = [ :request_id ]
# Use a different cache store in production.
- # config.cache_store = :mem_cache_store
+ config.cache_store = :redis_cache_store, { url: ENV['REDIS_URL'], ssl_params: { verify_mode: OpenSSL::SSL::VERIFY_NONE } }
# Use a real queuing backend for Active Job (and separate queues per environment).
# config.active_job.queue_adapter = :resque
- # config.active_job.queue_name_prefix = "Walltaker_production"
+ # config.active_job.queue_name_prefix = "walltaker_production"
config.action_mailer.perform_caching = false
diff --git a/config/initializers/ahoy.rb b/config/initializers/ahoy.rb
index fad5c2c4..120a664c 100644
--- a/config/initializers/ahoy.rb
+++ b/config/initializers/ahoy.rb
@@ -8,3 +8,7 @@ class Ahoy::Store < Ahoy::DatabaseStore
# we recommend configuring local geocoding as well
# see https://github.com/ankane/ahoy#geocoding
Ahoy.geocode = false
+
+Ahoy.exclude_method = lambda do |controller, request|
+ request.path.starts_with?("/api")
+end
\ No newline at end of file
diff --git a/config/initializers/content_security_policy.rb b/config/initializers/content_security_policy.rb
index 3621f97f..54f47cf1 100644
--- a/config/initializers/content_security_policy.rb
+++ b/config/initializers/content_security_policy.rb
@@ -1,8 +1,8 @@
# Be sure to restart your server when you modify this file.
-# Define an application-wide content security policy
-# For further information see the following documentation
-# https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Security-Policy
+# Define an application-wide content security policy.
+# See the Securing Rails Applications Guide for more information:
+# https://guides.rubyonrails.org/security.html#content-security-policy-header
# Rails.application.configure do
# config.content_security_policy do |policy|
@@ -20,7 +20,6 @@
# config.content_security_policy_nonce_generator = ->(request) { request.session.id.to_s }
# config.content_security_policy_nonce_directives = %w(script-src)
#
-# # Report CSP violations to a specified URI. See:
-# # https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Security-Policy-Report-Only
+# # Report violations without enforcing the policy.
# # config.content_security_policy_report_only = true
# end
diff --git a/config/initializers/new_framework_defaults_7_0.rb b/config/initializers/new_framework_defaults_7_0.rb
new file mode 100644
index 00000000..b13ef5ed
--- /dev/null
+++ b/config/initializers/new_framework_defaults_7_0.rb
@@ -0,0 +1,143 @@
+# Be sure to restart your server when you modify this file.
+#
+# This file eases your Rails 7.0 framework defaults upgrade.
+#
+# Uncomment each configuration one by one to switch to the new default.
+# Once your application is ready to run with all new defaults, you can remove
+# this file and set the `config.load_defaults` to `7.0`.
+#
+# Read the Guide for Upgrading Ruby on Rails for more info on each option.
+# https://guides.rubyonrails.org/upgrading_ruby_on_rails.html
+
+# `button_to` view helper will render `
- <%= form_with(model: orgasm, class: 'orgasms') do |form| %>
+ <%= form_with(model: orgasm, class: 'orgasms orgasms-log') do |form| %>
Orgasm
- A logged orgasm is recorded on your public profile, and will benefit your ranking on the browse page! It's also just fun.
+ An orgasm will be recorded on your public profile for everyone to see! It's fun!
<% end %>
\ No newline at end of file
diff --git a/nuttracker/app/views/nuttracker/orgasms/new.html.erb b/nuttracker/app/views/nuttracker/orgasms/new.html.erb
index 163ab973..004d1c9c 100644
--- a/nuttracker/app/views/nuttracker/orgasms/new.html.erb
+++ b/nuttracker/app/views/nuttracker/orgasms/new.html.erb
@@ -1,6 +1,6 @@