name: onionshare
base: core20
version: "2.6"
summary: Securely and anonymously share files, host websites, and chat using Tor
description: |
  OnionShare lets you securely and anonymously send and receive files. It works by starting
  a web server, making it accessible as a Tor onion service, and generating an unguessable
  web address so others can download files from you, or upload files to you. It does _not_
  require setting up a separate server or using a third party file-sharing service.

grade: stable # stable or devel
confinement: strict

architectures:
  - build-on: amd64
  - build-on: arm64
  - build-on: armhf

apps:
  onionshare:
    common-id: org.onionshare.OnionShare
    command: bin/onionshare
    extensions: [gnome-3-38]
    plugs:
      - desktop
      - home
      - network
      - network-bind
      - removable-media
    environment:
      LANG: C.UTF-8

  cli:
    common-id: org.onionshare.OnionShareCli
    command: bin/onionshare-cli
    plugs:
      - home
      - network
      - network-bind
      - removable-media
    environment:
      LANG: C.UTF-8

parts:
  onionshare:
    source: ./desktop
    plugin: python
    python-packages:
      - qrcode
      - pyside2 == 5.15.2.1
    override-build: |
      python3 setup.py install --prefix $SNAPCRAFT_PART_INSTALL
    stage-packages:
      - libasound2
      - libatk1.0-0
      - libcairo2
      - libcairo-gobject2
      - libcups2
      - libdrm2
      - libegl1
      - libfreetype6
      - libgdk-pixbuf2.0-0
      - libgl1
      - libglvnd0
      - libglx0
      - libgtk-3-0
      - libharfbuzz0b
      - libicu66
      - libjpeg8
      - liblcms2-2
      - libnspr4
      - libnss3
      - libodbc1
      - libpango-1.0-0
      - libpangocairo-1.0-0
      - libpng16-16
      - libpq5
      - libpulse-mainloop-glib0
      - librsvg2-2
      - libspeechd2
      - libwayland-client0
      - libwayland-cursor0
      - libwayland-egl1
      - libwayland-server0
      - libx11-6
      - libx11-xcb1
      - libxau6
      - libxcb1
      - libxcb-glx0
      - libxcb-icccm4
      - libxcb-image0
      - libxcb-keysyms1
      - libxcb-render0
      - libxcb-render-util0
      - libxcb-shm0
      - libxcb-sync1
      - libxcb-xfixes0
      - libxcb-xinerama0
      - libxcb-xkb1
      - libxcomposite1
      - libxcursor1
      - libxdamage1
      - libxdmcp6
      - libxext6
      - libxfixes3
      - libxi6
      - libxkbcommon0
      - libxkbcommon-x11-0
      - libxml2
      - libxrandr2
      - libxrender1
      - libxslt1.1
      - libxtst6
      - qtwayland5
    after: [onionshare-cli]

  onionshare-cli:
    source: ./cli
    plugin: python
    python-packages:
      - poetry
    stage-packages:
      - build-essential
      - libssl-dev
      - libffi-dev
      - python3-dev
      - python3-pip
      - cargo
    override-build: |
      poetry install
      poetry build
      python3 -m pip install ./dist/onionshare_cli-*.whl --prefix $SNAPCRAFT_PART_INSTALL
    after: [tor, obfs4, snowflake-client, meek-client]

  tor:
    source: https://dist.torproject.org/tor-0.4.7.9.tar.gz
    source-checksum: sha256/d39d38598208f4d6201d7edc6ad573b3a898a932a5c68d3074016a9525519b22
    source-type: tar
    plugin: autotools
    autotools-configure-parameters:
      - "--with-libevent-dir=/root/parts/libevent/install/usr/local"
    build-packages:
      - libssl-dev
      - zlib1g-dev
    after: [libevent]

  libevent:
    source: https://github.com/libevent/libevent/releases/download/release-2.1.12-stable/libevent-2.1.12-stable.tar.gz
    source-checksum: sha256/92e6de1be9ec176428fd2367677e61ceffc2ee1cb119035037a27d346b0403bb
    source-type: tar
    plugin: autotools

  obfs4:
    plugin: go
    source: https://gitlab.com/yawning/obfs4.git
    source-type: git
    source-tag: obfs4proxy-0.0.13

  snowflake-client:
    plugin: go
    source: https://git.torproject.org/pluggable-transports/snowflake.git
    source-type: git
    source-tag: v2.2.0
    organize:
      bin/client: bin/snowflake-client

  meek-client:
    plugin: go
    source: https://git.torproject.org/pluggable-transports/meek.git
    source-type: git
    source-tag: v0.37.0
    override-build: |
      cd meek-client
      mkdir -p /root/parts/meek-client/install/bin
      go build -o /root/parts/meek-client/install/bin/meek-client ./...