36 lines
		
	
	
		
			879 B
		
	
	
	
		
			Elixir
		
	
	
	
	
	
			
		
		
	
	
			36 lines
		
	
	
		
			879 B
		
	
	
	
		
			Elixir
		
	
	
	
	
	
| defmodule Ketbin.Pastes.Utils do
 | |
|   defp rand_vowel do
 | |
|     String.graphemes("aeiou")
 | |
|     |> Enum.take_random(1)
 | |
|     |> Enum.at(0)
 | |
|   end
 | |
| 
 | |
|   defp rand_consonant do
 | |
|     String.graphemes("bcdfghjklmnpqrstvwxyz")
 | |
|     |> Enum.take_random(1)
 | |
|     |> Enum.at(0)
 | |
|   end
 | |
| 
 | |
|   def generate_key(length \\ 10) do
 | |
|     random = Enum.random([0, 1])
 | |
|     Enum.map(0..length, fn i -> if Integer.mod(i, 2) == random, do: rand_consonant(), else: rand_vowel() end)
 | |
|     |> List.to_string
 | |
|   end
 | |
| 
 | |
|   def is_url?(url) do
 | |
|     try do
 | |
|       uri = URI.parse(url)
 | |
|       uri.scheme != nil && uri.host =~ "." && Enum.member?(["https", "http", "mailto"], uri.scheme) && !(uri.host =~ "katb.in")
 | |
|     rescue
 | |
|       FunctionClauseError -> false
 | |
|     end
 | |
|   end
 | |
| 
 | |
|   def is_valid_name?(name) do
 | |
|     case name do
 | |
|       x when x in ["pastes", "users"] -> false
 | |
|       _ -> Regex.match?(~r/^[a-zA-Z0-9_]*$/, name)
 | |
|     end
 | |
|   end
 | |
| end
 | 
