fix clean command and fix formatting for doc pages
Signed-off-by: ngn <ngn@ngn.tf>
This commit is contained in:
@@ -30,6 +30,7 @@ lint:
|
||||
clang-tidy --warnings-as-errors --config= $(CSRCS) $(HSRCS)
|
||||
|
||||
clean:
|
||||
rm -f *.elf
|
||||
rm -rf $(DISTDIR)
|
||||
|
||||
run:
|
||||
|
@@ -1,52 +1,64 @@
|
||||
My website's API, stores information about my self-hosted services, it also allows me
|
||||
to publish news and updates about these services using an Atom feed and it keeps track
|
||||
of visitor metrics.
|
||||
My website's API, stores information about my self-hosted services, it also
|
||||
allows me to publish news and updates about these services using an Atom feed
|
||||
and it keeps track of visitor metrics.
|
||||
|
||||
This documentation contains information about all the available API endpoints. All the
|
||||
endpoints can be accessed using the `/api` route.
|
||||
This documentation contains information about all the available API endpoints.
|
||||
All the endpoints can be accessed using the `/api` route.
|
||||
|
||||
## Version 1 Endpoints
|
||||
|
||||
Each version 1 endpoint, can be accessed using the `/v1` route.
|
||||
|
||||
All the endpoints return JSON formatted data.
|
||||
|
||||
### Errors
|
||||
If any error occurs, you will get a non-200 response. And the JSON data will have an
|
||||
`error` key, which will contain information about the error that occured, in the
|
||||
string format. This is the only JSON key that will be set in non-200 responses.
|
||||
|
||||
If any error occurs, you will get a non-200 response. And the JSON data will
|
||||
have an `error` key, which will contain information about the error that
|
||||
occured, in the string format. This is the only JSON key that will be set in
|
||||
non-200 responses.
|
||||
|
||||
### Results
|
||||
If no error occurs, `error` key will be set to an emtpy string (""). If the endpoint
|
||||
returns any data, this will be stored using the `result` key. The `result` have a
|
||||
different expected type and a format for each endpoint.
|
||||
|
||||
If no error occurs, `error` key will be set to an emtpy string (""). If the
|
||||
endpoint returns any data, this will be stored using the `result` key. The
|
||||
`result` have a different expected type and a format for each endpoint.
|
||||
|
||||
### Multilang
|
||||
Some `result` formats may use a structure called "Multilang". This is a simple JSON
|
||||
structure that includes one key for each supported language. The key is named after
|
||||
the language it represents. Currently only supported languages are:
|
||||
|
||||
Some `result` formats may use a structure called "Multilang". This is a simple
|
||||
JSON structure that includes one key for each supported language. The key is
|
||||
named after the language it represents. Currently only supported languages are:
|
||||
|
||||
- English (`en`)
|
||||
- Turkish (`tr`)
|
||||
|
||||
So each multilang structure, will have **at least** one of these keys.
|
||||
|
||||
Here is an example multilang structure:
|
||||
|
||||
```
|
||||
{
|
||||
"en": "Hello, world!",
|
||||
"tr": "Merhaba, dünya!"
|
||||
}
|
||||
```
|
||||
If a `result` field is using a multilang structure, it will be specified as "Multilang"
|
||||
in the rest of the documentation.
|
||||
|
||||
If a `result` field is using a multilang structure, it will be specified as
|
||||
"Multilang" in the rest of the documentation.
|
||||
|
||||
### Administrator routes
|
||||
The endpoints under the `/v1/admin` route, are administrator-only routes. To access
|
||||
these routes you'll need to specfiy a password using the `Authorization` header. If
|
||||
the password you specify, matches with the password specified using the `API_PASSWORD`
|
||||
environment variable, you will be able to access the route.
|
||||
|
||||
The endpoints under the `/v1/admin` route, are administrator-only routes. To
|
||||
access these routes you'll need to specfiy a password using the `Authorization`
|
||||
header. If the password you specify, matches with the password specified using
|
||||
the `API_PASSWORD` environment variable, you will be able to access the route.
|
||||
|
||||
### GET /v1/services
|
||||
Returns a list of available services. Each service has the following JSON format:
|
||||
|
||||
Returns a list of available services. Each service has the following JSON
|
||||
format:
|
||||
|
||||
```
|
||||
{
|
||||
"name": "Test Service",
|
||||
@@ -62,73 +74,91 @@ Returns a list of available services. Each service has the following JSON format
|
||||
"i2p": ""
|
||||
}
|
||||
```
|
||||
|
||||
Where:
|
||||
|
||||
- `name`: Service name (string)
|
||||
- `desc`: Service description (Multilang)
|
||||
- `check_time`: Last time status check time for the service, set 0 if status checking is
|
||||
not supported for this service/status checking is disabled (integer, UNIX timestamp)
|
||||
- `check_time`: Last time status check time for the service, set 0 if status
|
||||
checking is not supported for this service/status checking is disabled
|
||||
(integer, UNIX timestamp)
|
||||
- `check_res`: Last service status check result (integer)
|
||||
* 0 if the service is down
|
||||
* 1 if the service is up
|
||||
* 2 if the service is up, but slow
|
||||
* 3 if the service doesn't support status checking/status checking is disabled
|
||||
- 0 if the service is down
|
||||
- 1 if the service is up
|
||||
- 2 if the service is up, but slow
|
||||
- 3 if the service doesn't support status checking/status checking is disabled
|
||||
- `check_url`: URL used for service's status check (string, empty if none)
|
||||
- `clear`: Clearnet URL for the service (string, empty string if none)
|
||||
- `onion`: Onion (TOR) URL for the service (string, empty string if none)
|
||||
- `i2p`: I2P URL for the service (string, empty string if none)
|
||||
|
||||
You can also get information about a specific service by specifying it's name using
|
||||
a URL query named `name`.
|
||||
You can also get information about a specific service by specifying it's name
|
||||
using a URL query named `name`.
|
||||
|
||||
### GET /v1/news/:language
|
||||
Returns a Atom feed of news for the given language. Supports languages that are supported
|
||||
by Multilang.
|
||||
|
||||
Returns a Atom feed of news for the given language. Supports languages that are
|
||||
supported by Multilang.
|
||||
|
||||
### GET /v1/metrics
|
||||
|
||||
Returns metrics about the API usage. The metric data has the following format:
|
||||
|
||||
```
|
||||
{
|
||||
"since":1736294400,
|
||||
"total":8
|
||||
"since": 1736294400,
|
||||
"total": 8
|
||||
}
|
||||
```
|
||||
|
||||
Where:
|
||||
|
||||
- `since`: Metric collection start date (integer, UNIX timestamp)
|
||||
- `total`: Total number of visitors (integer)
|
||||
|
||||
### GET /v1/admin/logs
|
||||
|
||||
Returns a list of administrator logs. Each log has the following JSON format:
|
||||
|
||||
```
|
||||
{
|
||||
"action": "Added service \"Test Service\"",
|
||||
"time": 1735861794
|
||||
}
|
||||
```
|
||||
|
||||
Where:
|
||||
|
||||
- `action`: Action that the administrator performed (string)
|
||||
- `time`: Time when the administrator action was performed (integer, UNIX timestamp)
|
||||
- `time`: Time when the administrator action was performed (integer, UNIX
|
||||
timestamp)
|
||||
|
||||
### PUT /v1/admin/service/add
|
||||
Creates a new service. The request body needs to contain JSON data, and it needs to
|
||||
have the JSON format used to represent a service. See `/v1/services/all` route to
|
||||
see this format.
|
||||
|
||||
Creates a new service. The request body needs to contain JSON data, and it needs
|
||||
to have the JSON format used to represent a service. See `/v1/services/all`
|
||||
route to see this format.
|
||||
|
||||
Returns no data on success.
|
||||
|
||||
### DELETE /v1/admin/service/del
|
||||
Deletes a service. The client needs to specify the name of the service to delete, by
|
||||
setting the URL query `name`.
|
||||
|
||||
Deletes a service. The client needs to specify the name of the service to
|
||||
delete, by setting the URL query `name`.
|
||||
|
||||
Returns no data on success.
|
||||
|
||||
### GET /v1/admin/service/check
|
||||
|
||||
Forces a status check for all the services.
|
||||
|
||||
Returns no data on success.
|
||||
|
||||
### PUT /v1/admin/news/add
|
||||
|
||||
Creates a news post. The request body needs to contain JSON data, and it needs
|
||||
to use the following JSON format:
|
||||
|
||||
```
|
||||
{
|
||||
"id": "test_news",
|
||||
@@ -143,7 +173,9 @@ to use the following JSON format:
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
Where:
|
||||
|
||||
- `id`: Unique ID for the news post (string)
|
||||
- `title`: Title for the news post (Multilang)
|
||||
- `author`: Author of the news post (string)
|
||||
@@ -152,7 +184,8 @@ Where:
|
||||
Returns no data on success.
|
||||
|
||||
### DELETE /v1/admin/news/del
|
||||
Deletes a news post. The client needs to specify the ID of the news post to delete,
|
||||
by setting the URL query `id`.
|
||||
|
||||
Deletes a news post. The client needs to specify the ID of the news post to
|
||||
delete, by setting the URL query `id`.
|
||||
|
||||
Returns no data on success.
|
||||
|
@@ -1,53 +1,64 @@
|
||||
Websitemin API, self-host edilen servisler hakkında bilgileri tutuyor, bu servisler hakkında
|
||||
haberleri ve güncellemeleri bir Atom feed'i aracılığı ile paylaşmama izin veriyor ve ziyartçi
|
||||
metriklerini takip ediyor.
|
||||
Websitemin API, self-host edilen servisler hakkında bilgileri tutuyor, bu
|
||||
servisler hakkında haberleri ve güncellemeleri bir Atom feed'i aracılığı ile
|
||||
paylaşmama izin veriyor ve ziyartçi metriklerini takip ediyor.
|
||||
|
||||
Bu dökümentasyon tüm erişime açık API endpoint'leri hakkında bilgiler içeriyor. Tüm endpoint'lere
|
||||
`/api` yolu ile erişilebilir.
|
||||
Bu dökümentasyon tüm erişime açık API endpoint'leri hakkında bilgiler içeriyor.
|
||||
Tüm endpoint'lere `/api` yolu ile erişilebilir.
|
||||
|
||||
## Versyion 1 Endpoint'leri
|
||||
|
||||
Tüm versiyon 1 endpoint'leri `/v1` yolu ile erişilebilir.
|
||||
|
||||
Tüm endpoint'ler JSON ile formatlanmış veri döndürür.
|
||||
|
||||
### Hatalar
|
||||
|
||||
Herhangi bir hata ortaya çıkarsa 200 dışı bir cevap alırsınız. Ve JSON verisinde
|
||||
bir `error` girdisi bulunur, bu ortaya çıkan hata hakkında gerekli bilgileri, metin formunda
|
||||
içerir. 200 dışı bir cevap aldığınızda tek JSON girdisi bu olacaktır.
|
||||
bir `error` girdisi bulunur, bu ortaya çıkan hata hakkında gerekli bilgileri,
|
||||
metin formunda içerir. 200 dışı bir cevap aldığınızda tek JSON girdisi bu
|
||||
olacaktır.
|
||||
|
||||
### Sonuçlar
|
||||
Eğer bir hata ortaya çıkmaz ise, `error` girdisi boş bir metin olarak ayarlanır ("").
|
||||
Eğer endpoint herhangi bir veri döndürüyorsa, bu veri `result` giridisi ile sağlanır.
|
||||
Her endpoint için `result` girdisinin tipi farklı olabilir.
|
||||
|
||||
Eğer bir hata ortaya çıkmaz ise, `error` girdisi boş bir metin olarak ayarlanır
|
||||
(""). Eğer endpoint herhangi bir veri döndürüyorsa, bu veri `result` giridisi
|
||||
ile sağlanır. Her endpoint için `result` girdisinin tipi farklı olabilir.
|
||||
|
||||
### Multilang
|
||||
Bazı `result` formatları "Multilang" isimli bir yapıyı kullanabilir. Bu her desteklenen
|
||||
dil için bir girdi bulunduran basit bir JSON yapısıdır. Her girdi ifade ettiği dil
|
||||
ile isimlendirilir. Şuan tek desteklenen diller:
|
||||
|
||||
Bazı `result` formatları "Multilang" isimli bir yapıyı kullanabilir. Bu her
|
||||
desteklenen dil için bir girdi bulunduran basit bir JSON yapısıdır. Her girdi
|
||||
ifade ettiği dil ile isimlendirilir. Şuan tek desteklenen diller:
|
||||
|
||||
- English (`en`)
|
||||
- Turkish (`tr`)
|
||||
|
||||
Yani her multilang yapısında, bu girdilerden **en az** bir tanesi bulunur.
|
||||
|
||||
İşte örnek bir multilang yapısı:
|
||||
|
||||
```
|
||||
{
|
||||
"en": "Hello, world!",
|
||||
"tr": "Merhaba, dünya!"
|
||||
}
|
||||
```
|
||||
Bu dökümantasyonun geri kalanında, eğer bir `result` girdisi bir multilang yapısı kullanıyorsa,
|
||||
"Multilang" olarak isimlendirilecek.
|
||||
|
||||
Bu dökümantasyonun geri kalanında, eğer bir `result` girdisi bir multilang
|
||||
yapısı kullanıyorsa, "Multilang" olarak isimlendirilecek.
|
||||
|
||||
### Yönetici yolları
|
||||
`/v1/admin` yolu altındaki endpoint'ler yöneticiye-özeldir. Bu yollara erişmek için,
|
||||
`Authorization` header'ı aracılığı ile bir parola belirtmeniz gerekecektir. Eğer
|
||||
belritiğiniz parola `API_PASSWORD` ortam değişkeni ile belirtilen parola ile
|
||||
uyuşuyorsa, yola erişebilirsiniz.
|
||||
|
||||
`/v1/admin` yolu altındaki endpoint'ler yöneticiye-özeldir. Bu yollara erişmek
|
||||
için, `Authorization` header'ı aracılığı ile bir parola belirtmeniz
|
||||
gerekecektir. Eğer belritiğiniz parola `API_PASSWORD` ortam değişkeni ile
|
||||
belirtilen parola ile uyuşuyorsa, yola erişebilirsiniz.
|
||||
|
||||
### GET /v1/services
|
||||
|
||||
Erişilebilir servislerin bir listesini döndürür. Her servis şu JSON formatını
|
||||
takip eder:
|
||||
|
||||
```
|
||||
{
|
||||
"name": "Test Service",
|
||||
@@ -63,74 +74,93 @@ takip eder:
|
||||
"i2p": ""
|
||||
}
|
||||
```
|
||||
|
||||
Burada:
|
||||
|
||||
- `name`: Servis ismi (metin)
|
||||
- `desc`: Servis açıklaması (Multilang)
|
||||
- `check_time`: Servisin en son durumunun kontrol edildiği zaman, eğer bu servis için
|
||||
durum kontrolü desteklenmiyorsa/durum kontrolü devra dışı bırakılmış ise 0 olarak
|
||||
ayarlanır (sayı, UNIX zaman damgası)
|
||||
- `check_time`: Servisin en son durumunun kontrol edildiği zaman, eğer bu servis
|
||||
için durum kontrolü desteklenmiyorsa/durum kontrolü devra dışı bırakılmış ise
|
||||
0 olarak ayarlanır (sayı, UNIX zaman damgası)
|
||||
- `check_res`: En son servis durum kontrolünün sonucu (sayı)
|
||||
* servis kapalı ise 0
|
||||
* servis çalışıyor ise 1
|
||||
* serivs çalışıyor, ama yavaş ise 2
|
||||
* bu servis için durum kontrolü desteklenmiyorsa/durum kontrolü devre dışı ise 3
|
||||
- `check_url`: Servis durum kontrolü için kullanılan URL (metin, yoksa boş metin)
|
||||
- servis kapalı ise 0
|
||||
- servis çalışıyor ise 1
|
||||
- serivs çalışıyor, ama yavaş ise 2
|
||||
- bu servis için durum kontrolü desteklenmiyorsa/durum kontrolü devre dışı ise
|
||||
3
|
||||
- `check_url`: Servis durum kontrolü için kullanılan URL (metin, yoksa boş
|
||||
metin)
|
||||
- `clear`: Servisin açık ağ URL'si (metin, yoksa boş metin)
|
||||
- `onion`: Servisin Onion (TOR) URL'si (metin, yoksa boş metin)
|
||||
- `i2p`: Servisin I2P URL'si (metin, yoksa boş metin)
|
||||
|
||||
`name` isimli bir URL sorgusu ile servisin ismini belirterek, spesifik bir servis hakkında
|
||||
bilgi de alabilirsiniz.
|
||||
`name` isimli bir URL sorgusu ile servisin ismini belirterek, spesifik bir
|
||||
servis hakkında bilgi de alabilirsiniz.
|
||||
|
||||
### GET /v1/news/:language
|
||||
Verilen dil için haberlerin bir Atom feed'i döndürür. Multilang tarafından desteklenen
|
||||
dilleri destekler.
|
||||
|
||||
Verilen dil için haberlerin bir Atom feed'i döndürür. Multilang tarafından
|
||||
desteklenen dilleri destekler.
|
||||
|
||||
### GET /v1/metrics
|
||||
|
||||
API kullanımı hakkınadaki metrikleri döndürür. Metrik şu formatı kullanır:
|
||||
|
||||
```
|
||||
{
|
||||
"since":1736294400,
|
||||
"total":8
|
||||
"since": 1736294400,
|
||||
"total": 8
|
||||
}
|
||||
```
|
||||
|
||||
Burada:
|
||||
|
||||
- `since`: Metrik toplama başlangıç tarihi (sayı, UNIX zaman damgası)
|
||||
- `total`: Toplam ziyaretçi sayısı (sayı)
|
||||
|
||||
### GET /v1/admin/logs
|
||||
Yönetici kayıtlarının bir listesini döndürür. Her kayıt şu JSON formatını takip eder:
|
||||
|
||||
Yönetici kayıtlarının bir listesini döndürür. Her kayıt şu JSON formatını takip
|
||||
eder:
|
||||
|
||||
```
|
||||
{
|
||||
"action": "Added service \"Test Service\"",
|
||||
"time": 1735861794
|
||||
}
|
||||
```
|
||||
|
||||
Burada:
|
||||
|
||||
- `action`: Yöneticinin yaptığı eylem (metin)
|
||||
- `time`: Yönetici eylemin yapıldığı zaman (sayı, UNIX zaman damgası)
|
||||
|
||||
### PUT /v1/admin/service/add
|
||||
Yeni bir servis oluşturur. İstek gövdesinin servis için kullanılan JSON formatını
|
||||
takip eden JSON verisini içermesi gerekir. Bu formatı görmek için `/v1/services/all`
|
||||
yoluna bakınız.
|
||||
|
||||
Yeni bir servis oluşturur. İstek gövdesinin servis için kullanılan JSON
|
||||
formatını takip eden JSON verisini içermesi gerekir. Bu formatı görmek için
|
||||
`/v1/services/all` yoluna bakınız.
|
||||
|
||||
Başarılı ise herhangi bir veri döndürmez.
|
||||
|
||||
### DELETE /v1/admin/service/del
|
||||
Bir servisi siler. İstemcinin `name` URL sorgusu ile silinecek servisin ismini belirtmesi
|
||||
gerekir.
|
||||
|
||||
Bir servisi siler. İstemcinin `name` URL sorgusu ile silinecek servisin ismini
|
||||
belirtmesi gerekir.
|
||||
|
||||
Başarılı ise herhangi bir veri döndürmez.
|
||||
|
||||
### GET /v1/admin/service/check
|
||||
|
||||
Tüm servisler için bir durum kontrolünü zorlar.
|
||||
|
||||
Başarılı ise herhangi bir veri döndürmez.
|
||||
|
||||
### PUT /v1/admin/news/add
|
||||
Yeni bir haber paylaşımı oluşturur. İstek gövedisinin JSOn verisi içermesi ve verilen formatı
|
||||
takip etmesi gerekir:
|
||||
|
||||
Yeni bir haber paylaşımı oluşturur. İstek gövedisinin JSOn verisi içermesi ve
|
||||
verilen formatı takip etmesi gerekir:
|
||||
|
||||
```
|
||||
{
|
||||
"id": "test_news",
|
||||
@@ -145,7 +175,9 @@ takip etmesi gerekir:
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
Burada:
|
||||
|
||||
- `id`: Haber paylaşımının benzersiz ID'si (metin)
|
||||
- `title`: Haber paylaşımının başlığı (Multilang)
|
||||
- `author`: Haber paylaşımının yazarı (metin)
|
||||
@@ -154,7 +186,8 @@ Burada:
|
||||
Başarılı ise herhangi bir veri döndürmez.
|
||||
|
||||
### DELETE /v1/admin/news/del
|
||||
Bir haber paylaşımı siler. İstemcinin `id` URL sorgusu ile silinecek paylaşımın ID'sini
|
||||
belirtmesi gerekir.
|
||||
|
||||
Bir haber paylaşımı siler. İstemcinin `id` URL sorgusu ile silinecek paylaşımın
|
||||
ID'sini belirtmesi gerekir.
|
||||
|
||||
Başarılı ise herhangi bir veri döndürmez.
|
||||
|
@@ -1,31 +1,44 @@
|
||||
As a privacy advocate myself I do my best to respect your privacy while simultaneously keeping my server safe. I also think it's
|
||||
important to be transparent about this kind of stuff so I wrote this document to tell you how exactly I process or store your
|
||||
information.
|
||||
As a privacy advocate myself I do my best to respect your privacy while
|
||||
simultaneously keeping my server safe. I also think it's important to be
|
||||
transparent about this kind of stuff so I wrote this document to tell you how
|
||||
exactly I process or store your information.
|
||||
|
||||
## DNS & SSL
|
||||
Currently I use cloudflare's name servers, however cloudflare doesn't own my domain (I didn't purchase the domain from cloudflare)
|
||||
nor it proxies any of the traffic. All of my records use the *DNS only*" mode, meaning they are just DNS records and they point
|
||||
to my server, not cloudflare. This also means cloudflare doesn't control any of the SSL certificates. All the certificates are
|
||||
stored on my server and they are created with Let's Encrypt. So I own the certificates and it's not possible for cloudlfare to
|
||||
suddenly switch DNS records (it would break SSL).
|
||||
|
||||
Currently I use cloudflare's name servers, however cloudflare doesn't own my
|
||||
domain (I didn't purchase the domain from cloudflare) nor it proxies any of the
|
||||
traffic. All of my records use the _DNS only_" mode, meaning they are just DNS
|
||||
records and they point to my server, not cloudflare. This also means cloudflare
|
||||
doesn't control any of the SSL certificates. All the certificates are stored on
|
||||
my server and they are created with Let's Encrypt. So I own the certificates and
|
||||
it's not possible for cloudlfare to suddenly switch DNS records (it would break
|
||||
SSL).
|
||||
|
||||
## Usage metrics
|
||||
I don't have any kind of request or traffic monitoring on my server. So no, your HTTP(S) requests or other network
|
||||
connections are not processed to generate colorful graphs, pie charts and stuff.
|
||||
|
||||
You may have realized that in the bottom of this page there is total visitor number tracker. It is the only
|
||||
usage/visitor metric tracking I have, which is implemented by website's API, which is free (as in freedom) so you can
|
||||
go audit it's code yourself.
|
||||
I don't have any kind of request or traffic monitoring on my server. So no, your
|
||||
HTTP(S) requests or other network connections are not processed to generate
|
||||
colorful graphs, pie charts and stuff.
|
||||
|
||||
I want to make it clear that this metric tracker does not store any information about you or your HTTP(S) requests to
|
||||
a database. It temporarily stores your IP address' SHA1 hash, in memory, so it doesn't recount the same visitor again
|
||||
when they refresh the website or visit it multiple times in a short period of time. After a certain amount of requests,
|
||||
your IP address' SHA1 hash will be removed from the memory and it will be replaced with a new visitor's SHA1 hash instead.
|
||||
You may have realized that in the bottom of this page there is total visitor
|
||||
number tracker. It is the only usage/visitor metric tracking I have, which is
|
||||
implemented by website's API, which is free (as in freedom) so you can go audit
|
||||
it's code yourself.
|
||||
|
||||
I want to make it clear that this metric tracker does not store any information
|
||||
about you or your HTTP(S) requests to a database. It temporarily stores your IP
|
||||
address' SHA1 hash, in memory, so it doesn't recount the same visitor again when
|
||||
they refresh the website or visit it multiple times in a short period of time.
|
||||
After a certain amount of requests, your IP address' SHA1 hash will be removed
|
||||
from the memory and it will be replaced with a new visitor's SHA1 hash instead.
|
||||
|
||||
## Logs
|
||||
All the HTTP(S) services are proxied with nginx, and nginx logs all of them to a file on the disk. This file (`access.log`)
|
||||
is only readable by the root user, and it is contents are deleted every 4 hours (with `shred` to make sure it doesn't leave
|
||||
anything on the disk). The logs include *only* the following information:
|
||||
|
||||
All the HTTP(S) services are proxied with nginx, and nginx logs all of them to a
|
||||
file on the disk. This file (`access.log`) is only readable by the root user,
|
||||
and it is contents are deleted every 4 hours (with `shred` to make sure it
|
||||
doesn't leave anything on the disk). The logs include _only_ the following
|
||||
information:
|
||||
|
||||
- Request time
|
||||
- Requested host
|
||||
@@ -33,9 +46,12 @@ anything on the disk). The logs include *only* the following information:
|
||||
- HTTP request method
|
||||
- HTTP response code
|
||||
|
||||
This is the minimal information I need to trace any issues if something goes wrong, which is the main reason why I use
|
||||
logging at all, to make it easier to find any issues.
|
||||
This is the minimal information I need to trace any issues if something goes
|
||||
wrong, which is the main reason why I use logging at all, to make it easier to
|
||||
find any issues.
|
||||
|
||||
## Data removal
|
||||
If you want to remove any of your data from my server, [you can send me an email](mailto:ngn@ngn.tf). And yes this includes
|
||||
removing usage metrics and logs.
|
||||
|
||||
If you want to remove any of your data from my server,
|
||||
[you can contact me](/#contact). And yes this includes removing usage metrics
|
||||
and logs.
|
||||
|
@@ -1,30 +1,46 @@
|
||||
Kişisel olarak ben de bir gizlik savunucusu olduğumdan, bir yandan sunucumu güvende tutarken bir yandan da gizliliğinize önem
|
||||
göstermek için elimden geleni yapıyorum. Aynı zamanda bu tarz şeyler hakkında şeffaf ve açık olmanın önemli olduğunu düşünüyorum,
|
||||
o yüzden verilerinizi nasıl işlediğimi ya da depoladığımı anlamanız için bu dökümanı yazmaya karar verdim.
|
||||
Kişisel olarak ben de bir gizlik savunucusu olduğumdan, bir yandan sunucumu
|
||||
güvende tutarken bir yandan da gizliliğinize önem göstermek için elimden geleni
|
||||
yapıyorum. Aynı zamanda bu tarz şeyler hakkında şeffaf ve açık olmanın önemli
|
||||
olduğunu düşünüyorum, o yüzden verilerinizi nasıl işlediğimi ya da depoladığımı
|
||||
anlamanız için bu dökümanı yazmaya karar verdim.
|
||||
|
||||
## DNS & SSL
|
||||
Şuan cloudflare'in isim sunucularını kullanıyorum, ancak cloudflare alan adıma sahip değil (alan adımı cloudflare'den almadım)
|
||||
ve aynı şekilde herhangi bir trafiğe vekillik etmiyor. Tüm DNS kayıtlarım *Sadece DNS* modunu kullanıyor, yani sadece
|
||||
DNS kayıtlarından ibaretler ve benim sunucuma işaret ediyorlar, cloudflare'e değil. Bu aynı zamanda cloudflare SSL sertifikalarımı
|
||||
kontrol etmiyor demek. Tüm sertifikalar benim sunucumda tutuluyor ve Let's Encrypt ile oluşturuldular. Yani sertifikalar bana ait
|
||||
ve cloudflare'in aniden DNS kayıtlarını değiştirmesi mümkün değil (bu SSL'in bozulmasına sebep olur).
|
||||
|
||||
Şuan cloudflare'in isim sunucularını kullanıyorum, ancak cloudflare alan adıma
|
||||
sahip değil (alan adımı cloudflare'den almadım) ve aynı şekilde herhangi bir
|
||||
trafiğe vekillik etmiyor. Tüm DNS kayıtlarım _Sadece DNS_ modunu kullanıyor,
|
||||
yani sadece DNS kayıtlarından ibaretler ve benim sunucuma işaret ediyorlar,
|
||||
cloudflare'e değil. Bu aynı zamanda cloudflare SSL sertifikalarımı kontrol
|
||||
etmiyor demek. Tüm sertifikalar benim sunucumda tutuluyor ve Let's Encrypt ile
|
||||
oluşturuldular. Yani sertifikalar bana ait ve cloudflare'in aniden DNS
|
||||
kayıtlarını değiştirmesi mümkün değil (bu SSL'in bozulmasına sebep olur).
|
||||
|
||||
## Kullanım metrikleri
|
||||
Sunucumda herhangi bir istek ya da trafik monitörlermesi yok. Yani hayır, HTTP(S) istekleriniz ya da diğer ağ
|
||||
bağlantılarınız renki grafikler, pasta grafikleri gibi şeyler üretmek için işlenmiyor.
|
||||
|
||||
Bu sayfanın altında bir ziyaretçi sayısı takipçisi olduğunu farketmiş olabilirsiniz. Bu kullandığım tek kullanım/ziyaretçi
|
||||
metrik takibi ve websitemin, özgür olan, bu yüzden kodunu kendiniz denetleyebileceğiniz API'ı ile implemente edildi.
|
||||
Sunucumda herhangi bir istek ya da trafik monitörlermesi yok. Yani hayır,
|
||||
HTTP(S) istekleriniz ya da diğer ağ bağlantılarınız renki grafikler, pasta
|
||||
grafikleri gibi şeyler üretmek için işlenmiyor.
|
||||
|
||||
Bu metrik takipçisinin, HTTP(S) istekleriniz hakkında herhangi bir veriyi bir veri tabanına kaydetmediğini belirtmek isterim.
|
||||
Bu takipçi geçici olarak IP adresinizin SHA1 hash'ini bellekte tutuyor, bunun amacı aynı ziyaretçiyi sayfayı yenilediği zaman
|
||||
ya da kısa bir süre için websitesini birden fazla kez ziyaret ettiği zaman tekrar saymayı önlemek. Belirli bir miktar istekten
|
||||
sonra, IP adresinizin SHA1 hash'i bellekten kaldırılacaktır ve yeni bir ziyaretçinin SHA1'i onun yerine geçicektir.
|
||||
Bu sayfanın altında bir ziyaretçi sayısı takipçisi olduğunu farketmiş
|
||||
olabilirsiniz. Bu kullandığım tek kullanım/ziyaretçi metrik takibi ve
|
||||
websitemin, özgür olan, bu yüzden kodunu kendiniz denetleyebileceğiniz API'ı ile
|
||||
implemente edildi.
|
||||
|
||||
Bu metrik takipçisinin, HTTP(S) istekleriniz hakkında herhangi bir veriyi bir
|
||||
veri tabanına kaydetmediğini belirtmek isterim. Bu takipçi geçici olarak IP
|
||||
adresinizin SHA1 hash'ini bellekte tutuyor, bunun amacı aynı ziyaretçiyi sayfayı
|
||||
yenilediği zaman ya da kısa bir süre için websitesini birden fazla kez ziyaret
|
||||
ettiği zaman tekrar saymayı önlemek. Belirli bir miktar istekten sonra, IP
|
||||
adresinizin SHA1 hash'i bellekten kaldırılacaktır ve yeni bir ziyaretçinin
|
||||
SHA1'i onun yerine geçicektir.
|
||||
|
||||
## Kayıtlar
|
||||
Tüm HTTP(S) servisleri nginx ile vekilleniyor, ve nginx hepsini disk üzerindeki bir dosyaya kaydediyor. Bu dosya (`access.log`)
|
||||
sadece root kullanıcısı tarafından okunabilir, ve içerği her 4 saatde bir siliniyor (diskde veri kalmadığından emin olmak için
|
||||
shred komutu ile). Kayıtlar *sadece* aşağıdaki bilgileri içeriyor:
|
||||
|
||||
Tüm HTTP(S) servisleri nginx ile vekilleniyor, ve nginx hepsini disk üzerindeki
|
||||
bir dosyaya kaydediyor. Bu dosya (`access.log`) sadece root kullanıcısı
|
||||
tarafından okunabilir, ve içerği her 4 saatde bir siliniyor (diskde veri
|
||||
kalmadığından emin olmak için shred komutu ile). Kayıtlar _sadece_ aşağıdaki
|
||||
bilgileri içeriyor:
|
||||
|
||||
- İstek zamanı
|
||||
- İstenilen host
|
||||
@@ -32,9 +48,12 @@ shred komutu ile). Kayıtlar *sadece* aşağıdaki bilgileri içeriyor:
|
||||
- HTTP istek yöntemi
|
||||
- HTTP cevap kodu
|
||||
|
||||
Bu birşeyler yanlış giderse sorunları bulmak için ihtiyacım olan en az bilgi, kayıt tutmamın ana sebeplerinden bir tanesi
|
||||
zaten bu, sorunları bulmayı kolaylaştırmak.
|
||||
Bu birşeyler yanlış giderse sorunları bulmak için ihtiyacım olan en az bilgi,
|
||||
kayıt tutmamın ana sebeplerinden bir tanesi zaten bu, sorunları bulmayı
|
||||
kolaylaştırmak.
|
||||
|
||||
## Veri silimi
|
||||
Sunucumdan herhangi bir verinizi kaldırmak isterseniz, [bana bir email gönderebilirsiniz](mailto:ngn@ngn.tf). Ve evet buna
|
||||
kullanım metrikleri ve kayıtlar dahil.
|
||||
|
||||
Sunucumdan herhangi bir verinizi kaldırmak isterseniz,
|
||||
[bana bir ulaşabilirsiniz](/#contact). Ve evet buna kullanım metrikleri ve
|
||||
kayıtlar dahil.
|
||||
|
Reference in New Issue
Block a user