Clamxir 
Database wrapper for clamav based on clamby
This package depends of clamd.
Installation
If available in Hex, the package can be installed
by adding clamxir to your list of dependencies in mix.exs:
def deps do
[
{:clamxir, "~> 0.1.4"}
]
endUsage
Clamxir receive the configs on each public method, and based on the configs, will perform their task.
The config file by default is the struct %Clamxir{}. The default values of
the structure are:
%Clamxir{
daemonize: false,
stream: false,
check: fase
}Set daemonize to true, in order to use one instance of the clamav instead of the creation of an instance each time that the scanner is invoke.
Check is a flag to check if the scanner is available. Set to true in order to
iex> Clamxir.safe?(%Clamxir{}, "/path/file")Stream true, will pass the argument --stream to clamdscan.
iex> Clamxir.safe?(%Clamxir{stream: true}, "/path/file")check if the scanner exists, before try to use it.
iex> Clamxir.safe?(%Clamxir{check: true}, "/path/file")Integration with Phoenix
Install as dependency mix.exs
{:clamxir, "~> 0.1.4"}Use in the controller action where the files are uploaded
def upload(conn, params) do file = params["index"]["file"] # Requires to have clamavdscann to work case Clamxir.safe?(%Clamxir{daemonize: true}, file.path) do true -> # Process the file and ... conn |> put_flash(:info, "Created successfully") |> redirect(to: "/") false -> conn |> put_flash(:error, "Virus!!") |> redirect(to: "/") end end
For a working sample please refer to: https://github.com/ramortegui/sample_phoenix_clamxir
TODO
- Add Logger features
Documentation can be generated with ExDoc and published on HexDocs. Once published, the docs can be found at https://hexdocs.pm/clamxir.