mirror of
https://github.com/skoelle/icloud-contacts-sync.git
synced 2026-09-17 15:30:24 +00:00
LICENSE
This commit is contained in:
@@ -144,3 +144,9 @@ See `.env.example` for full list. Key variables:
|
|||||||
2. Edit `src/sync.py` for orchestration changes
|
2. Edit `src/sync.py` for orchestration changes
|
||||||
3. Update `SPEC.md` if sync behavior changes
|
3. Update `SPEC.md` if sync behavior changes
|
||||||
4. Test with a single account first: set `LOG_LEVEL=DEBUG`
|
4. Test with a single account first: set `LOG_LEVEL=DEBUG`
|
||||||
|
|
||||||
|
## License
|
||||||
|
|
||||||
|
MIT License - Copyright (c) 2026 Stefan Koelle (https://stefankoelle.de)
|
||||||
|
- Full text in `LICENSE`
|
||||||
|
- License headers in all source code files
|
||||||
|
|||||||
@@ -5,6 +5,7 @@ WORKDIR /app
|
|||||||
COPY requirements.txt /app/requirements.txt
|
COPY requirements.txt /app/requirements.txt
|
||||||
RUN pip install --no-cache-dir -r /app/requirements.txt
|
RUN pip install --no-cache-dir -r /app/requirements.txt
|
||||||
|
|
||||||
|
COPY LICENSE .
|
||||||
COPY src/ /app/
|
COPY src/ /app/
|
||||||
COPY sql/ /app/sql/
|
COPY sql/ /app/sql/
|
||||||
COPY docker/entrypoint.sh /usr/local/bin/entrypoint.sh
|
COPY docker/entrypoint.sh /usr/local/bin/entrypoint.sh
|
||||||
|
|||||||
@@ -0,0 +1,21 @@
|
|||||||
|
MIT License
|
||||||
|
|
||||||
|
Copyright (c) 2026 Stefan Koelle (https://stefankoelle.de)
|
||||||
|
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
of this software and associated documentation files (the "Software"), to deal
|
||||||
|
in the Software without restriction, including without limitation the rights
|
||||||
|
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
copies of the Software, and to permit persons to whom the Software is
|
||||||
|
furnished to do so, subject to the following conditions:
|
||||||
|
|
||||||
|
The above copyright notice and this permission notice shall be included in all
|
||||||
|
copies or substantial portions of the Software.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||||
|
SOFTWARE.
|
||||||
@@ -221,3 +221,7 @@ eigenen Accounts.
|
|||||||
```
|
```
|
||||||
curl -H "Remote-User: mmustermann" http://127.0.0.1:8000/api/contacts
|
curl -H "Remote-User: mmustermann" http://127.0.0.1:8000/api/contacts
|
||||||
```
|
```
|
||||||
|
|
||||||
|
## License
|
||||||
|
|
||||||
|
Licensed under the [MIT License](LICENSE) - Copyright (c) 2026 Stefan Koelle (https://stefankoelle.de)
|
||||||
|
|||||||
@@ -1,4 +1,6 @@
|
|||||||
#!/bin/sh
|
#!/bin/sh
|
||||||
|
# Copyright (c) 2026 Stefan Koelle (https://stefankoelle.de)
|
||||||
|
# Licensed under the MIT License. See LICENSE file in project root for details.
|
||||||
set -e
|
set -e
|
||||||
|
|
||||||
# Wurde ein alternativer Befehl uebergeben (z.B. uvicorn), fuehre diesen
|
# Wurde ein alternativer Befehl uebergeben (z.B. uvicorn), fuehre diesen
|
||||||
|
|||||||
@@ -0,0 +1,2 @@
|
|||||||
|
# Copyright (c) 2026 Stefan Koelle (https://stefankoelle.de)
|
||||||
|
# Licensed under the MIT License. See LICENSE file in project root for details.
|
||||||
|
|||||||
@@ -1,3 +1,5 @@
|
|||||||
|
# Copyright (c) 2026 Stefan Koelle (https://stefankoelle.de)
|
||||||
|
# Licensed under the MIT License. See LICENSE file in project root for details.
|
||||||
"""Authelia-Integration: liest den vom Reverse-Proxy weitergereichten
|
"""Authelia-Integration: liest den vom Reverse-Proxy weitergereichten
|
||||||
Remote-User-Header und mappt ihn per accounts.json auf einen internen
|
Remote-User-Header und mappt ihn per accounts.json auf einen internen
|
||||||
Account-Namen. Kein eigenes Login, Authelia übernimmt die eigentliche
|
Account-Namen. Kein eigenes Login, Authelia übernimmt die eigentliche
|
||||||
|
|||||||
@@ -1,3 +1,5 @@
|
|||||||
|
# Copyright (c) 2026 Stefan Koelle (https://stefankoelle.de)
|
||||||
|
# Licensed under the MIT License. See LICENSE file in project root for details.
|
||||||
"""FastAPI-App für die interne Web-Ansicht/API der iCloud-Kontakte.
|
"""FastAPI-App für die interne Web-Ansicht/API der iCloud-Kontakte.
|
||||||
|
|
||||||
Läuft im selben Image wie der Sync-Container, wird aber über einen
|
Läuft im selben Image wie der Sync-Container, wird aber über einen
|
||||||
|
|||||||
@@ -1,3 +1,5 @@
|
|||||||
|
# Copyright (c) 2026 Stefan Koelle (https://stefankoelle.de)
|
||||||
|
# Licensed under the MIT License. See LICENSE file in project root for details.
|
||||||
from datetime import date
|
from datetime import date
|
||||||
from pydantic import BaseModel
|
from pydantic import BaseModel
|
||||||
|
|
||||||
|
|||||||
@@ -1,3 +1,5 @@
|
|||||||
|
<!-- Copyright (c) 2026 Stefan Koelle (https://stefankoelle.de) -->
|
||||||
|
<!-- Licensed under the MIT License. See LICENSE file in project root for details. -->
|
||||||
<!DOCTYPE html>
|
<!DOCTYPE html>
|
||||||
<html lang="de">
|
<html lang="de">
|
||||||
<head>
|
<head>
|
||||||
|
|||||||
@@ -1,3 +1,5 @@
|
|||||||
|
<!-- Copyright (c) 2026 Stefan Koelle (https://stefankoelle.de) -->
|
||||||
|
<!-- Licensed under the MIT License. See LICENSE file in project root for details. -->
|
||||||
<!DOCTYPE html>
|
<!DOCTYPE html>
|
||||||
<html lang="de">
|
<html lang="de">
|
||||||
<head>
|
<head>
|
||||||
|
|||||||
@@ -1,3 +1,5 @@
|
|||||||
|
# Copyright (c) 2026 Stefan Koelle (https://stefankoelle.de)
|
||||||
|
# Licensed under the MIT License. See LICENSE file in project root for details.
|
||||||
"""
|
"""
|
||||||
CardDAV-Client für iCloud (RFC 6352) mit Delta-Sync über sync-collection (RFC 6578).
|
CardDAV-Client für iCloud (RFC 6352) mit Delta-Sync über sync-collection (RFC 6578).
|
||||||
|
|
||||||
|
|||||||
@@ -1,3 +1,5 @@
|
|||||||
|
# Copyright (c) 2026 Stefan Koelle (https://stefankoelle.de)
|
||||||
|
# Licensed under the MIT License. See LICENSE file in project root for details.
|
||||||
import os
|
import os
|
||||||
import json
|
import json
|
||||||
from dotenv import load_dotenv
|
from dotenv import load_dotenv
|
||||||
|
|||||||
@@ -1,3 +1,5 @@
|
|||||||
|
# Copyright (c) 2026 Stefan Koelle (https://stefankoelle.de)
|
||||||
|
# Licensed under the MIT License. See LICENSE file in project root for details.
|
||||||
"""MariaDB-Anbindung: Delta-Sync-Strategie (Upsert für Änderungen, gezieltes Löschen für Removals)."""
|
"""MariaDB-Anbindung: Delta-Sync-Strategie (Upsert für Änderungen, gezieltes Löschen für Removals)."""
|
||||||
import logging
|
import logging
|
||||||
import os
|
import os
|
||||||
|
|||||||
@@ -1,4 +1,6 @@
|
|||||||
#!/usr/bin/env python3
|
#!/usr/bin/env python3
|
||||||
|
# Copyright (c) 2026 Stefan Koelle (https://stefankoelle.de)
|
||||||
|
# Licensed under the MIT License. See LICENSE file in project root for details.
|
||||||
"""Sendet eine tägliche E-Mail mit allen heutigen Geburtstagskindern aus der
|
"""Sendet eine tägliche E-Mail mit allen heutigen Geburtstagskindern aus der
|
||||||
contacts-Tabelle (über alle Accounts hinweg). Wird per Cron einmal täglich
|
contacts-Tabelle (über alle Accounts hinweg). Wird per Cron einmal täglich
|
||||||
um MAIL_SEND_HOUR aufgerufen. Verhindert Doppelversand am selben Tag über
|
um MAIL_SEND_HOUR aufgerufen. Verhindert Doppelversand am selben Tag über
|
||||||
|
|||||||
@@ -1,4 +1,6 @@
|
|||||||
#!/usr/bin/env python3
|
#!/usr/bin/env python3
|
||||||
|
# Copyright (c) 2026 Stefan Koelle (https://stefankoelle.de)
|
||||||
|
# Licensed under the MIT License. See LICENSE file in project root for details.
|
||||||
"""Einfacher Cron-Scheduler fuer Sync und Mailer.
|
"""Einfacher Cron-Scheduler fuer Sync und Mailer.
|
||||||
Ersetzt supercronic komplett — keine externe Abhaengigkeit noetig.
|
Ersetzt supercronic komplett — keine externe Abhaengigkeit noetig.
|
||||||
|
|
||||||
|
|||||||
@@ -1,4 +1,6 @@
|
|||||||
#!/usr/bin/env python3
|
#!/usr/bin/env python3
|
||||||
|
# Copyright (c) 2026 Stefan Koelle (https://stefankoelle.de)
|
||||||
|
# Licensed under the MIT License. See LICENSE file in project root for details.
|
||||||
"""Einstiegspunkt für einen Sync-Lauf über alle konfigurierten Accounts.
|
"""Einstiegspunkt für einen Sync-Lauf über alle konfigurierten Accounts.
|
||||||
Für jeden Account wird ein Delta-Sync per CardDAV sync-collection (RFC 6578)
|
Für jeden Account wird ein Delta-Sync per CardDAV sync-collection (RFC 6578)
|
||||||
durchgeführt. Beim allerersten Lauf eines Accounts (kein gespeicherter
|
durchgeführt. Beim allerersten Lauf eines Accounts (kein gespeicherter
|
||||||
|
|||||||
@@ -1,3 +1,5 @@
|
|||||||
|
# Copyright (c) 2026 Stefan Koelle (https://stefankoelle.de)
|
||||||
|
# Licensed under the MIT License. See LICENSE file in project root for details.
|
||||||
"""Parst rohen vCard-Text in ein flaches dict, passend zum contacts-Schema."""
|
"""Parst rohen vCard-Text in ein flaches dict, passend zum contacts-Schema."""
|
||||||
import json
|
import json
|
||||||
import logging
|
import logging
|
||||||
|
|||||||
Reference in New Issue
Block a user