|  |  | @ -42,21 +42,36 @@ local function extract_text_data(specific) | 
			
		
	
		
			
				
					|  |  |  |   return table.concat(tbl, '\n') | 
			
		
	
		
			
				
					|  |  |  | end | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  | -- Keys that can have visible urls | 
			
		
	
		
			
				
					|  |  |  | local url_keys = lua_util.list_to_hash{ | 
			
		
	
		
			
				
					|  |  |  |   'description', | 
			
		
	
		
			
				
					|  |  |  |   'location', | 
			
		
	
		
			
				
					|  |  |  |   'summary', | 
			
		
	
		
			
				
					|  |  |  |   'organizer', | 
			
		
	
		
			
				
					|  |  |  |   'organiser', | 
			
		
	
		
			
				
					|  |  |  |   'attendee', | 
			
		
	
		
			
				
					|  |  |  |   'url' | 
			
		
	
		
			
				
					|  |  |  | } | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  | local function process_ical(input, mpart, task) | 
			
		
	
		
			
				
					|  |  |  |   local control={n='\n', r=''} | 
			
		
	
		
			
				
					|  |  |  |   local rspamd_url = require "rspamd_url" | 
			
		
	
		
			
				
					|  |  |  |   local escaper = l.Ct((gen_grammar() / function(key, value) | 
			
		
	
		
			
				
					|  |  |  |     value = value:gsub("\\(.)", control) | 
			
		
	
		
			
				
					|  |  |  |     key = key:lower() | 
			
		
	
		
			
				
					|  |  |  |     key = key:lower():match('^([^;]+)') | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |     if key and url_keys[key] then | 
			
		
	
		
			
				
					|  |  |  |       local local_urls = rspamd_url.all(task:get_mempool(), value) | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |       if local_urls and #local_urls > 0 then | 
			
		
	
		
			
				
					|  |  |  |         for _,u in ipairs(local_urls) do | 
			
		
	
		
			
				
					|  |  |  |         lua_util.debugm(N, task, 'ical: found URL in ical %s', | 
			
		
	
		
			
				
					|  |  |  |             tostring(u)) | 
			
		
	
		
			
				
					|  |  |  |           lua_util.debugm(N, task, 'ical: found URL in ical key "%s": %s', | 
			
		
	
		
			
				
					|  |  |  |                   key, tostring(u)) | 
			
		
	
		
			
				
					|  |  |  |           task:inject_url(u, mpart) | 
			
		
	
		
			
				
					|  |  |  |         end | 
			
		
	
		
			
				
					|  |  |  |       end | 
			
		
	
		
			
				
					|  |  |  |     end | 
			
		
	
		
			
				
					|  |  |  |     lua_util.debugm(N, task, 'ical: ical key %s = "%s"', | 
			
		
	
		
			
				
					|  |  |  |         key, value) | 
			
		
	
		
			
				
					|  |  |  |     return {key, value} | 
			
		
	
	
		
			
				
					|  |  | 
 |