Giter VIP home page Giter VIP logo

fennel's Introduction

Fennel

Fennel

Fennel (c) 2014-21 by SwordLord - the coding crew

Introduction

Fennel is a lightweight CardDAV / CalDAV server. It is written in Go and based on the proof of concept Fennel.js (which is written in JavaScript and running on NodeJS).

If you are looking for a lightweight CalDAV / CardDAV server, Fennel might be for you:

  • hassle free installation. Drop a binary, start it, that's it.
  • authentication is meant to be pluggable. While we concentrate on CourierAuth and .htaccess, you can add whatever can check a username and a password.
  • authorisation is meant to be pluggable as well.
  • the data storage backend is meant to be pluggable as well. While we start with SQLite3, we do use an ORM. Whatever database can be used with Gorm can be used as storage backend for Fennel.
  • and after all, Fennel is OSS and is written in Go. Whatever you do not like, you are free to replace / rewrite. Just respect the licence and give back.

Status

Build Status

Fennel is beta software and should be handled as such:

  • The CalDAV part is still work in progress.
  • The CardDAV part is still work in progress.

Fennel is tested on Calendar on iOS > v10.0 and on OSX Calendar as well as with Mozilla Lightning. If you run Fennel with another client your mileage may vary.

What's missing:

  • different clients (we will somewhen test with other clients, but we did not do thoroughly yet)
  • Test cases for everything. We would love to have test cases for as many scenarios and features as possible. It is a pain in the neck to test Fennel otherwise. If you wonder how we test, have a look at the testing code in Fennel.js as well as at the Project Spoon
  • While Fennel's goal is to have an RBAC based authorisation system, Fennel does currently only know global permissions without groups. But we are working on it.

Installation

From source

Dependencies: golang, GNU Make

git clone https://github.com/swordlordcodingcrew/fennel
cd fennel
make

Executables fenneld and fennelcli are built into the bin/ folder.

How to set up transport security

Since Fennel does not bring it's own crypto, you may need to install a TLS server in front of Fennel. You can do so with nginx, which is a lightweight http server and proxy.

First prepare your /etc/apt/sources.list file (or just install the standard Debian package, your choice):

deb http://nginx.org/packages/debian/ stretch nginx
deb-src http://nginx.org/packages/debian/ stretch nginx

Update apt-cache and install nginx to your system.

sudo update
sudo apt-get install nginx

Now configure a proxy configuration so that your instance of nginx will serve / prox the content of / for the Fennel server. To do so, you will need a configuration along this example:

server {
    listen   443;
    server_name  fennel.yourdomain.tld;

    access_log  /var/www/logs/fennel_access.log combined;
    error_log  /var/www/logs/fennel_error.log;

    root /var/www/pages/;
    index  index.html index.htm;

    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   /var/www/nginx-default;
    }

    location / {
        proxy_pass         http://127.0.0.1:8888;
        proxy_redirect     off;
        proxy_set_header   Host             $host;
        proxy_set_header   X-Real-IP        $remote_addr;
        proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for;
        proxy_buffering    off;
    }

    ssl  on;
    ssl_certificate  /etc/nginx/certs/yourdomain.tld.pem;
    ssl_certificate_key  /etc/nginx/certs/yourdomain.tld.pem;
    ssl_session_timeout  5m;

    # modern configuration. tweak to your needs.
    ssl_protocols TLSv1.1 TLSv1.2;
    ssl_ciphers 'ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!3DES:!MD5:!PSK';
    ssl_prefer_server_ciphers on;

    # HSTS (ngx_http_headers_module is required) (15768000 seconds = 6 months)
    add_header Strict-Transport-Security max-age=15768000;
}

Please check this site for updates on what TLS settings currently make sense:

https://mozilla.github.io/server-side-tls/ssl-config-generator

Now run or reset your nginx and start your instance of Fennel.

Thats it, your instance of Fennel should run now. All logs are sent to stdout for now. Have a look at /libs/log.js if you want to change the options.

Configuration

All parameters which can be configured right now are in the file fennel.config.js. There are not much parameters yet, indeed. But Fennel is not ready production anyway. And you are welcome to help out in adding parameters and configuration options.

Contribution

If you happen to know how to write Go, documentation or can help out with something else, drop us a note at contact at swordlord dot com. As more helping hands we have, as quicker this server gets up and feature complete.

If some feature is missing, just remember that this is an Open Source Project. If you need something, think about contributing it yourself, pull requests welcome...

Dependencies

When compiling, have a look at the vendor folder. Binaries have no direct Dependency whatsoever. You might want to have your database backend ready though.

License

Fennel is published under the GNU Affero General Public Licence version 3. See the LICENCE file for details.

fennel's People

Contributors

lordeidi avatar mfashby avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

fennel's Issues

Support for freebusy

What is the current state of support for free-busy querying?

Freebusy Read URL:
The foundation of scheduling is the availability of information about those periods when an attendee or resource is available to be scheduled and when that attendee or resource is not available to be scheduled. This information is referred to in calendaring and scheduling as "Freebusy" time, and is most commonly expressed as an [RFC2445] VFREEBUSY object, which can be a request for Freebusy time, a response to a request, or a published set of busy time.

Better build instructions

Hey. The project seems really interesting and I'd love to see whether it's usable. However, I'm not a Go developer, and the Makefile doesn't seem to build anything. Would be great to get some better build instructions. I'm installing on FreeBSD.

How to compile ?

I wanted to give your project a try but "Just compile it yourself" is a rather broad statement regarding go xD
Could you provide some pointers ? Also when checking out your repository there is no go files in the vendored folders, do you use a package manager like gdm or pulling out every dependency by hand ?

cant login

I run fenneld in vps server and I use : http://serveradress:8888 in my browser
a login alert appears and when I add a user in fennelcli and the information that I added to the login part is not working properly.
how can I resolve this problem?

Dav5x gets 405 error trying to access REPORT /cal/<user>

Steps to reproduce:

  • start fennel server, add user with fennelcli
  • install dav5x on android device, add account using credentials for fennel.

Expected behaviour:

  • successful login and calendars list

Actual behaviour:

  • 405 error, no calendars shown

See attached error log
report cal err.log

Corresponding server log is simply:

[negroni] 2021-11-20T15:07:47Z | 405 | 	 207.595185ms | 192.168.1.108:8888 | REPORT /cal/martin/

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.