refactor: sha256 slug generation
This commit is contained in:
@@ -9,6 +9,7 @@ module App::Controllers::Link
|
||||
class Create < App::Lib::BaseController
|
||||
include App::Models
|
||||
include App::Lib
|
||||
include App::Services
|
||||
|
||||
def call(env)
|
||||
user = env.get("user").as(User)
|
||||
@@ -29,7 +30,7 @@ module App::Controllers::Link
|
||||
|
||||
attempts = 0
|
||||
loop do
|
||||
slug = Random::Secure.urlsafe_base64(attempts >= 2 ? 6 : 5).gsub(/[^a-zA-Z0-9]/, "")
|
||||
slug = SlugService.generate_base64(url, 5 + attempts)
|
||||
unless Database.get_by(Link, slug: slug)
|
||||
link.slug = slug
|
||||
break
|
||||
|
||||
@@ -0,0 +1,9 @@
|
||||
require "digest"
|
||||
|
||||
module App::Services::SlugService
|
||||
def self.generate_base64(link : String, size : Int32) : String
|
||||
hash = Digest::SHA256.digest(link)
|
||||
base64_encoded = Base64.urlsafe_encode(hash).strip.tr("+/", "")
|
||||
base64_encoded[0, size]
|
||||
end
|
||||
end
|
||||
Reference in New Issue
Block a user