Compare commits
1836 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
dd4a66353a | ||
|
|
2cf54c465d | ||
|
|
d3491c9165 | ||
|
|
8ca877bdd3 | ||
|
|
b704f977da | ||
|
|
59e04aed1b | ||
|
|
436e91a1e1 | ||
|
|
6f4c45a489 | ||
|
|
157bbb14b5 | ||
|
|
5c22f59c4f | ||
|
|
aa62bad07b | ||
|
|
d3f2d2a2db | ||
|
|
c5d08fd5fd | ||
|
|
22729da2a2 | ||
|
|
c97cc1487c | ||
|
|
428b4dbad6 | ||
|
|
548bf884a4 | ||
|
|
a0baa480e3 | ||
|
|
765dd5569b | ||
|
|
c19a1a6b82 | ||
|
|
8b61e546fe | ||
|
|
7206e8af3a | ||
|
|
7808689198 | ||
|
|
966d1586c0 | ||
|
|
edffd9f183 | ||
|
|
7edc505c2f | ||
|
|
4df78b06cf | ||
|
|
492609d20b | ||
|
|
0f76af261c | ||
|
|
9d00db06b2 | ||
|
|
141f3e21b2 | ||
|
|
fe6cbb414c | ||
|
|
e13d65eea3 | ||
|
|
4d6050f8e5 | ||
|
|
0ebce75c7d | ||
|
|
91bb4bdf50 | ||
|
|
be2b7c0b5f | ||
|
|
2d45f9f385 | ||
|
|
44b2503572 | ||
|
|
3f90da5643 | ||
|
|
d27a627c4f | ||
|
|
55ab5360d9 | ||
|
|
bfeeb76143 | ||
|
|
f2d3be2e67 | ||
|
|
60b818eb24 | ||
|
|
ebe70a41b9 | ||
|
|
da79662081 | ||
|
|
72f3f7c172 | ||
|
|
713a796d9f | ||
|
|
69c6d8b617 | ||
|
|
a1f046992d | ||
|
|
cd5630476f | ||
|
|
f7f20c5917 | ||
|
|
44797fe988 | ||
|
|
2d045a12bf | ||
|
|
a2fe22412f | ||
|
|
df69465357 | ||
|
|
e4361cb202 | ||
|
|
58cf9d832c | ||
|
|
6126070a1d | ||
|
|
459166116d | ||
|
|
776bc51172 | ||
|
|
df57c90d2d | ||
|
|
5a563b8e76 | ||
|
|
0653a2e0a9 | ||
|
|
d19dfc87a6 | ||
|
|
dc8c7a2d2e | ||
|
|
ba2ede0a8f | ||
|
|
6892ba4cd8 | ||
|
|
5ad9b48f1d | ||
|
|
7972de13ca | ||
|
|
ea54987ca4 | ||
|
|
b2474334a7 | ||
|
|
2a0d4a2011 | ||
|
|
be27fb5644 | ||
|
|
ebfa1a12b9 | ||
|
|
43521bb10b | ||
|
|
c95d7c69eb | ||
|
|
f12b0fe316 | ||
|
|
8944d7a7a2 | ||
|
|
6300f47cdc | ||
|
|
2b95580cc0 | ||
|
|
93b84f1262 | ||
|
|
1ffae1327f | ||
|
|
01a8292d65 | ||
|
|
9d3ce55978 | ||
|
|
7e6febe2a6 | ||
|
|
e73df9ed1d | ||
|
|
b101a8f6fb | ||
|
|
d074c53889 | ||
|
|
039eb58524 | ||
|
|
29c9e7c0a2 | ||
|
|
f15a06c0c2 | ||
|
|
ab89eb050a | ||
|
|
eca1f84328 | ||
|
|
3bde7b8f18 | ||
|
|
9db1148650 | ||
|
|
502fed198d | ||
|
|
411c510778 | ||
|
|
dd6e3d873d | ||
|
|
f9b092c619 | ||
|
|
edc7c0837b | ||
|
|
f535d438b2 | ||
|
|
119ffd2d2d | ||
|
|
2c3bec3d7c | ||
|
|
f1564b4cff | ||
|
|
c9252d49f7 | ||
|
|
411abdf8a7 | ||
|
|
1fcc863298 | ||
|
|
e37c1ed981 | ||
|
|
0c5a2925ad | ||
|
|
272ffe6983 | ||
|
|
368bb18935 | ||
|
|
22f172d697 | ||
|
|
fe9abcfaae | ||
|
|
dfbe2eaf98 | ||
|
|
a9711895cf | ||
|
|
8882ffc0de | ||
|
|
fdd7faab51 | ||
|
|
d004017b01 | ||
|
|
f2d27d543d | ||
|
|
1db3409f36 | ||
|
|
cfa2ac2d0a | ||
|
|
ebc66d7008 | ||
|
|
3f0eb84ecf | ||
|
|
fbc6c60805 | ||
|
|
02e82e496e | ||
|
|
8e586008dd | ||
|
|
50c7c33ed1 | ||
|
|
ca52d39abe | ||
|
|
28d07fd6b2 | ||
|
|
5a7b994e59 | ||
|
|
4512a4cdd4 | ||
|
|
342fda94e4 | ||
|
|
33c34984e6 | ||
|
|
fe392a3144 | ||
|
|
eeed7077ca | ||
|
|
dba1854837 | ||
|
|
c107bcfbd9 | ||
|
|
912ebfebff | ||
|
|
76bf892f9f | ||
|
|
12a9b49c6d | ||
|
|
aecf9e32ef | ||
|
|
879bc71927 | ||
|
|
4da7fcb41d | ||
|
|
3a84e7051e | ||
|
|
161050df07 | ||
|
|
29284319a5 | ||
|
|
86e73fd313 | ||
|
|
62e141a89c | ||
|
|
cd8b7687c1 | ||
|
|
4436cd9ade | ||
|
|
ddbe3c7426 | ||
|
|
b8c7b2f81d | ||
|
|
696c6e88ea | ||
|
|
a83eb14ff6 | ||
|
|
8e6dc0b66b | ||
|
|
41ec5403e1 | ||
|
|
77eb6c5761 | ||
|
|
89c6cda303 | ||
|
|
d49afead67 | ||
|
|
0a10215371 | ||
|
|
64f5d80ff2 | ||
|
|
28a593e1ce | ||
|
|
f738902107 | ||
|
|
364972a292 | ||
|
|
0eb0256502 | ||
|
|
679fb7d0d2 | ||
|
|
45247d1595 | ||
|
|
3be6ef6bfc | ||
|
|
c5827c8b4f | ||
|
|
bb381daae3 | ||
|
|
d0090f09fb | ||
|
|
afb86aa908 | ||
|
|
3b97a9f766 | ||
|
|
d3c779f635 | ||
|
|
4f285911f0 | ||
|
|
8ccddfefd9 | ||
|
|
4351a83d16 | ||
|
|
ddefe3b3ac | ||
|
|
dd2d12350c | ||
|
|
ade91f8190 | ||
|
|
d04aef4c44 | ||
|
|
689a6dc085 | ||
|
|
0b487122f6 | ||
|
|
31aaf40ade | ||
|
|
af7c7642bb | ||
|
|
d939173c0e | ||
|
|
a87efe45e0 | ||
|
|
55515a25d1 | ||
|
|
7d7a254238 | ||
|
|
564a5ea4d5 | ||
|
|
d9c59a19fb | ||
|
|
83b5adf194 | ||
|
|
a26d1794fe | ||
|
|
06a1258a9a | ||
|
|
d31d3df4ea | ||
|
|
91801d2e2c | ||
|
|
bcb94f8238 | ||
|
|
1d2260b44e | ||
|
|
81c10fc739 | ||
|
|
191a2fd5be | ||
|
|
97be144913 | ||
|
|
f984502499 | ||
|
|
315ce6d880 | ||
|
|
3da8f9b13c | ||
|
|
a14b87baf2 | ||
|
|
90fd23e0cd | ||
|
|
d96e985be0 | ||
|
|
c8788204a9 | ||
|
|
be99c7fe12 | ||
|
|
48963f62f9 | ||
|
|
00ae6bdac6 | ||
|
|
a606173e07 | ||
|
|
d8e6fd5df0 | ||
|
|
ec950de205 | ||
|
|
62e7fa6a23 | ||
|
|
021584d782 | ||
|
|
a5c111ef4f | ||
|
|
7868e47643 | ||
|
|
b4e3cd000f | ||
|
|
9c3568800c | ||
|
|
9cf105f8ea | ||
|
|
a8456782b5 | ||
|
|
4250895243 | ||
|
|
bfeb89075f | ||
|
|
721f61a71d | ||
|
|
a6e5d26aea | ||
|
|
d586f64e40 | ||
|
|
a0900ba052 | ||
|
|
40b00ab362 | ||
|
|
18208fab84 | ||
|
|
c598bbb8a9 | ||
|
|
e6f388d869 | ||
|
|
24e2eedd0f | ||
|
|
c75f76f740 | ||
|
|
006efbd906 | ||
|
|
28386d7471 | ||
|
|
f9545dc359 | ||
|
|
e527a52f6a | ||
|
|
a7ed50ecd4 | ||
|
|
06dcaaa821 | ||
|
|
88669fa033 | ||
|
|
225aa28a1b | ||
|
|
f1245206ce | ||
|
|
7f453949a1 | ||
|
|
38f385f67d | ||
|
|
5f5342c0d3 | ||
|
|
15e003f030 | ||
|
|
5edbc00865 | ||
|
|
723a49ccee | ||
|
|
ff487a0271 | ||
|
|
337735094b | ||
|
|
01b5b13475 | ||
|
|
fd9f792f90 | ||
|
|
e8ded61efb | ||
|
|
b0e098bb68 | ||
|
|
f26c698f4a | ||
|
|
a341c889b7 | ||
|
|
1f87fef968 | ||
|
|
c8d0a2b4bb | ||
|
|
385709853b | ||
|
|
0405a49df1 | ||
|
|
b6543beca2 | ||
|
|
da198fdda5 | ||
|
|
24f912e0b2 | ||
|
|
d7abacb7b2 | ||
|
|
08aeeadd71 | ||
|
|
c214692f66 | ||
|
|
35a9a468ce | ||
|
|
28943af494 | ||
|
|
5f1eb18da4 | ||
|
|
ae3ca2b7df | ||
|
|
9ea904c12d | ||
|
|
9a4cbc05a6 | ||
|
|
08fbe17627 | ||
|
|
722d7ff38d | ||
|
|
5d6657f77a | ||
|
|
d83b907cdc | ||
|
|
202817740a | ||
|
|
9b08051703 | ||
|
|
9c71b74d37 | ||
|
|
535a54040f | ||
|
|
68030d12cf | ||
|
|
3494fddd7c | ||
|
|
424af13891 | ||
|
|
9081ddb455 | ||
|
|
1ccf836ebb | ||
|
|
5e9e1b2c91 | ||
|
|
baed7d339e | ||
|
|
6759a28579 | ||
|
|
0db2fe6e39 | ||
|
|
845945e70a | ||
|
|
ae6ae88151 | ||
|
|
7b73a689e1 | ||
|
|
945689d01c | ||
|
|
d70f69566f | ||
|
|
48495f41e8 | ||
|
|
47f7750f26 | ||
|
|
81e3aa4fc8 | ||
|
|
8f6e01a70b | ||
|
|
75468c255a | ||
|
|
e52f64e3d2 | ||
|
|
7d7ef5ac4e | ||
|
|
b368e0a1f9 | ||
|
|
dff2cdc650 | ||
|
|
dcaef756e7 | ||
|
|
2be515e7bb | ||
|
|
699d5d1081 | ||
|
|
8847e39fb7 | ||
|
|
55e9bd3660 | ||
|
|
88d29a7b4b | ||
|
|
cbedb50cb3 | ||
|
|
78b2a4af1a | ||
|
|
457cc48043 | ||
|
|
b711c050db | ||
|
|
928f1bfa7b | ||
|
|
2b3b6268dd | ||
|
|
97ebf9021c | ||
|
|
c49e4f52ae | ||
|
|
1d89198444 | ||
|
|
8c5d5b8e1c | ||
|
|
d3bec0b2f9 | ||
|
|
c15e3de637 | ||
|
|
24bffd4418 | ||
|
|
1e523414f8 | ||
|
|
190f78fb5a | ||
|
|
64acf3acbc | ||
|
|
a076a248bf | ||
|
|
1ca47074bc | ||
|
|
b380b618bc | ||
|
|
a036d88a4e | ||
|
|
2a57f716d3 | ||
|
|
86598705ef | ||
|
|
5d24f62b95 | ||
|
|
dd3f69eaf3 | ||
|
|
fc54f54b98 | ||
|
|
80b88d819e | ||
|
|
24c10ae733 | ||
|
|
3b18c82c88 | ||
|
|
be83855acf | ||
|
|
10ed334e8c | ||
|
|
c4a14c27cf | ||
|
|
819a331c4a | ||
|
|
9fa6593d7f | ||
|
|
256472f9eb | ||
|
|
9b3b2efe9a | ||
|
|
da9a8d54de | ||
|
|
af8449cef8 | ||
|
|
0365f5d52c | ||
|
|
110ef6201e | ||
|
|
0d5daea93d | ||
|
|
983e170f20 | ||
|
|
f66c6bfebf | ||
|
|
fe77ab4d71 | ||
|
|
763c700372 | ||
|
|
2498df68c7 | ||
|
|
d36aa4fc89 | ||
|
|
f4e1b2123a | ||
|
|
63ee0daac5 | ||
|
|
b58177e3c6 | ||
|
|
f888548e0e | ||
|
|
6ff192c4ea | ||
|
|
64753effd1 | ||
|
|
be9442e7b3 | ||
|
|
ef2890fe51 | ||
|
|
614dcb8bce | ||
|
|
3ba81c8bb6 | ||
|
|
588d022fbb | ||
|
|
96990fc1c5 | ||
|
|
4506d80198 | ||
|
|
72353bf044 | ||
|
|
2696deb2a1 | ||
|
|
9f9fdc1434 | ||
|
|
e2b79c34bc | ||
|
|
69573c6afe | ||
|
|
5c937c5642 | ||
|
|
e500a08f15 | ||
|
|
82aec69302 | ||
|
|
9584ca080c | ||
|
|
e1ddee6c26 | ||
|
|
86b550e43e | ||
|
|
3bf9dc9f18 | ||
|
|
0ca7aa8c09 | ||
|
|
58efd7553c | ||
|
|
0484f5b0dc | ||
|
|
961540160f | ||
|
|
93096a9db8 | ||
|
|
f757285ea8 | ||
|
|
baedd25309 | ||
|
|
bbc1a1f1fb | ||
|
|
addf696db8 | ||
|
|
9327ac0ba7 | ||
|
|
a8a5cb05a7 | ||
|
|
bff33a98ce | ||
|
|
66c8658898 | ||
|
|
d6b2c8f296 | ||
|
|
4e89895391 | ||
|
|
0f5da31eb2 | ||
|
|
3206a46a92 | ||
|
|
42b35c5ac9 | ||
|
|
04180985cb | ||
|
|
42433c0b44 | ||
|
|
f4d47f825d | ||
|
|
44137be88d | ||
|
|
a524f0c2c1 | ||
|
|
d79d6c7055 | ||
|
|
e51035ba9a | ||
|
|
d4645ec609 | ||
|
|
51f34b6b07 | ||
|
|
9cbbc92062 | ||
|
|
23c7086605 | ||
|
|
b00c22916a | ||
|
|
41057ac364 | ||
|
|
1c982315dd | ||
|
|
bf99906386 | ||
|
|
3c88184177 | ||
|
|
f4968e9f45 | ||
|
|
100412267a | ||
|
|
00b98730f7 | ||
|
|
242da95eed | ||
|
|
0eb5dd6d21 | ||
|
|
0fa34c6880 | ||
|
|
bfe8e1e2e9 | ||
|
|
761afd029d | ||
|
|
93565ea768 | ||
|
|
1f82beb2ef | ||
|
|
c076e72cbf | ||
|
|
26139ee06f | ||
|
|
bd394ba6dc | ||
|
|
1f0e603992 | ||
|
|
f5c10f249c | ||
|
|
69f9842ec9 | ||
|
|
d2d71b8630 | ||
|
|
ff3aa6c663 | ||
|
|
dcb5f62413 | ||
|
|
c3e2505b66 | ||
|
|
c7cc595906 | ||
|
|
2dd9e27a44 | ||
|
|
26ed0b0f34 | ||
|
|
374aadc97e | ||
|
|
86dd4e7ee0 | ||
|
|
714a93022f | ||
|
|
35fd21531a | ||
|
|
ca00ae2e23 | ||
|
|
b8655dd3bc | ||
|
|
9e6f43e3ff | ||
|
|
9ec258b74d | ||
|
|
8ca4fb3784 | ||
|
|
d860dd753e | ||
|
|
b4ccc62596 | ||
|
|
07f5bdde60 | ||
|
|
5b0a17359d | ||
|
|
1ad90b8662 | ||
|
|
54ceef0ba1 | ||
|
|
c38edfcb32 | ||
|
|
5b9afd7555 | ||
|
|
e665afcc2a | ||
|
|
b0ec0e9eac | ||
|
|
49e4016ba2 | ||
|
|
9ee7d60afe | ||
|
|
1964fa05e1 | ||
|
|
caf3a69d99 | ||
|
|
769ad4a836 | ||
|
|
062c03c9f7 | ||
|
|
2cf4ac26fd | ||
|
|
405725875d | ||
|
|
5f61f57b2c | ||
|
|
fbeb33479b | ||
|
|
ffd4557447 | ||
|
|
cf5df259e5 | ||
|
|
3d6359f2e7 | ||
|
|
5a229234e7 | ||
|
|
b1a77b2235 | ||
|
|
6db6fef29f | ||
|
|
31fbd19c86 | ||
|
|
a085f4df7f | ||
|
|
cd2c6779b7 | ||
|
|
d39cd088a1 | ||
|
|
e98fcf68f0 | ||
|
|
7d5e066056 | ||
|
|
ba920260b8 | ||
|
|
2988d96cf0 | ||
|
|
36717e5f32 | ||
|
|
4dff54bcb8 | ||
|
|
7a9fe0907a | ||
|
|
bc5a675cdf | ||
|
|
f23e8f8d41 | ||
|
|
61fa97baab | ||
|
|
047163b884 | ||
|
|
6409237b29 | ||
|
|
598a428c6b | ||
|
|
1cfb83f003 | ||
|
|
2aad4c2cf9 | ||
|
|
e2692a4baa | ||
|
|
474a1267d7 | ||
|
|
ed5ca9e4cc | ||
|
|
8d61efa0e8 | ||
|
|
b816a575eb | ||
|
|
a99d28dea9 | ||
|
|
628e565a6c | ||
|
|
84bf705811 | ||
|
|
a721f39945 | ||
|
|
1b9722c65a | ||
|
|
62a60e5542 | ||
|
|
539d06f02d | ||
|
|
9c23fe5ab6 | ||
|
|
f78e9001f3 | ||
|
|
dee1841394 | ||
|
|
a5201a90e8 | ||
|
|
5f5e4ee6b9 | ||
|
|
cf6519da99 | ||
|
|
63eaf643a8 | ||
|
|
a57a3c709e | ||
|
|
bcebd1d5b9 | ||
|
|
4cacfe59bd | ||
|
|
f3ad7b9a16 | ||
|
|
b909c878b1 | ||
|
|
b155f2260f | ||
|
|
63256bc9b2 | ||
|
|
87519e107a | ||
|
|
a38710aa4e | ||
|
|
020fea3031 | ||
|
|
b4102489aa | ||
|
|
871ee0f571 | ||
|
|
f0d90005ea | ||
|
|
933e105f32 | ||
|
|
9b4e6e1ec0 | ||
|
|
46e4d2d573 | ||
|
|
2aa3acae6b | ||
|
|
8514789da9 | ||
|
|
20dcf37976 | ||
|
|
38d513181d | ||
|
|
f121b74bec | ||
|
|
cb8cccc537 | ||
|
|
2924b9182e | ||
|
|
5a59cd9b8c | ||
|
|
ba463afbdc | ||
|
|
6f2a5117dc | ||
|
|
b13241564b | ||
|
|
76816de3aa | ||
|
|
49108c230b | ||
|
|
b32bba47c8 | ||
|
|
3b1ab5e79c | ||
|
|
dcf7946673 | ||
|
|
fdd2da905a | ||
|
|
2cceca49e9 | ||
|
|
bb0e4044bf | ||
|
|
7244dfce1d | ||
|
|
fb5ac37ca2 | ||
|
|
f0a588547d | ||
|
|
04d3ac9aaf | ||
|
|
565126a888 | ||
|
|
395268da22 | ||
|
|
ac3075bef7 | ||
|
|
1f4c596841 | ||
|
|
6613275cc2 | ||
|
|
e7d9863432 | ||
|
|
b9af0645c2 | ||
|
|
9fb7a12849 | ||
|
|
4633273279 | ||
|
|
d0482133a5 | ||
|
|
4ff31d0a41 | ||
|
|
f73c82632f | ||
|
|
8389d8677d | ||
|
|
7fa944ed95 | ||
|
|
2340092008 | ||
|
|
6cd3296c08 | ||
|
|
d86bc0b6cf | ||
|
|
e01d4f289b | ||
|
|
8e1e301764 | ||
|
|
bd37f59829 | ||
|
|
72edc9cd6c | ||
|
|
93123e1fa8 | ||
|
|
4b6dcbb057 | ||
|
|
47f7165b07 | ||
|
|
ae2c0e6552 | ||
|
|
200eabe052 | ||
|
|
5042200492 | ||
|
|
2e73e6bfb6 | ||
|
|
c1d10bbbcb | ||
|
|
746acc21f7 | ||
|
|
f5226a748f | ||
|
|
6a3995014e | ||
|
|
534a537319 | ||
|
|
10eefc4eed | ||
|
|
3d4b3b6a92 | ||
|
|
0f4ceedbb4 | ||
|
|
656e5fd052 | ||
|
|
5735cad457 | ||
|
|
648f972cf0 | ||
|
|
baab9b6fbc | ||
|
|
60b0f9af90 | ||
|
|
9d04406f9a | ||
|
|
29ac533cc9 | ||
|
|
79340c5147 | ||
|
|
b9f5076cfc | ||
|
|
241607e7d7 | ||
|
|
bd7d851758 | ||
|
|
5de1a1ce10 | ||
|
|
8b974f8f74 | ||
|
|
96d94551f9 | ||
|
|
ba8d9c0f0b | ||
|
|
68cbebe1a5 | ||
|
|
0174cb10ae | ||
|
|
293df6308c | ||
|
|
af29822f04 | ||
|
|
0df4f9c114 | ||
|
|
69c9f4588c | ||
|
|
53627c89a7 | ||
|
|
f7f0d2b265 | ||
|
|
2d799f2c11 | ||
|
|
aa5b7eb98a | ||
|
|
1c22e8ae7e | ||
|
|
4d301bc5a6 | ||
|
|
4ccd9ae6da | ||
|
|
c8c9916b59 | ||
|
|
5490919557 | ||
|
|
3f920da413 | ||
|
|
2393db3943 | ||
|
|
a88ec1b1af | ||
|
|
553b3a5c6c | ||
|
|
a6cb25020b | ||
|
|
26c465ad0c | ||
|
|
f2d7083183 | ||
|
|
ef09a29854 | ||
|
|
c23ce16caf | ||
|
|
78a70fed2f | ||
|
|
9dfe5dee64 | ||
|
|
36ef1d1bc6 | ||
|
|
10db51e6c2 | ||
|
|
61aa33af1d | ||
|
|
d8dc055dce | ||
|
|
ce686d2c06 | ||
|
|
7119976199 | ||
|
|
dd7edc8ced | ||
|
|
4428f70ea2 | ||
|
|
0bb7589418 | ||
|
|
0513463256 | ||
|
|
8a9d743f6f | ||
|
|
4cab74c18c | ||
|
|
615c97132d | ||
|
|
4b707db4b3 | ||
|
|
70c5f347c4 | ||
|
|
5217d89543 | ||
|
|
ca55bbdaed | ||
|
|
366e735ad8 | ||
|
|
c363fc71eb | ||
|
|
9f3ea71d5d | ||
|
|
75058e54b8 | ||
|
|
ed5405d4f7 | ||
|
|
8dd4270a6a | ||
|
|
c29f622b90 | ||
|
|
bc0e415926 | ||
|
|
c48965ea2f | ||
|
|
bb995f1bb6 | ||
|
|
857e13e9b8 | ||
|
|
593423434c | ||
|
|
25caeee854 | ||
|
|
20ce7a2d9f | ||
|
|
1ba74d824b | ||
|
|
be7b706486 | ||
|
|
78e18fcdcf | ||
|
|
706598313e | ||
|
|
b96f09bb3a | ||
|
|
4b191fb558 | ||
|
|
de1abf9981 | ||
|
|
c69f6ca1f4 | ||
|
|
d4b04d22ed | ||
|
|
b1f4b9759b | ||
|
|
650f882265 | ||
|
|
a2747403f2 | ||
|
|
3f9412add2 | ||
|
|
29877963be | ||
|
|
302c5afdee | ||
|
|
9f90806027 | ||
|
|
519862115c | ||
|
|
4d97ea106c | ||
|
|
d3aa50c9c3 | ||
|
|
1708769d42 | ||
|
|
4e223f816a | ||
|
|
8cf6b4064f | ||
|
|
17907f11a3 | ||
|
|
cb7df797e1 | ||
|
|
7db86a4e05 | ||
|
|
122d7281f7 | ||
|
|
4bfd34b479 | ||
|
|
962d9f36d0 | ||
|
|
216d41cd64 | ||
|
|
4af104384b | ||
|
|
aa78d51521 | ||
|
|
16e7ec7bfe | ||
|
|
fce1dc083b | ||
|
|
bcfa72ed31 | ||
|
|
b92cc852d1 | ||
|
|
6762af4158 | ||
|
|
f691e8981a | ||
|
|
6875a540ec | ||
|
|
e569f5d6eb | ||
|
|
61a5e81bc6 | ||
|
|
ee153f64d4 | ||
|
|
4c4db6f73c | ||
|
|
fa5a382c4b | ||
|
|
a73c385831 | ||
|
|
91b35c5349 | ||
|
|
056db37c66 | ||
|
|
5cb71fa5da | ||
|
|
55d00243fb | ||
|
|
8a269823d2 | ||
|
|
5ec5b127d0 | ||
|
|
0cf9e498b9 | ||
|
|
c407e72dcc | ||
|
|
8e3b796a2f | ||
|
|
17e7b276f6 | ||
|
|
306ce3819e | ||
|
|
f80aff4a65 | ||
|
|
c7cbd41c16 | ||
|
|
41542e6886 | ||
|
|
a039869ba0 | ||
|
|
192e85ffa4 | ||
|
|
b334201797 | ||
|
|
3ea84d7eab | ||
|
|
a80c45940e | ||
|
|
ab71e33d83 | ||
|
|
fe57e7059b | ||
|
|
2de65ab39f | ||
|
|
0559db9cf8 | ||
|
|
bae7b034e6 | ||
|
|
74a40adece | ||
|
|
1767a07f4d | ||
|
|
af7549d2f6 | ||
|
|
e785b723aa | ||
|
|
f520cd92d0 | ||
|
|
eb6fd311df | ||
|
|
5a12944b39 | ||
|
|
987619130b | ||
|
|
2b2723cb74 | ||
|
|
e485ecb3b4 | ||
|
|
8c5203f7e1 | ||
|
|
dfaf1a1075 | ||
|
|
bf5c0e0b0d | ||
|
|
167e754a1b | ||
|
|
34b804e9dc | ||
|
|
7338649fa5 | ||
|
|
ae1103c5a3 | ||
|
|
a7e4553ea7 | ||
|
|
6f27e8db38 | ||
|
|
292b02b58c | ||
|
|
e60f527cb0 | ||
|
|
b5a5a91b13 | ||
|
|
4c84a2ce61 | ||
|
|
18e0e4b597 | ||
|
|
74b574d0b1 | ||
|
|
9ba1b8d720 | ||
|
|
d726c921eb | ||
|
|
bd45bb3ad3 | ||
|
|
fee8503093 | ||
|
|
fabf7081d3 | ||
|
|
6083cd2559 | ||
|
|
d11e80e1b3 | ||
|
|
6942c715d0 | ||
|
|
427652e9bd | ||
|
|
106b4fdd2d | ||
|
|
f164ddf155 | ||
|
|
d9ddf7561f | ||
|
|
37368bda65 | ||
|
|
de1b3d5113 | ||
|
|
830b01bd2a | ||
|
|
90187eae37 | ||
|
|
7399f7a087 | ||
|
|
a3e47d26f6 | ||
|
|
d3bef2adc3 | ||
|
|
7b459ec355 | ||
|
|
301072a86c | ||
|
|
3b7b3ef2bb | ||
|
|
b6e4611a91 | ||
|
|
2929bb672a | ||
|
|
a4765bf954 | ||
|
|
0c2045beff | ||
|
|
22f6687f44 | ||
|
|
e56633d5b0 | ||
|
|
a44795e6c3 | ||
|
|
5805a54097 | ||
|
|
350519d429 | ||
|
|
8f94c721bf | ||
|
|
c7652fc29c | ||
|
|
e537d53389 | ||
|
|
a890ee6864 | ||
|
|
4f81d64517 | ||
|
|
b5875c3af9 | ||
|
|
ed87dbc141 | ||
|
|
059886a1e4 | ||
|
|
ba52af786e | ||
|
|
929f524e77 | ||
|
|
cd49ec92e3 | ||
|
|
ee39e3cf72 | ||
|
|
a17f280f7d | ||
|
|
7b4cfffc03 | ||
|
|
db9c2992e3 | ||
|
|
b23284cba2 | ||
|
|
0c163c4d03 | ||
|
|
e4145deeb7 | ||
|
|
33258803ea | ||
|
|
179730e485 | ||
|
|
106b3257e4 | ||
|
|
312cc415ce | ||
|
|
1f2a408be0 | ||
|
|
0d232c612b | ||
|
|
68da4d90dc | ||
|
|
545dc5cf65 | ||
|
|
a089064588 | ||
|
|
a06f7fbe2e | ||
|
|
7c4d9519c8 | ||
|
|
6fa0807550 | ||
|
|
c545ada746 | ||
|
|
868a0d8a90 | ||
|
|
5079dff338 | ||
|
|
9e3d130ad9 | ||
|
|
b531486dab | ||
|
|
6df98f080b | ||
|
|
69487389d3 | ||
|
|
0cb5f009b4 | ||
|
|
c7b2ec8bba | ||
|
|
12b0a9f35f | ||
|
|
fff30b1c3d | ||
|
|
6ad35e3d84 | ||
|
|
3d80073a0e | ||
|
|
959c3ba89d | ||
|
|
1029939f56 | ||
|
|
fd5d1416d9 | ||
|
|
def5edf93c | ||
|
|
6bdde985ce | ||
|
|
dba38821bc | ||
|
|
9d6a4c1d05 | ||
|
|
94bef08f15 | ||
|
|
0178840c19 | ||
|
|
d04c73ae00 | ||
|
|
495f21c08c | ||
|
|
d238cbea19 | ||
|
|
5d0646c9e1 | ||
|
|
93e5449c08 | ||
|
|
4872a30e2b | ||
|
|
f5fcdf1de4 | ||
|
|
888bf76e4b | ||
|
|
22a650ade8 | ||
|
|
391807b46c | ||
|
|
921a2e0dc4 | ||
|
|
5afe8e5aa1 | ||
|
|
ba84d6ff7c | ||
|
|
d786502f19 | ||
|
|
63063450b3 | ||
|
|
90463ee67d | ||
|
|
6e04dd96a1 | ||
|
|
f7c837aad0 | ||
|
|
bd3d323849 | ||
|
|
e26b558e53 | ||
|
|
85e5cd7f98 | ||
|
|
1d8cac6e73 | ||
|
|
52f6bd03b7 | ||
|
|
75c10eaff5 | ||
|
|
53a796afcc | ||
|
|
f94a8698dd | ||
|
|
ffb8059c24 | ||
|
|
bc7c0ed844 | ||
|
|
ac9250fc4a | ||
|
|
f1492945ec | ||
|
|
10ccdbacba | ||
|
|
d683573402 | ||
|
|
ddce0412ac | ||
|
|
609e42cdd8 | ||
|
|
7235c20854 | ||
|
|
e7bedf4433 | ||
|
|
23d30ab2c5 | ||
|
|
741afeea41 | ||
|
|
cd989977b8 | ||
|
|
1216508dc2 | ||
|
|
5c7dfcfe43 | ||
|
|
cff866172a | ||
|
|
31a612aa89 | ||
|
|
b782c46e51 | ||
|
|
eaa47760bc | ||
|
|
7ec6879887 | ||
|
|
c4a3487f0c | ||
|
|
e6de9bfa4e | ||
|
|
c0260ff701 | ||
|
|
fba2603304 | ||
|
|
7d5acef20a | ||
|
|
cda8fb3380 | ||
|
|
862a310075 | ||
|
|
98146eae07 | ||
|
|
c277039fb4 | ||
|
|
92577ddaed | ||
|
|
b99b6b5ae9 | ||
|
|
cda81e35db | ||
|
|
271a41b7dd | ||
|
|
69aeddd185 | ||
|
|
99bd69adfe | ||
|
|
115a53225e | ||
|
|
36c196e18c | ||
|
|
0c8219e683 | ||
|
|
de9c44fc56 | ||
|
|
d1dbc50a1c | ||
|
|
0fbea73581 | ||
|
|
10f7199c63 | ||
|
|
49d6605377 | ||
|
|
11c8cabf28 | ||
|
|
00132cd977 | ||
|
|
5e1b61eb02 | ||
|
|
dfb49558f4 | ||
|
|
4e1c308162 | ||
|
|
5c2692a8ea | ||
|
|
9c240de303 | ||
|
|
2536dc39b5 | ||
|
|
cf0bff8582 | ||
|
|
9c12ba5708 | ||
|
|
8639eda70f | ||
|
|
1874346c46 | ||
|
|
16040063dc | ||
|
|
2b0b03eebc | ||
|
|
df2b687a95 | ||
|
|
44fa4d1081 | ||
|
|
ce4bb8e5ec | ||
|
|
8154453803 | ||
|
|
b29fe50f70 | ||
|
|
cce46722d8 | ||
|
|
85ae07e7c8 | ||
|
|
e3da813360 | ||
|
|
9a42d63516 | ||
|
|
4620eb32d2 | ||
|
|
1c8f63f1e5 | ||
|
|
c40f6060da | ||
|
|
5776af30e8 | ||
|
|
30d083ac3c | ||
|
|
4ca0c2cfd1 | ||
|
|
12db46dcad | ||
|
|
9e6547a887 | ||
|
|
017ea0d624 | ||
|
|
a29b8b369e | ||
|
|
6b26b4e3b8 | ||
|
|
7df92ba62c | ||
|
|
9cad4c11fe | ||
|
|
5b42edb42a | ||
|
|
a26d8609a9 | ||
|
|
001e4276d3 | ||
|
|
94437a8fcd | ||
|
|
91f751d105 | ||
|
|
0db5a8673d | ||
|
|
91f2e05d5d | ||
|
|
58fe4f5cb3 | ||
|
|
2ebd9a2774 | ||
|
|
8db428458a | ||
|
|
f8b612a2c0 | ||
|
|
76043d97bd | ||
|
|
07bd396837 | ||
|
|
f7468ab473 | ||
|
|
1213893a71 | ||
|
|
5f1ccc25b6 | ||
|
|
42c0f83ec5 | ||
|
|
5dfaeaf526 | ||
|
|
1214469311 | ||
|
|
f4a9529968 | ||
|
|
3d55134953 | ||
|
|
1c0fe89368 | ||
|
|
73bef17365 | ||
|
|
9398e49eb7 | ||
|
|
50cf095c00 | ||
|
|
5d64fb5946 | ||
|
|
bf55a8e98c | ||
|
|
59e0a0fd7c | ||
|
|
d15be53034 | ||
|
|
b6b2420ff7 | ||
|
|
4bd0e083d1 | ||
|
|
d9c7b39b88 | ||
|
|
583f7df9c8 | ||
|
|
8377aa72a8 | ||
|
|
c57926d799 | ||
|
|
380e3e64cb | ||
|
|
77a03e376c | ||
|
|
5dade2b608 | ||
|
|
877b3361c8 | ||
|
|
2fbfc2a8f1 | ||
|
|
e09b49288f | ||
|
|
6aa98a1e91 | ||
|
|
14b74069f8 | ||
|
|
c1cfcc78fe | ||
|
|
2c299a9f37 | ||
|
|
288697cda2 | ||
|
|
9fa771f9fe | ||
|
|
d1aa672388 | ||
|
|
b21f6fd619 | ||
|
|
39245238fd | ||
|
|
43d8090182 | ||
|
|
d13dae6b06 | ||
|
|
0998ef0c4e | ||
|
|
543bf51eff | ||
|
|
5513feb15b | ||
|
|
e03faaeb8f | ||
|
|
966dd03195 | ||
|
|
5041774fd3 | ||
|
|
c5453d476d | ||
|
|
54eae7830e | ||
|
|
4e74c7e3b1 | ||
|
|
fe52400b75 | ||
|
|
18feef0753 | ||
|
|
6ec021aafa | ||
|
|
954957bd8a | ||
|
|
14e92f53f1 | ||
|
|
d3183467e0 | ||
|
|
b62614bbd4 | ||
|
|
618155e6ab | ||
|
|
bd75d32c1b | ||
|
|
5acfef8edb | ||
|
|
7ce3ebc46d | ||
|
|
0353b0e04f | ||
|
|
ca81ab784a | ||
|
|
3262d819de | ||
|
|
a8cdbd44e8 | ||
|
|
04820ba09e | ||
|
|
52120b367a | ||
|
|
d6d96e8c89 | ||
|
|
2b34dd7373 | ||
|
|
7a87343c71 | ||
|
|
5f80121637 | ||
|
|
5920a96da7 | ||
|
|
0acaa839b9 | ||
|
|
f8b767ed32 | ||
|
|
d0b0d0ec72 | ||
|
|
e0463f5a74 | ||
|
|
1b30210120 | ||
|
|
a1e28bb669 | ||
|
|
dc4bd531a4 | ||
|
|
c5aedb14a9 | ||
|
|
ec28dee728 | ||
|
|
3e459ed434 | ||
|
|
d66be62516 | ||
|
|
98fd919647 | ||
|
|
0a9b2b6b15 | ||
|
|
bb469deb85 | ||
|
|
96402a2354 | ||
|
|
4fec7aa991 | ||
|
|
b5dfc54be3 | ||
|
|
848e3f6c5d | ||
|
|
1f5818cec8 | ||
|
|
06ec5424c7 | ||
|
|
b9551862b4 | ||
|
|
e0a75f68d5 | ||
|
|
a5f1fa3168 | ||
|
|
1375ed6aea | ||
|
|
f1a3b281d4 | ||
|
|
59da3dfe03 | ||
|
|
52f06cabd2 | ||
|
|
612efe56f1 | ||
|
|
07c0bc7b04 | ||
|
|
f5774bba6f | ||
|
|
714832bb49 | ||
|
|
3bc8d4d0eb | ||
|
|
8083a86581 | ||
|
|
b3528c314a | ||
|
|
65587be737 | ||
|
|
9c24e1ccfb | ||
|
|
0147186565 | ||
|
|
8924cb0960 | ||
|
|
869735e4b5 | ||
|
|
605381f83d | ||
|
|
71f70b4377 | ||
|
|
c6daf4d41c | ||
|
|
3f1dc22c0e | ||
|
|
02527552fd | ||
|
|
ac5b9f2382 | ||
|
|
a2931cd17d | ||
|
|
fc65496d1d | ||
|
|
be98466b0d | ||
|
|
0fd60d1e80 | ||
|
|
35857931ef | ||
|
|
a4c3058f84 | ||
|
|
6cb7afcbc0 | ||
|
|
32a0f5b04a | ||
|
|
3bc6190bdd | ||
|
|
4fb9571136 | ||
|
|
e70bb371d9 | ||
|
|
2099ac0615 | ||
|
|
5e28b1216e | ||
|
|
e858ee811b | ||
|
|
a498fc8e72 | ||
|
|
7063b6cb6d | ||
|
|
917d0ced4a | ||
|
|
969418ce73 | ||
|
|
7f3df847a2 | ||
|
|
e0424fe6cc | ||
|
|
b67397861c | ||
|
|
de15a2ace1 | ||
|
|
4369ee2ca7 | ||
|
|
a1163b70a6 | ||
|
|
2030aea175 | ||
|
|
969b66b315 | ||
|
|
4442da306a | ||
|
|
911fd6c654 | ||
|
|
9cee3dda1f | ||
|
|
cc0f026cec | ||
|
|
f1b5c333ff | ||
|
|
123fe58c26 | ||
|
|
fd1e163bf4 | ||
|
|
ab8b4d5c36 | ||
|
|
4a044351a9 | ||
|
|
e0a2268b0e | ||
|
|
3432771150 | ||
|
|
768615f2f1 | ||
|
|
9ae215291f | ||
|
|
1cf206d764 | ||
|
|
4c406ec9c0 | ||
|
|
500b896d50 | ||
|
|
18a239e808 | ||
|
|
5aa07bda7c | ||
|
|
379fd33484 | ||
|
|
ed6629002f | ||
|
|
bcb4ac7aae | ||
|
|
5395b173aa | ||
|
|
735f9c7a45 | ||
|
|
9cbca24f7a | ||
|
|
6f8d29ad80 | ||
|
|
eb947acebe | ||
|
|
01e84edd0a | ||
|
|
b7538b6ada | ||
|
|
232742a5e6 | ||
|
|
a33ddf373b | ||
|
|
b57e735199 | ||
|
|
38816d7e41 | ||
|
|
3a89bb0db2 | ||
|
|
865c38995d | ||
|
|
beae28f2db | ||
|
|
81b2c5ac68 | ||
|
|
35b5f60f99 | ||
|
|
13d0db5f9a | ||
|
|
96f23758b4 | ||
|
|
f7601756e9 | ||
|
|
54059b2f15 | ||
|
|
f00887ea42 | ||
|
|
08a5884c9f | ||
|
|
0f3b7dd6e9 | ||
|
|
bab73edcef | ||
|
|
42d26f01d6 | ||
|
|
8aadc2837c | ||
|
|
ea37882b95 | ||
|
|
599a0c66b2 | ||
|
|
57e0bfc5a9 | ||
|
|
9f424bb208 | ||
|
|
4e5b813aa8 | ||
|
|
6a2c32bd23 | ||
|
|
febcb90ece | ||
|
|
4b300f8274 | ||
|
|
8da8e02dc8 | ||
|
|
3e9b6a330d | ||
|
|
b54c4df74d | ||
|
|
f0a33c00bc | ||
|
|
8631b28130 | ||
|
|
9b3662e5ad | ||
|
|
3fb690a0f6 | ||
|
|
76d41fc250 | ||
|
|
15fa300e04 | ||
|
|
47c86828c6 | ||
|
|
6eaf35a142 | ||
|
|
ea8364eba5 | ||
|
|
fc4b1693f9 | ||
|
|
52f3d6722d | ||
|
|
126628546b | ||
|
|
2540ecc0ac | ||
|
|
b49972a623 | ||
|
|
b82a9a6594 | ||
|
|
be701677d6 | ||
|
|
1e8fc8b062 | ||
|
|
b6c765c9dc | ||
|
|
1d2797dc1f | ||
|
|
4b984f9819 | ||
|
|
e8882a5167 | ||
|
|
4f0490f26f | ||
|
|
7fe6bc52d0 | ||
|
|
b7408fa39e | ||
|
|
7ca5b5c928 | ||
|
|
6f5f613d9f | ||
|
|
52f2509280 | ||
|
|
c07f694a07 | ||
|
|
c49198fd71 | ||
|
|
864bad0ebb | ||
|
|
051858300e | ||
|
|
75d16e4852 | ||
|
|
a756c0b182 | ||
|
|
550cab41fb | ||
|
|
45bd81fe8c | ||
|
|
3f7ee613fc | ||
|
|
93f061f78a | ||
|
|
7517c76ae4 | ||
|
|
e26f771cbe | ||
|
|
bf5a1f662a | ||
|
|
d9753989bf | ||
|
|
391b98f72c | ||
|
|
d40a087ec2 | ||
|
|
138c14d43f | ||
|
|
dc6a594277 | ||
|
|
9f5c61b1fd | ||
|
|
3bca640521 | ||
|
|
73082a338b | ||
|
|
1593ebec1f | ||
|
|
2413968021 | ||
|
|
44b542814a | ||
|
|
2848f5dab4 | ||
|
|
f0f5a8f2b5 | ||
|
|
0563ce93a1 | ||
|
|
6a927be76c | ||
|
|
c8e3ea955d | ||
|
|
b33a9a71f6 | ||
|
|
dc80431438 | ||
|
|
8af3dc140e | ||
|
|
3c7d2d4cea | ||
|
|
de697a4267 | ||
|
|
ca35db76b8 | ||
|
|
b6eded1119 | ||
|
|
c8d8ae89d7 | ||
|
|
b2d949ce9a | ||
|
|
f12ebffa39 | ||
|
|
9b4d32b68c | ||
|
|
f4e708a02f | ||
|
|
b4e83b6537 | ||
|
|
c7637a0c53 | ||
|
|
9b1195c896 | ||
|
|
732c6134dd | ||
|
|
e98c871781 | ||
|
|
d616099de6 | ||
|
|
e3070eb170 | ||
|
|
319b02a757 | ||
|
|
64cdbb8e3b | ||
|
|
edeba4ca34 | ||
|
|
7e03f612b3 | ||
|
|
578f1b8ece | ||
|
|
e2a15d0ec9 | ||
|
|
3c74aec973 | ||
|
|
61e3ef2552 | ||
|
|
136e5fdf95 | ||
|
|
75fe9f9cc4 | ||
|
|
73dad85867 | ||
|
|
91895c52ca | ||
|
|
fc28af8518 | ||
|
|
3545626950 | ||
|
|
6a7079a594 | ||
|
|
42db2bc93d | ||
|
|
a2f5b55d10 | ||
|
|
8e7e9b7040 | ||
|
|
43eefb5929 | ||
|
|
dcdcba9f1f | ||
|
|
dec37b3dbe | ||
|
|
9431112f77 | ||
|
|
7bdd5c9e0d | ||
|
|
c963aa98e8 | ||
|
|
0f6e1c1c05 | ||
|
|
ce8d49a47d | ||
|
|
70dc305f12 | ||
|
|
df45374041 | ||
|
|
22a5a91bd5 | ||
|
|
d5788ba53a | ||
|
|
4d8a1c67c3 | ||
|
|
ea34e4bad8 | ||
|
|
258e2d197a | ||
|
|
e75e09dae8 | ||
|
|
4aee8ba27f | ||
|
|
90c6276fe2 | ||
|
|
1cae3baaea | ||
|
|
209882d5a9 | ||
|
|
2999096221 | ||
|
|
d076255c98 | ||
|
|
b2f2deffe6 | ||
|
|
b31aa4aacb | ||
|
|
85962a3eb1 | ||
|
|
a9696abdce | ||
|
|
e22448fb5c | ||
|
|
db0a102703 | ||
|
|
9034765790 | ||
|
|
3377b29957 | ||
|
|
5390594f40 | ||
|
|
e95753b184 | ||
|
|
6bd0d57c1e | ||
|
|
192b5a41f0 | ||
|
|
c76da2e77d | ||
|
|
8bf45536d3 | ||
|
|
e1fca2a1ab | ||
|
|
f5fe37ab09 | ||
|
|
08813f1650 | ||
|
|
8f7dd2f858 | ||
|
|
05050381d3 | ||
|
|
95d6d2644f | ||
|
|
dbd981939c | ||
|
|
2e45b41902 | ||
|
|
7776c56c6c | ||
|
|
4decceea76 | ||
|
|
26b97722c6 | ||
|
|
38fe928d06 | ||
|
|
c229223e01 | ||
|
|
ab59e41e1a | ||
|
|
392ee70fd5 | ||
|
|
7abad2ff99 | ||
|
|
d337cc6618 | ||
|
|
3a8bff228e | ||
|
|
5ba39fef9a | ||
|
|
c7160e3d25 | ||
|
|
6171d164d7 | ||
|
|
b1e0018b74 | ||
|
|
9b8aa8d09e | ||
|
|
3bed94f4ad | ||
|
|
a895a0d79e | ||
|
|
32522b61f2 | ||
|
|
1da3828a09 | ||
|
|
982ff8733f | ||
|
|
ebe374d572 | ||
|
|
dd45e7b4eb | ||
|
|
63eb0e3a38 | ||
|
|
f472071f6f | ||
|
|
7b695aa684 | ||
|
|
de4b5978c3 | ||
|
|
f23f8f7f5d | ||
|
|
f64acadd58 | ||
|
|
68ea1d0289 | ||
|
|
1574043a9e | ||
|
|
a2a5580e68 | ||
|
|
2696cf9b9e | ||
|
|
d9f962ee6f | ||
|
|
7468d8a000 | ||
|
|
270bb4e2d9 | ||
|
|
d3d9b06eb7 | ||
|
|
e7131bc8f8 | ||
|
|
1df1c15e48 | ||
|
|
986244eeea | ||
|
|
526bc36b40 | ||
|
|
9bdb7bef5d | ||
|
|
54e7d5d260 | ||
|
|
5265c190d4 | ||
|
|
4b7c052ed8 | ||
|
|
b62e7e7d8b | ||
|
|
fd290882fd | ||
|
|
09015f8924 | ||
|
|
b5f382f0ea | ||
|
|
ccd13dd643 | ||
|
|
d66715648a | ||
|
|
e07ff7d3fb | ||
|
|
0d60789f69 | ||
|
|
e769fbaffb | ||
|
|
5721f9f3a9 | ||
|
|
cca9f2392e | ||
|
|
928fa44154 | ||
|
|
a795f03c48 | ||
|
|
8f7b869c08 | ||
|
|
c5294f994e | ||
|
|
34f52e47eb | ||
|
|
f950d27b3d | ||
|
|
2a2da48d18 | ||
|
|
0b1cd826b0 | ||
|
|
11c1573b55 | ||
|
|
b3525b8657 | ||
|
|
8d5556764c | ||
|
|
f965209eee | ||
|
|
5c526995d8 | ||
|
|
50ee82e8bd | ||
|
|
8a3c909c74 | ||
|
|
3a8e1e0484 | ||
|
|
3b53cd56ef | ||
|
|
30e88a4f6b | ||
|
|
e5f47cd14b | ||
|
|
6368b09337 | ||
|
|
b97102da01 | ||
|
|
dbeae16dc1 | ||
|
|
edbcba6f11 | ||
|
|
ed876a9c52 | ||
|
|
67fe8fc4a7 | ||
|
|
55b530f0fd | ||
|
|
3a2c3ea8fa | ||
|
|
aae51a9b23 | ||
|
|
cd2b811555 | ||
|
|
15d1a6c937 | ||
|
|
9ab335626c | ||
|
|
451db7dd98 | ||
|
|
d6293730fc | ||
|
|
8e410f14b1 | ||
|
|
49000dadda | ||
|
|
9bde18492a | ||
|
|
b22fa9f7f4 | ||
|
|
a7b2d23e9b | ||
|
|
ba94f824b9 | ||
|
|
8aec437c23 | ||
|
|
98f656cfcb | ||
|
|
e558ddae3f | ||
|
|
2c665e5e4c | ||
|
|
2fe3d16bbe | ||
|
|
2844f276b9 | ||
|
|
414b5ea6f3 | ||
|
|
c42dcd5ac9 | ||
|
|
b9723aa85b | ||
|
|
03fb13e749 | ||
|
|
e04f04ef0f | ||
|
|
0f3c2c4b24 | ||
|
|
8a94a4938f | ||
|
|
b553ffd55d | ||
|
|
e45958b967 | ||
|
|
006ca4421a | ||
|
|
0bfdb45b41 | ||
|
|
8cbccb20ef | ||
|
|
f506f73d3f | ||
|
|
7734bbfe4d | ||
|
|
d35c5bcb2f | ||
|
|
c699d3a17a | ||
|
|
d16ac62a51 | ||
|
|
2fa5b8c0a2 | ||
|
|
15feeb7bfe | ||
|
|
02ecc93998 | ||
|
|
34291d5938 | ||
|
|
e726adc27b | ||
|
|
642f460dca | ||
|
|
1d7d9818fa | ||
|
|
c2dcc68803 | ||
|
|
d7c9f2ccba | ||
|
|
7dd61c05dc | ||
|
|
1c1155513a | ||
|
|
f84151e1fe | ||
|
|
5ec3d3e36d | ||
|
|
4b13f0e025 | ||
|
|
2869ccfe39 | ||
|
|
8ead4745f8 | ||
|
|
15b241cc3e | ||
|
|
2b07a69b93 | ||
|
|
5068ce0569 | ||
|
|
0b1b11ea53 | ||
|
|
ea9f169a6c | ||
|
|
cbd7f89066 | ||
|
|
146ff6f703 | ||
|
|
326ae5ff6b | ||
|
|
8c16f12d7a | ||
|
|
477228d4ff | ||
|
|
9baaa6fa56 | ||
|
|
49d11ed9f8 | ||
|
|
7834274bff | ||
|
|
d2565d0f61 | ||
|
|
4fde0bf62e | ||
|
|
a679081993 | ||
|
|
177292de13 | ||
|
|
efcb4abfd0 | ||
|
|
1501d1c570 | ||
|
|
59a56ac77f | ||
|
|
35f09f4f74 | ||
|
|
421dfce599 | ||
|
|
b240c15014 | ||
|
|
9de8df496a | ||
|
|
4f65066572 | ||
|
|
c38687725d | ||
|
|
099f236f45 | ||
|
|
996cd7e2ab | ||
|
|
77df590f65 | ||
|
|
ce064188c6 | ||
|
|
5d6f59a598 | ||
|
|
f4a4cf1402 | ||
|
|
032ef0ca34 | ||
|
|
5a7e8d8520 | ||
|
|
63146821d7 | ||
|
|
9ed8eac8c6 | ||
|
|
40bb1699a5 | ||
|
|
74827133b2 | ||
|
|
7c8706757d | ||
|
|
3dc066a143 | ||
|
|
43251ed8ce | ||
|
|
1a16822987 | ||
|
|
fdd4c1b9d1 | ||
|
|
1bd1050160 | ||
|
|
525a0478b0 | ||
|
|
ce28760c2a | ||
|
|
438cb1d7e0 | ||
|
|
87c8cf4892 | ||
|
|
f2fefb91d5 | ||
|
|
4d05d477f8 | ||
|
|
cc95c3e9c8 | ||
|
|
f0a7a6a1e2 | ||
|
|
4090843fef | ||
|
|
c6c18261a0 | ||
|
|
d9e83eb53a | ||
|
|
1cf404177d | ||
|
|
ed9ffec5ba | ||
|
|
582607c0f0 | ||
|
|
6cd5826d21 | ||
|
|
b7e953f50e | ||
|
|
9f630b6653 | ||
|
|
024af91df8 | ||
|
|
3017dbc8c1 | ||
|
|
5d33b34be7 | ||
|
|
f2104b0a5a | ||
|
|
84b004399e | ||
|
|
e8a01f0916 | ||
|
|
4f1d579ba1 | ||
|
|
c34d8286a3 | ||
|
|
4eb389f2d9 | ||
|
|
999ac60a87 | ||
|
|
30af694e30 | ||
|
|
fa76da1dab | ||
|
|
1500691cc2 | ||
|
|
fae5ea749a | ||
|
|
c2dac55edb | ||
|
|
4c5a74284b | ||
|
|
d0a3cfe765 | ||
|
|
580f1f1213 | ||
|
|
b87d164f2f | ||
|
|
f3c8f342ff | ||
|
|
63a1d8d0db | ||
|
|
93f5cc1e60 | ||
|
|
68a503049b | ||
|
|
fae43010c5 | ||
|
|
30351f5ade | ||
|
|
325a5b4af4 | ||
|
|
021c81cb62 | ||
|
|
7099e09a5c | ||
|
|
97b990c9bf | ||
|
|
db3d99f7c7 | ||
|
|
8fb4f37670 | ||
|
|
dfd4115f7a | ||
|
|
e58ad35fb0 | ||
|
|
31db5078c1 | ||
|
|
40c78d23e6 | ||
|
|
ec1d6d537e | ||
|
|
06bfd2b502 | ||
|
|
fd708b28b8 | ||
|
|
03e3281beb | ||
|
|
f247b9ce20 | ||
|
|
67909b55fc | ||
|
|
43ba690eda | ||
|
|
3425267368 | ||
|
|
0c3d9af333 | ||
|
|
67c2b309d1 | ||
|
|
df0fa9883c | ||
|
|
9821a39549 | ||
|
|
692e117c8a | ||
|
|
d96ca61f2b | ||
|
|
fc58b8cc0d | ||
|
|
c8503daf5a | ||
|
|
45e1f93e56 | ||
|
|
77807d439e | ||
|
|
e062c4e6b5 | ||
|
|
755edd2110 | ||
|
|
f51124397f | ||
|
|
e42111545b | ||
|
|
5112b4b963 | ||
|
|
99c5c7ab28 | ||
|
|
edb1473f13 | ||
|
|
f2171173fe | ||
|
|
7f30863df2 | ||
|
|
a6a2c02b6a | ||
|
|
d3ee99d677 | ||
|
|
4abfd4053a | ||
|
|
05e0ed5173 | ||
|
|
00b480527a | ||
|
|
e4231efd20 | ||
|
|
922d2165b3 | ||
|
|
9cee52c668 | ||
|
|
50e32c3d8a | ||
|
|
5e576bff63 | ||
|
|
e1338f5a7f | ||
|
|
672143d3a2 | ||
|
|
2d94a038a5 | ||
|
|
174d55cf3d | ||
|
|
f2889d24e6 | ||
|
|
db58b62235 | ||
|
|
f3b560b453 | ||
|
|
43e064749c | ||
|
|
4af339da63 | ||
|
|
4cd6e7ec91 | ||
|
|
197b5de9da | ||
|
|
cdfddc0fc5 | ||
|
|
f4d3ec908d | ||
|
|
918aaa64e2 | ||
|
|
2417396a93 | ||
|
|
0a051ff2cd | ||
|
|
d702133ded | ||
|
|
2aaee311f3 | ||
|
|
e8d431c2f6 | ||
|
|
0f4c012321 | ||
|
|
f13a8f725c | ||
|
|
e6690c818d | ||
|
|
5d32aa94d9 | ||
|
|
d413b6eba8 | ||
|
|
f0847e6f32 | ||
|
|
50d7554ccd | ||
|
|
b28d3015fe | ||
|
|
75d521d42a | ||
|
|
1ebaacfd5e | ||
|
|
52cd8652bb | ||
|
|
c6bdf7e891 | ||
|
|
11e19a06b7 | ||
|
|
880ca35681 | ||
|
|
650e98b2a9 | ||
|
|
f84946c135 | ||
|
|
508969a183 | ||
|
|
c39e3613a8 | ||
|
|
4eec9a2fba | ||
|
|
6d1b64065a | ||
|
|
5751437c93 | ||
|
|
9fa0490c44 | ||
|
|
6711ceb662 | ||
|
|
dc7677f5fa | ||
|
|
78fb6f55ed | ||
|
|
c5981cbc9a | ||
|
|
2f52b6c164 | ||
|
|
5d59462e49 | ||
|
|
1b09c64856 | ||
|
|
24b90b475b | ||
|
|
2312f03eac | ||
|
|
1d09e4b620 | ||
|
|
6ea1cf71b5 | ||
|
|
302fe94705 | ||
|
|
38ea8d1d86 | ||
|
|
67ed7e40be | ||
|
|
20f211b70a | ||
|
|
ebb07def7e | ||
|
|
55ab968edf | ||
|
|
3f6d6745de | ||
|
|
d1daae1b59 | ||
|
|
350ea2bf28 | ||
|
|
2f73d24ab1 | ||
|
|
1a05696a84 | ||
|
|
fc804751a2 | ||
|
|
938ef930d4 | ||
|
|
ee21d87d1b | ||
|
|
b1888afa10 | ||
|
|
856cc7d6b8 | ||
|
|
d79e81a069 | ||
|
|
f7d9523c7d | ||
|
|
d93e1c84ac | ||
|
|
2a7ff3018b | ||
|
|
c83da012ff | ||
|
|
46e9c4299e | ||
|
|
e1af81ea55 | ||
|
|
99848ab3bb | ||
|
|
90d48d60d8 | ||
|
|
48c0efd20e | ||
|
|
adfc748bfa | ||
|
|
5cef672f9a | ||
|
|
015c7243b9 | ||
|
|
d1480d9f56 | ||
|
|
f3cb17ac3b | ||
|
|
fb2d2c5585 | ||
|
|
945ba5d788 | ||
|
|
3e7edf504d | ||
|
|
3285c71995 | ||
|
|
669e111118 | ||
|
|
360fda15e9 | ||
|
|
2018b88093 | ||
|
|
837b9224cc | ||
|
|
c22da3da1c | ||
|
|
470915a55b | ||
|
|
d9a67d64b1 | ||
|
|
2a26c898ca | ||
|
|
69fc10d5ad | ||
|
|
3647b74d33 | ||
|
|
441946b9d3 | ||
|
|
d376d2a590 | ||
|
|
9328edfdcd | ||
|
|
d105f324af | ||
|
|
23213a91ed | ||
|
|
184c544a24 | ||
|
|
6cc60ba477 | ||
|
|
c5578d7964 | ||
|
|
95cf1aafa0 | ||
|
|
f72a3113f5 | ||
|
|
3c29b46c42 | ||
|
|
f2397c942c | ||
|
|
eb2df761d5 | ||
|
|
1ce8ce896b | ||
|
|
85daf26eb1 | ||
|
|
286be43963 | ||
|
|
d951534d8f | ||
|
|
515f3bf111 | ||
|
|
3852b5ce7f | ||
|
|
d753ae4cf1 | ||
|
|
2ce1e3678a | ||
|
|
365d690d7d | ||
|
|
e75616517d | ||
|
|
5cb2fa5981 | ||
|
|
e854562803 | ||
|
|
fad9594b31 | ||
|
|
1447499776 | ||
|
|
4fe3b5c6a6 | ||
|
|
417da13353 | ||
|
|
69dc1b03c3 | ||
|
|
d7089ab471 | ||
|
|
039f56f390 | ||
|
|
d7cae1ce2a | ||
|
|
d7cf7316be | ||
|
|
b4cbb3aeb1 | ||
|
|
de3012ccf1 | ||
|
|
53a0920f20 | ||
|
|
5fe9021375 | ||
|
|
fd28550ad2 | ||
|
|
c0cb21a07c | ||
|
|
c865f17dc0 | ||
|
|
e23f86faa9 | ||
|
|
7ba1217a13 | ||
|
|
60ac0cef5c | ||
|
|
a42b236587 | ||
|
|
8db5d3ba5c | ||
|
|
d05fd9632e | ||
|
|
ca0bc2bb7b | ||
|
|
3fbb955cf2 | ||
|
|
04b4897dd8 | ||
|
|
c2bc6a04ab | ||
|
|
96c61fc5f2 | ||
|
|
1b82fb7349 | ||
|
|
7b28c42693 | ||
|
|
58ffa31e91 | ||
|
|
0b5bad4aa7 | ||
|
|
2bce61d18b | ||
|
|
9cebd24987 | ||
|
|
0d2c90cc2e | ||
|
|
54c88dfae9 | ||
|
|
d1c23477df | ||
|
|
8fb1356623 | ||
|
|
d2fec56456 | ||
|
|
bd2d99aced | ||
|
|
71308fe8c1 | ||
|
|
da649e397e | ||
|
|
1dbcfaa2c6 | ||
|
|
2d471e39dc | ||
|
|
e5dec8671e | ||
|
|
5fa2aa6d48 | ||
|
|
0edac8810b | ||
|
|
b085a3243c | ||
|
|
d256e8e9f2 | ||
|
|
250d286f1d | ||
|
|
eac9c8a7e6 | ||
|
|
a67213627c | ||
|
|
852d19f209 | ||
|
|
b1f091e4d7 | ||
|
|
8cd583fd8c | ||
|
|
bf190be5b4 | ||
|
|
092e7378cd | ||
|
|
2a59392ba8 | ||
|
|
feabaedd83 | ||
|
|
c9b8f404e0 | ||
|
|
39df2a475e | ||
|
|
957abf1c1b | ||
|
|
7c34911b1c | ||
|
|
7688bf3f21 | ||
|
|
242cb047d4 | ||
|
|
43fbbfe0df | ||
|
|
72bdca009c | ||
|
|
fef93af0a6 | ||
|
|
3e7a76cc64 | ||
|
|
49c4aa1a54 | ||
|
|
afbbc9cd72 | ||
|
|
05bec13bdc | ||
|
|
8fc321ca62 | ||
|
|
6590ca02de | ||
|
|
20fc4ee021 | ||
|
|
a322254f2a | ||
|
|
fd7b668a16 | ||
|
|
5786fd2221 | ||
|
|
419b4ecfde | ||
|
|
69920fb717 | ||
|
|
863a979754 | ||
|
|
8d66fbccfa | ||
|
|
a4caaefd32 | ||
|
|
e50e687191 | ||
|
|
c96f121d41 | ||
|
|
72b7b19937 | ||
|
|
4e3d295c90 | ||
|
|
3b1554db2e | ||
|
|
37d07a7d2a | ||
|
|
75fbf21e6b | ||
|
|
27b61b1456 | ||
|
|
9f4f967ead | ||
|
|
9763c46b7e | ||
|
|
f682325924 | ||
|
|
abe362bdd4 | ||
|
|
ea331b043c | ||
|
|
1a4a921528 | ||
|
|
1982fc807f | ||
|
|
30fd17c58d | ||
|
|
4ebee195cc | ||
|
|
98eeff7538 | ||
|
|
f2fdc91ad5 | ||
|
|
d88c25c982 | ||
|
|
f70fd95361 | ||
|
|
be3a272a80 | ||
|
|
631eb4b2c2 | ||
|
|
6a1d1867f0 | ||
|
|
b3b566c907 | ||
|
|
dd5023e494 | ||
|
|
18bc12c21c | ||
|
|
1d4dc7e27c | ||
|
|
0d84c77c6c | ||
|
|
400eb748eb | ||
|
|
73b30de9cb | ||
|
|
7a8d0a03f6 | ||
|
|
d140620008 | ||
|
|
50a1e0c618 | ||
|
|
ef73880459 | ||
|
|
98f3242e73 | ||
|
|
0b7365e2db | ||
|
|
f88dc84091 | ||
|
|
3099562a21 | ||
|
|
588d22974c | ||
|
|
4c2bbe3c41 | ||
|
|
b634c08d0e | ||
|
|
2d9d4dfeb3 | ||
|
|
d882b3274b | ||
|
|
1aa48ddfaa | ||
|
|
ad02d5589d | ||
|
|
0e8991fec2 | ||
|
|
b651604e8b | ||
|
|
1932e72603 | ||
|
|
be4eb4eeb8 | ||
|
|
89fa36ce2a | ||
|
|
80df97e734 | ||
|
|
8dd7fab38d | ||
|
|
400d5790f3 | ||
|
|
c8e83d6edc | ||
|
|
c8b8c6cb14 | ||
|
|
44dcbeaaa4 | ||
|
|
0c23843b61 | ||
|
|
0a34b96e11 | ||
|
|
f30d2b489a | ||
|
|
81c740178d | ||
|
|
36b5f6acfe | ||
|
|
eae88b0815 | ||
|
|
58c9f516b3 | ||
|
|
8ce4814835 | ||
|
|
2656aeaf9c | ||
|
|
bf3ea2cd47 | ||
|
|
07cd0c870f | ||
|
|
2b1e672316 | ||
|
|
5adb41a0ed | ||
|
|
98fa996b3f | ||
|
|
07e890a79a | ||
|
|
3f9e39a9e3 | ||
|
|
b51bcba263 | ||
|
|
17d004d52b | ||
|
|
d94e61a7b6 |
2
.gitignore
vendored
2
.gitignore
vendored
@@ -27,6 +27,8 @@ custom/
|
|||||||
apps/
|
apps/
|
||||||
# default startpage
|
# default startpage
|
||||||
home.html
|
home.html
|
||||||
|
# page header plugin
|
||||||
|
pageheader.html
|
||||||
# Ignore site TOS
|
# Ignore site TOS
|
||||||
doc/SiteTOS.md
|
doc/SiteTOS.md
|
||||||
# themes except for redbasic
|
# themes except for redbasic
|
||||||
|
|||||||
155
.homeinstall/README.md
Normal file
155
.homeinstall/README.md
Normal file
@@ -0,0 +1,155 @@
|
|||||||
|
# Hubzilla at Home next to your Router
|
||||||
|
|
||||||
|
Run hubzilla-setup.sh for an unattended installation of hubzilla.
|
||||||
|
|
||||||
|
The script is known to work with Debian stable (Jessie).
|
||||||
|
|
||||||
|
# Step-by-Step Overwiew
|
||||||
|
|
||||||
|
## Preconditions
|
||||||
|
|
||||||
|
Hardware
|
||||||
|
|
||||||
|
+ Internet connection and router at home
|
||||||
|
+ Mini-pc connected to your router
|
||||||
|
+ USB drive for backups
|
||||||
|
|
||||||
|
Software
|
||||||
|
|
||||||
|
+ Fresh installation of Debian on your mini-pc
|
||||||
|
+ Router with open ports 80 and 443 for your Debian
|
||||||
|
|
||||||
|
## The basic steps
|
||||||
|
|
||||||
|
+ Register your own domain (for example at selfHOST) or a free subdomain (for example at freeDNS)
|
||||||
|
+ Clone hubzilla to /var/www/html
|
||||||
|
+ Copy hubzilla-config.txt and hubzilla-setup.sh to your Debian (future hub)
|
||||||
|
+ Edit hubzilla-config.txt. Enter your values there: db pass, domain, values for dyn DNS
|
||||||
|
+ Run hubzilla-setup.sh as root ... wait, wait, wait until the script is finised
|
||||||
|
+ Open your domain with a browser and step throught the initial configuration of hubzilla.
|
||||||
|
|
||||||
|
# Step-by-Step in Detail
|
||||||
|
|
||||||
|
## Preparations Hardware
|
||||||
|
|
||||||
|
### Mini-PC
|
||||||
|
|
||||||
|
### Recommended: USB Drive for Backups
|
||||||
|
|
||||||
|
The installation will create a daily backup.
|
||||||
|
|
||||||
|
If the backup process does not find an external device than the backup goes to
|
||||||
|
the internal disk.
|
||||||
|
|
||||||
|
The USB drive must be compatible with an encrpyted filesystem LUKS + ext4.
|
||||||
|
|
||||||
|
## Preparations Software
|
||||||
|
|
||||||
|
### Install Debian Linux on the Mini-PC
|
||||||
|
|
||||||
|
Download the stable Debian at https://www.debian.org/
|
||||||
|
|
||||||
|
Create bootable USB drive with Debian on it. You could use the programm
|
||||||
|
unetbootin, https://en.wikipedia.org/wiki/UNetbootin
|
||||||
|
|
||||||
|
Switch of your mini pc, plug in your USB drive and start the mini pc from the
|
||||||
|
stick. Install Debian. Follow the instructions of the installation.
|
||||||
|
|
||||||
|
### Configure your Router
|
||||||
|
|
||||||
|
Open the ports 80 and 443 on your router for your Debian
|
||||||
|
|
||||||
|
## Preparations Dynamic IP Address
|
||||||
|
|
||||||
|
Your Hubzilla must be reachable by a domain that you can type in your browser
|
||||||
|
|
||||||
|
cooldomain.org
|
||||||
|
|
||||||
|
You can use subdomains as well
|
||||||
|
|
||||||
|
my.cooldomain.org
|
||||||
|
|
||||||
|
There are two way to get a domain
|
||||||
|
|
||||||
|
- buy a domain (recommended) or
|
||||||
|
- register a free subdomain
|
||||||
|
|
||||||
|
### Method 1: Get yourself an own Domain (recommended)
|
||||||
|
|
||||||
|
### Method 2 Register a (free) Subdomain
|
||||||
|
|
||||||
|
Register a free subdomain for example at
|
||||||
|
|
||||||
|
- freeDNS
|
||||||
|
- selfHOST
|
||||||
|
|
||||||
|
WATCH THIS: A free subdomain is not the prefered way to get a domain name. Why?
|
||||||
|
|
||||||
|
Let's encrpyt issues a limited number of certificates each
|
||||||
|
day. Possibly other users of this domain will try to issue a certificate
|
||||||
|
at the same day as you do. So make sure you choose a domain with as less subdomains as
|
||||||
|
possible.
|
||||||
|
|
||||||
|
## Install Hubzilla on your Debian
|
||||||
|
|
||||||
|
Login to your debian
|
||||||
|
(Provided your username is "you" and the name of the mini pc is "debian". You
|
||||||
|
could take the IP address instead of "debian")
|
||||||
|
|
||||||
|
ssh -X you@debian
|
||||||
|
|
||||||
|
Change to root user
|
||||||
|
|
||||||
|
su -l
|
||||||
|
|
||||||
|
Install git
|
||||||
|
|
||||||
|
apt-get install git
|
||||||
|
|
||||||
|
Make the directory for apache and change diretory to it
|
||||||
|
|
||||||
|
mkdir /var/www
|
||||||
|
cd /var/www/
|
||||||
|
|
||||||
|
Clone hubzilla from git ("git pull" will update it later)
|
||||||
|
|
||||||
|
git clone https://github.com/redmatrix/hubzilla html
|
||||||
|
|
||||||
|
Change to the install script
|
||||||
|
|
||||||
|
cd html/.homeinstall/
|
||||||
|
|
||||||
|
Change the file "hubzilla-config.txt". Enter your values there.
|
||||||
|
|
||||||
|
nano hubzilla-config.txt
|
||||||
|
|
||||||
|
Run the script
|
||||||
|
|
||||||
|
./hubzilla-setup.sh
|
||||||
|
|
||||||
|
Wait... The script should not finish with an error message.
|
||||||
|
|
||||||
|
In a webbrowser open your domain.
|
||||||
|
Expected: A test page of hubzilla is shown. All checks there shoulg be
|
||||||
|
successfull. Go on...
|
||||||
|
Expected: A page for the Hubzilla server configuration shows up.
|
||||||
|
|
||||||
|
Leave db server name "127.0.0.1" and port "0" untouched.
|
||||||
|
|
||||||
|
Enter
|
||||||
|
|
||||||
|
- DB user name = hubzilla
|
||||||
|
- DB pass word = This is the password you entered in "hubzilla-config.txt"
|
||||||
|
- DB name = hubzilla
|
||||||
|
|
||||||
|
Leave db type "MySQL" untouched.
|
||||||
|
|
||||||
|
Follow the instructions in the next pages.
|
||||||
|
|
||||||
|
# The Script explained
|
||||||
|
|
||||||
|
This chapter shows you
|
||||||
|
|
||||||
|
- What the script does exactly
|
||||||
|
- Explanations on technical details. May be this will encourage you to play with bash scripts?
|
||||||
|
|
||||||
177
.homeinstall/hubzilla-config.txt.template
Normal file
177
.homeinstall/hubzilla-config.txt.template
Normal file
@@ -0,0 +1,177 @@
|
|||||||
|
###############################################
|
||||||
|
### MANDATORY - database password #############
|
||||||
|
#
|
||||||
|
# Please give your database password
|
||||||
|
# Example: db_pass=pass_word_with_no_blanks_in_it
|
||||||
|
# Example: db_pass="this password has blanks in it"
|
||||||
|
db_pass=
|
||||||
|
|
||||||
|
###############################################
|
||||||
|
### MANDATORY - let's encrypt #################
|
||||||
|
#
|
||||||
|
# Hubilla requires encrypted communication via secure HTTP (HTTPS).
|
||||||
|
# This script automates installation of an SSL certificate from
|
||||||
|
# Let's Encrypt (https://letsencrypt.org)
|
||||||
|
#
|
||||||
|
# Please give the domain name of your hub
|
||||||
|
#
|
||||||
|
# Example: my.cooldomain.org
|
||||||
|
# Example: cooldomain.org
|
||||||
|
#
|
||||||
|
# Email is optional
|
||||||
|
#
|
||||||
|
#
|
||||||
|
le_domain=
|
||||||
|
le_email=
|
||||||
|
|
||||||
|
###############################################
|
||||||
|
### OPTIONAL - selfHOST - dynamic IP address ##
|
||||||
|
#
|
||||||
|
# 1. Register a domain at selfhost.de
|
||||||
|
# - choose offer "DOMAIN dynamisch" 1,50€/mon at 08.01.2016
|
||||||
|
# 2. Get your configuration for dynamic IP update
|
||||||
|
# - Log in at selfhost.de
|
||||||
|
# - go to "DynDNS Accounte"
|
||||||
|
# - klick "Details" of your (freshly) registered domain
|
||||||
|
# - You will find the configuration there
|
||||||
|
# - Benutzername (user name) > use this for "selfhost_user="
|
||||||
|
# - Passwort (pass word) > use this for "selfhost_pass="
|
||||||
|
#
|
||||||
|
#
|
||||||
|
selfhost_user=
|
||||||
|
selfhost_pass=
|
||||||
|
|
||||||
|
###############################################
|
||||||
|
### OPTIONAL - FreeDNS - dynamic IP address ###
|
||||||
|
#
|
||||||
|
# Please give the alpha-numeric-key of freedns
|
||||||
|
#
|
||||||
|
# Get a free subdomain from freedns and use it for your dynamic ip address
|
||||||
|
# Documentation under http://www.techjawab.com/2013/06/setup-dynamic-dns-dyndns-for-free-on.html
|
||||||
|
#
|
||||||
|
# - Register for a Free domain at http://freedns.afraid.org/signup/
|
||||||
|
# - WATCH THIS: Make sure you choose a domain with as less subdomains as
|
||||||
|
# possible. Why? Let's encrpyt issues a limited count of certificates each
|
||||||
|
# day. Possible other users of this domain will try to issue a certificate
|
||||||
|
# at the same day.
|
||||||
|
# - Logon to FreeDNS (where you just registered)
|
||||||
|
# - Goto http://freedns.afraid.org/dynamic/
|
||||||
|
# - Right click on "Direct Link" and copy the URL and paste it somewhere.
|
||||||
|
# - You should notice a large and unique alpha-numeric key in the URL
|
||||||
|
#
|
||||||
|
# http://freedns.afraid.org/dynamic/update.php?alpha-numeric-key
|
||||||
|
#
|
||||||
|
# Provided your url from freedns is
|
||||||
|
#
|
||||||
|
# http://freedns.afraid.org/dynamic/update.php?U1Z6aGt2R0NzMFNPNWRjbWxxZGpsd093OjE1Mzg5NDE5
|
||||||
|
#
|
||||||
|
# Then you have to provide
|
||||||
|
#
|
||||||
|
# freedns_key=U1Z6aGt2R0NzMFNPNWRjbWxxZGpsd093OjE1Mzg5NDE5
|
||||||
|
#
|
||||||
|
#
|
||||||
|
#freedns_key=
|
||||||
|
|
||||||
|
|
||||||
|
###############################################
|
||||||
|
### OPTIONAL - Backup to external device ######
|
||||||
|
#
|
||||||
|
# The script can use an external device for the daily backup.
|
||||||
|
# The file system of the device (USB stick for example) must be compatible
|
||||||
|
# with encrypted LUKS + ext4
|
||||||
|
#
|
||||||
|
# You should test to mount the device befor you run the script
|
||||||
|
# (hubzilla-setup.sh).
|
||||||
|
# How to find your (pluged-in) devices?
|
||||||
|
#
|
||||||
|
# fdisk -l
|
||||||
|
#
|
||||||
|
# Provided your device was listed as is /dev/sdb1. You could check with:
|
||||||
|
#
|
||||||
|
# blkid | grep /dev/sdb1
|
||||||
|
#
|
||||||
|
# Try to decrypt
|
||||||
|
# (You might install cryptsetup befor using apt-get install.
|
||||||
|
#
|
||||||
|
# apt-get install cryptsetup
|
||||||
|
# cryptsetup luksOpen /dev/sdb1 cryptobackup
|
||||||
|
#
|
||||||
|
# Try to mount
|
||||||
|
# You might create the directory /media/hubzilla_backup it it does not exist
|
||||||
|
# using mkdir.
|
||||||
|
#
|
||||||
|
# mkdir /media/hubzilla_backup
|
||||||
|
# mount /dev/mapper/cryptobackup /media/hubzilla_backup
|
||||||
|
#
|
||||||
|
# Unmounting device goes like this
|
||||||
|
#
|
||||||
|
# umount /media/hubzilla_backup
|
||||||
|
# cryptsetup luksClose cryptobackup
|
||||||
|
#
|
||||||
|
# To check if still mounted
|
||||||
|
#
|
||||||
|
# lsof /media/hubzilla_backup
|
||||||
|
#
|
||||||
|
# If you leave the following parameters
|
||||||
|
# - "backup_device_name" and
|
||||||
|
# - "backup_device_pass"
|
||||||
|
# empty the script will create daily backups on the internal disk (which could
|
||||||
|
# save you as well).
|
||||||
|
#
|
||||||
|
# Example: backup_device_name=/dev/sdc1
|
||||||
|
#
|
||||||
|
backup_device_name=
|
||||||
|
backup_device_pass=
|
||||||
|
|
||||||
|
|
||||||
|
###############################################
|
||||||
|
### OPTIONAL - Owncloud - deprecated ##########
|
||||||
|
#
|
||||||
|
# To install owncloud: owncloud=y
|
||||||
|
# Leave empty if you don't want to install owncloud
|
||||||
|
#
|
||||||
|
#owncloud=
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
###############################################
|
||||||
|
### OPTIONAL - do not mess with things below ##
|
||||||
|
# (...if you are not certain)
|
||||||
|
#
|
||||||
|
# Usually you are done here
|
||||||
|
# Everything below is OPTIONAL
|
||||||
|
#
|
||||||
|
###############################################
|
||||||
|
#
|
||||||
|
# Database for hubzilla
|
||||||
|
hubzilla_db_name=hubzilla
|
||||||
|
hubzilla_db_user=hubzilla
|
||||||
|
hubzilla_db_pass=$db_pass
|
||||||
|
#
|
||||||
|
#
|
||||||
|
# Password for package mysql-server
|
||||||
|
# Example: mysqlpass=aberhallo
|
||||||
|
# Example: mysqlpass="aber hallo has blanks in it"
|
||||||
|
#
|
||||||
|
mysqlpass=$db_pass
|
||||||
|
|
||||||
|
# Password for package phpmyadmin
|
||||||
|
# Example: phpmyadminpass=aberhallo
|
||||||
|
# Example: phpmyadminpass="aber hallo has blanks in it"
|
||||||
|
phpmyadminpass=$db_pass
|
||||||
|
|
||||||
|
# TODO Prepare hubzilla for programmers
|
||||||
|
# - install eclipse and plugins
|
||||||
|
# - install xdebug to debug the php with eclipse
|
||||||
|
# - weaken permissions on /var/www/html
|
||||||
|
# - manual steps after this script
|
||||||
|
# * in eclipse: install plugins for php git hub
|
||||||
|
# * in eclipse: configure firefox (chrome,...) as browser to run with the php debuger
|
||||||
|
# * in eclipse: switch php debugger from zend to xdebug
|
||||||
|
# * in eclipse: add local hubzilla github repository
|
||||||
|
#
|
||||||
|
# Which user will use eclipse?
|
||||||
|
# Leave this empty if you do not want to prepare hubzilla for debugging
|
||||||
|
#
|
||||||
|
#developer_name=
|
||||||
|
|
||||||
865
.homeinstall/hubzilla-setup.sh
Executable file
865
.homeinstall/hubzilla-setup.sh
Executable file
@@ -0,0 +1,865 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
#
|
||||||
|
# How to use
|
||||||
|
# ----------
|
||||||
|
#
|
||||||
|
# This file automates the installation of hubzilla under Debian Linux
|
||||||
|
#
|
||||||
|
# 1) Copy the file "hubzilla-config.txt.template" to "hubzilla-config.txt"
|
||||||
|
# Follow the instuctions there
|
||||||
|
#
|
||||||
|
# 2) Switch to user "root" by typing "su -"
|
||||||
|
#
|
||||||
|
# 3) Run with "./hubzilla-setup.sh"
|
||||||
|
# If this fails check if you can execute the script.
|
||||||
|
# - To make it executable type "chmod +x hubzilla-setup.sh"
|
||||||
|
# - or run "bash hubzilla-setup.sh"
|
||||||
|
#
|
||||||
|
#
|
||||||
|
# What does this script do basically?
|
||||||
|
# -----------------------------------
|
||||||
|
#
|
||||||
|
# This file automates the installation of hubzilla under Debian Linux
|
||||||
|
# - install
|
||||||
|
# * apache webserer,
|
||||||
|
# * php,
|
||||||
|
# * mysql - the database for hubzilla,
|
||||||
|
# * phpmyadmin,
|
||||||
|
# * git to download and update hubzilla itself
|
||||||
|
# - download hubzilla core and addons
|
||||||
|
# - configure cron
|
||||||
|
# * "poller.php" for regular background prozesses of hubzilla
|
||||||
|
# * to_do "apt-get update" and "apt-get dist-upgrade" to keep linux
|
||||||
|
# up-to-date
|
||||||
|
# * to_do backup hubzillas database and files (rsnapshot)
|
||||||
|
# - configure dynamic ip with cron
|
||||||
|
# - to_do letsencrypt
|
||||||
|
# - to_do redirection to https
|
||||||
|
#
|
||||||
|
#
|
||||||
|
# Discussion
|
||||||
|
# ----------
|
||||||
|
#
|
||||||
|
# Security - password is the same for mysql-server, phpmyadmin and hubzilla db
|
||||||
|
# - The script runs into installation errors for phpmyadmin if it uses
|
||||||
|
# different passwords. For the sake of simplicity one singel password.
|
||||||
|
#
|
||||||
|
# Security - suhosin for PHP
|
||||||
|
# - The script does not install suhosin.
|
||||||
|
# - Is the security package suhosin usefull or not usefull?
|
||||||
|
#
|
||||||
|
# Hubzilla - email verification
|
||||||
|
# - The script switches off email verification off in all htconfig.tpl.
|
||||||
|
# Example: /var/www/html/view/en/htconfig.tpl
|
||||||
|
# - Is this a silly idea or not?
|
||||||
|
#
|
||||||
|
#
|
||||||
|
# Remove Hubzilla (for a fresh start using the script)
|
||||||
|
# ----------------------------------------------------
|
||||||
|
#
|
||||||
|
# You could use /var/www/hubzilla-remove.sh
|
||||||
|
# that is created by hubzilla-setup.sh.
|
||||||
|
#
|
||||||
|
# The script will remove (almost everything) what was installed by the script.
|
||||||
|
# After the removal you could run the script again to have a fresh install
|
||||||
|
# of all applications including hubzilla and its database.
|
||||||
|
#
|
||||||
|
# How to restore from backup
|
||||||
|
# --------------------------
|
||||||
|
#
|
||||||
|
# Daily backup
|
||||||
|
# - - - - - -
|
||||||
|
#
|
||||||
|
# The installation
|
||||||
|
# - writes a script /var/www/hubzilla-daily.sh
|
||||||
|
# - creates a daily cron that runs the hubzilla-daily.sh
|
||||||
|
#
|
||||||
|
# hubzilla-daily.sh makes a (daily) backup of all relevant files
|
||||||
|
# - /var/lib/mysql/ > hubzilla database
|
||||||
|
# - /var/www/html/ > hubzilla from github
|
||||||
|
# - /var/www/letsencrypt/ > certificates
|
||||||
|
#
|
||||||
|
# hubzilla-daily.sh writes the backup
|
||||||
|
# - either to an external disk compatible to LUKS+ext4 (see hubzilla-config.txt)
|
||||||
|
# - or to /var/cache/rsnapshot in case the external disk is not plugged in
|
||||||
|
#
|
||||||
|
# Restore backup
|
||||||
|
# - - - - - - -
|
||||||
|
#
|
||||||
|
# This was not tested yet.
|
||||||
|
# Bacically you can copy the files from the backup to the server.
|
||||||
|
#
|
||||||
|
# Credits
|
||||||
|
# -------
|
||||||
|
#
|
||||||
|
# The script is based on Thomas Willinghams script "debian-setup.sh"
|
||||||
|
# which he used to install the red#matrix.
|
||||||
|
#
|
||||||
|
# The script uses another script from https://github.com/lukas2511/letsencrypt.sh
|
||||||
|
#
|
||||||
|
# The documentation for bash is here
|
||||||
|
# https://www.gnu.org/software/bash/manual/bash.html
|
||||||
|
#
|
||||||
|
function check_sanity {
|
||||||
|
# Do some sanity checking.
|
||||||
|
print_info "Sanity check..."
|
||||||
|
if [ $(/usr/bin/id -u) != "0" ]
|
||||||
|
then
|
||||||
|
die 'Must be run by root user'
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ -f /etc/lsb-release ]
|
||||||
|
then
|
||||||
|
die "Distribution is not supported"
|
||||||
|
fi
|
||||||
|
if [ ! -f /etc/debian_version ]
|
||||||
|
then
|
||||||
|
die "Ubuntu is not supported"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
function check_config {
|
||||||
|
print_info "config check..."
|
||||||
|
# Check for required parameters
|
||||||
|
if [ -z "$db_pass" ]
|
||||||
|
then
|
||||||
|
die "db_pass not set in $configfile"
|
||||||
|
fi
|
||||||
|
if [ -z "$le_domain" ]
|
||||||
|
then
|
||||||
|
die "le_domain not set in $configfile"
|
||||||
|
fi
|
||||||
|
# backup is important and should be checked
|
||||||
|
if [ -n "$backup_device_name" ]
|
||||||
|
then
|
||||||
|
device_mounted=0
|
||||||
|
if fdisk -l | grep -i "$backup_device_name.*linux"
|
||||||
|
then
|
||||||
|
print_info "ok - filesystem of external device is linux"
|
||||||
|
if [ -n "$backup_device_pass" ]
|
||||||
|
then
|
||||||
|
echo "$backup_device_pass" | cryptsetup luksOpen $backup_device_name cryptobackup
|
||||||
|
if [ ! -d /media/hubzilla_backup ]
|
||||||
|
then
|
||||||
|
mkdir /media/hubzilla_backup
|
||||||
|
fi
|
||||||
|
if mount /dev/mapper/cryptobackup /media/hubzilla_backup
|
||||||
|
then
|
||||||
|
device_mounted=1
|
||||||
|
print_info "ok - could encrypt and mount external backup device"
|
||||||
|
umount /media/hubzilla_backup
|
||||||
|
else
|
||||||
|
print_warn "backup to external device will fail because encryption failed"
|
||||||
|
fi
|
||||||
|
cryptsetup luksClose cryptobackup
|
||||||
|
else
|
||||||
|
if mount $backup_device_name /media/hubzilla_backup
|
||||||
|
then
|
||||||
|
device_mounted=1
|
||||||
|
print_info "ok - could mount external backup device"
|
||||||
|
umount /media/hubzilla_backup
|
||||||
|
else
|
||||||
|
print_warn "backup to external device will fail because mount failed"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
print_warn "backup to external device will fail because filesystem is either not linux or 'backup_device_name' is not correct in $configfile"
|
||||||
|
fi
|
||||||
|
if [ $device_mounted == 0 ]
|
||||||
|
then
|
||||||
|
die "backup device not ready"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
function die {
|
||||||
|
echo "ERROR: $1" > /dev/null 1>&2
|
||||||
|
exit 1
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
function update_upgrade {
|
||||||
|
print_info "updated and upgrade..."
|
||||||
|
# Run through the apt-get update/upgrade first. This should be done before
|
||||||
|
# we try to install any package
|
||||||
|
apt-get -q -y update && apt-get -q -y dist-upgrade
|
||||||
|
print_info "updated and upgraded linux"
|
||||||
|
}
|
||||||
|
|
||||||
|
function check_install {
|
||||||
|
if [ -z "`which "$1" 2>/dev/null`" ]
|
||||||
|
then
|
||||||
|
# export DEBIAN_FRONTEND=noninteractive ... answers from the package
|
||||||
|
# configuration database
|
||||||
|
# - q ... without progress information
|
||||||
|
# - y ... answer interactive questions with "yes"
|
||||||
|
# DEBIAN_FRONTEND=noninteractive apt-get --no-install-recommends -q -y install $2
|
||||||
|
DEBIAN_FRONTEND=noninteractive apt-get -q -y install $2
|
||||||
|
print_info "installed $2 installed for $1"
|
||||||
|
else
|
||||||
|
print_warn "$2 already installed"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
function nocheck_install {
|
||||||
|
# export DEBIAN_FRONTEND=noninteractive ... answers from the package configuration database
|
||||||
|
# - q ... without progress information
|
||||||
|
# - y ... answer interactive questions with "yes"
|
||||||
|
# DEBIAN_FRONTEND=noninteractive apt-get --no-install-recommends -q -y install $2
|
||||||
|
# DEBIAN_FRONTEND=noninteractive apt-get --install-suggests -q -y install $1
|
||||||
|
DEBIAN_FRONTEND=noninteractive apt-get -q -y install $1
|
||||||
|
print_info "installed $1"
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
function print_info {
|
||||||
|
echo -n -e '\e[1;34m'
|
||||||
|
echo -n $1
|
||||||
|
echo -e '\e[0m'
|
||||||
|
}
|
||||||
|
|
||||||
|
function print_warn {
|
||||||
|
echo -n -e '\e[1;31m'
|
||||||
|
echo -n $1
|
||||||
|
echo -e '\e[0m'
|
||||||
|
}
|
||||||
|
|
||||||
|
function install_apache {
|
||||||
|
print_info "installing apache..."
|
||||||
|
nocheck_install "apache2 apache2-utils"
|
||||||
|
}
|
||||||
|
|
||||||
|
function install_curl {
|
||||||
|
print_info "installing curl..."
|
||||||
|
nocheck_install "curl"
|
||||||
|
}
|
||||||
|
|
||||||
|
function install_sendmail {
|
||||||
|
print_info "installing sendmail..."
|
||||||
|
nocheck_install "sendmail"
|
||||||
|
}
|
||||||
|
|
||||||
|
function install_php {
|
||||||
|
# openssl and mbstring are included in libapache2-mod-php5
|
||||||
|
# to_to: php5-suhosin
|
||||||
|
print_info "installing php..."
|
||||||
|
nocheck_install "libapache2-mod-php5 php5 php-pear php5-xcache php5-curl php5-mcrypt php5-gd"
|
||||||
|
php5enmod mcrypt
|
||||||
|
}
|
||||||
|
|
||||||
|
function install_mysql {
|
||||||
|
# http://www.microhowto.info/howto/perform_an_unattended_installation_of_a_debian_package.html
|
||||||
|
#
|
||||||
|
# To determine the required package name, key and type you can perform
|
||||||
|
# a trial installation then search the configuration database.
|
||||||
|
#
|
||||||
|
# debconf-get-selections | grep mysql-server
|
||||||
|
#
|
||||||
|
# The command debconf-get-selections is provided by the package
|
||||||
|
# debconf-utils, which you may need to install.
|
||||||
|
#
|
||||||
|
# apt-get install debconf-utils
|
||||||
|
#
|
||||||
|
# If you want to supply an answer to a configuration question but do not
|
||||||
|
# want to be prompted for it then this can be arranged by preseeding the
|
||||||
|
# DebConf database with the required information.
|
||||||
|
#
|
||||||
|
# echo mysql-server-5.5 mysql-server/root_password password xyzzy | debconf-set-selections
|
||||||
|
# echo mysql-server-5.5 mysql-server/root_password_again password xyzzy | debconf-set-selections
|
||||||
|
#
|
||||||
|
print_info "installing mysql..."
|
||||||
|
if [ -z "$mysqlpass" ]
|
||||||
|
then
|
||||||
|
die "mysqlpass not set in $configfile"
|
||||||
|
fi
|
||||||
|
echo mysql-server-5.5 mysql-server/root_password password $mysqlpass | debconf-set-selections
|
||||||
|
echo mysql-server-5.5 mysql-server/root_password_again password $mysqlpass | debconf-set-selections
|
||||||
|
nocheck_install "php5-mysql mysql-server mysql-client"
|
||||||
|
php5enmod mcrypt
|
||||||
|
}
|
||||||
|
|
||||||
|
function install_phpmyadmin {
|
||||||
|
print_info "installing phpmyadmin..."
|
||||||
|
if [ -z "$phpmyadminpass" ]
|
||||||
|
then
|
||||||
|
die "phpmyadminpass not set in $configfile"
|
||||||
|
fi
|
||||||
|
echo phpmyadmin phpmyadmin/setup-password password $phpmyadminpass | debconf-set-selections
|
||||||
|
echo phpmyadmin phpmyadmin/mysql/app-pass password $phpmyadminpass | debconf-set-selections
|
||||||
|
echo phpmyadmin phpmyadmin/app-password-confirm password $phpmyadminpass | debconf-set-selections
|
||||||
|
echo phpmyadmin phpmyadmin/mysql/admin-pass password $phpmyadminpass | debconf-set-selections
|
||||||
|
echo phpmyadmin phpmyadmin/password-confirm password $phpmyadminpass | debconf-set-selections
|
||||||
|
echo phpmyadmin phpmyadmin/reconfigure-webserver multiselect apache2 | debconf-set-selections
|
||||||
|
nocheck_install "phpmyadmin"
|
||||||
|
|
||||||
|
# It seems to be not neccessary to check rewrite.load because it comes
|
||||||
|
# with the installation. To be sure you could check this manually by:
|
||||||
|
#
|
||||||
|
# nano /etc/apache2/mods-available/rewrite.load
|
||||||
|
#
|
||||||
|
# You should find the content:
|
||||||
|
#
|
||||||
|
# LoadModule rewrite_module /usr/lib/apache2/modules/mod_rewrite.so
|
||||||
|
|
||||||
|
a2enmod rewrite
|
||||||
|
if [ ! -f /etc/apache2/apache2.conf ]
|
||||||
|
then
|
||||||
|
die "could not find file /etc/apache2/apache2.conf"
|
||||||
|
fi
|
||||||
|
sed -i \
|
||||||
|
"s/AllowOverride None/AllowOverride all/" \
|
||||||
|
/etc/apache2/apache2.conf
|
||||||
|
if [ -z "`grep 'Include /etc/phpmyadmin/apache.conf' /etc/apache2/apache2.conf`" ]
|
||||||
|
then
|
||||||
|
echo "Include /etc/phpmyadmin/apache.conf" >> /etc/apache2/apache2.conf
|
||||||
|
fi
|
||||||
|
service apache2 restart
|
||||||
|
}
|
||||||
|
|
||||||
|
function create_hubzilla_db {
|
||||||
|
print_info "creating hubzilla database..."
|
||||||
|
if [ -z "$hubzilla_db_name" ]
|
||||||
|
then
|
||||||
|
die "hubzilla_db_name not set in $configfile"
|
||||||
|
fi
|
||||||
|
if [ -z "$hubzilla_db_user" ]
|
||||||
|
then
|
||||||
|
die "hubzilla_db_user not set in $configfile"
|
||||||
|
fi
|
||||||
|
if [ -z "$hubzilla_db_pass" ]
|
||||||
|
then
|
||||||
|
die "hubzilla_db_pass not set in $configfile"
|
||||||
|
fi
|
||||||
|
Q1="CREATE DATABASE IF NOT EXISTS $hubzilla_db_name;"
|
||||||
|
Q2="GRANT USAGE ON *.* TO $hubzilla_db_user@localhost IDENTIFIED BY '$hubzilla_db_pass';"
|
||||||
|
Q3="GRANT ALL PRIVILEGES ON $hubzilla_db_name.* to $hubzilla_db_user@localhost identified by '$hubzilla_db_pass';"
|
||||||
|
Q4="FLUSH PRIVILEGES;"
|
||||||
|
SQL="${Q1}${Q2}${Q3}${Q4}"
|
||||||
|
mysql -uroot -p$phpmyadminpass -e "$SQL"
|
||||||
|
}
|
||||||
|
|
||||||
|
function run_freedns {
|
||||||
|
print_info "run freedns (dynamic IP)..."
|
||||||
|
if [ -z "$freedns_key" ]
|
||||||
|
then
|
||||||
|
print_info "freedns was not started because 'freedns_key' is empty in $configfile"
|
||||||
|
else
|
||||||
|
if [ -n "$selfhost_user" ]
|
||||||
|
then
|
||||||
|
die "You can not use freeDNS AND selfHOST for dynamic IP updates ('freedns_key' AND 'selfhost_user' set in $configfile)"
|
||||||
|
fi
|
||||||
|
wget --no-check-certificate -O - https://freedns.afraid.org/dynamic/update.php?$freedns_key
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
function install_run_selfhost {
|
||||||
|
print_info "install and start selfhost (dynamic IP)..."
|
||||||
|
if [ -z "$selfhost_user" ]
|
||||||
|
then
|
||||||
|
print_info "selfHOST was not started because 'selfhost_user' is empty in $configfile"
|
||||||
|
else
|
||||||
|
if [ -n "$freedns_key" ]
|
||||||
|
then
|
||||||
|
die "You can not use freeDNS AND selfHOST for dynamic IP updates ('freedns_key' AND 'selfhost_user' set in $configfile)"
|
||||||
|
fi
|
||||||
|
if [ -z "$selfhost_pass" ]
|
||||||
|
then
|
||||||
|
die "selfHOST was not started because 'selfhost_pass' is empty in $configfile"
|
||||||
|
fi
|
||||||
|
if [ ! -d $selfhostdir ]
|
||||||
|
then
|
||||||
|
mkdir $selfhostdir
|
||||||
|
fi
|
||||||
|
# the old way
|
||||||
|
# https://carol.selfhost.de/update?username=123456&password=supersafe
|
||||||
|
#
|
||||||
|
# the prefered way
|
||||||
|
wget --output-document=$selfhostdir/$selfhostscript http://jonaspasche.de/selfhost-updater
|
||||||
|
echo "router" > $selfhostdir/device
|
||||||
|
echo "$selfhost_user" > $selfhostdir/user
|
||||||
|
echo "$selfhost_pass" > $selfhostdir/pass
|
||||||
|
bash $selfhostdir/$selfhostscript update
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
function ping_domain {
|
||||||
|
print_info "ping domain $domain..."
|
||||||
|
# Is the domain resolved? Try to ping 6 times à 10 seconds
|
||||||
|
COUNTER=0
|
||||||
|
for i in {1..6}
|
||||||
|
do
|
||||||
|
print_info "loop $i for ping -c 1 $domain ..."
|
||||||
|
if ping -c 4 -W 1 $le_domain
|
||||||
|
then
|
||||||
|
print_info "$le_domain resolved"
|
||||||
|
break
|
||||||
|
else
|
||||||
|
if [ $i -gt 5 ]
|
||||||
|
then
|
||||||
|
die "Failed to: ping -c 1 $domain not resolved"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
sleep 10
|
||||||
|
done
|
||||||
|
sleep 5
|
||||||
|
}
|
||||||
|
|
||||||
|
function configure_cron_freedns {
|
||||||
|
print_info "configure cron for freedns..."
|
||||||
|
if [ -z "$freedns_key" ]
|
||||||
|
then
|
||||||
|
print_info "freedns is not configured because freedns_key is empty in $configfile"
|
||||||
|
else
|
||||||
|
# Use cron for dynamich ip update
|
||||||
|
# - at reboot
|
||||||
|
# - every 30 minutes
|
||||||
|
if [ -z "`grep 'freedns.afraid.org' /etc/crontab`" ]
|
||||||
|
then
|
||||||
|
echo "@reboot root https://freedns.afraid.org/dynamic/update.php?$freedns_key > /dev/null 2>&1" >> /etc/crontab
|
||||||
|
echo "*/30 * * * * root wget --no-check-certificate -O - https://freedns.afraid.org/dynamic/update.php?$freedns_key > /dev/null 2>&1" >> /etc/crontab
|
||||||
|
else
|
||||||
|
print_info "cron for freedns was configured already"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
function configure_cron_selfhost {
|
||||||
|
print_info "configure cron for selfhost..."
|
||||||
|
if [ -z "$selfhost_user" ]
|
||||||
|
then
|
||||||
|
print_info "freedns is not configured because freedns_key is empty in $configfile"
|
||||||
|
else
|
||||||
|
# Use cron for dynamich ip update
|
||||||
|
# - at reboot
|
||||||
|
# - every 30 minutes
|
||||||
|
if [ -z "`grep 'selfhost-updater.sh' /etc/crontab`" ]
|
||||||
|
then
|
||||||
|
echo "@reboot root bash /etc/selfhost/selfhost-updater.sh update > /dev/null 2>&1" >> /etc/crontab
|
||||||
|
echo "*/5 * * * * root /bin/bash /etc/selfhost/selfhost-updater.sh update > /dev/null 2>&1" >> /etc/crontab
|
||||||
|
else
|
||||||
|
print_info "cron for selfhost was configured already"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
function install_git {
|
||||||
|
print_info "installing git..."
|
||||||
|
nocheck_install "git"
|
||||||
|
}
|
||||||
|
|
||||||
|
function install_letsencrypt {
|
||||||
|
print_info "installing let's encrypt ..."
|
||||||
|
# check if user gave domain
|
||||||
|
if [ -z "$le_domain" ]
|
||||||
|
then
|
||||||
|
die "Failed to install let's encrypt: 'le_domain' is empty in $configfile"
|
||||||
|
fi
|
||||||
|
# configure apache
|
||||||
|
apache_le_conf=/etc/apache2/sites-available/le-default.conf
|
||||||
|
if [ -f $apache_le_conf ]
|
||||||
|
then
|
||||||
|
print_info "$apache_le_conf exist already"
|
||||||
|
else
|
||||||
|
cat > $apache_le_conf <<END
|
||||||
|
# letsencrypt default Apache configuration
|
||||||
|
Alias /.well-known/acme-challenge /var/www/letsencrypt
|
||||||
|
|
||||||
|
<Directory /var/www/letsencrypt>
|
||||||
|
Options FollowSymLinks
|
||||||
|
Allow from all
|
||||||
|
</Directory>
|
||||||
|
END
|
||||||
|
a2ensite le-default.conf
|
||||||
|
service apache2 restart
|
||||||
|
fi
|
||||||
|
# download the shell script
|
||||||
|
if [ -d $le_dir ]
|
||||||
|
then
|
||||||
|
print_info "letsenrypt exists already (nothing downloaded > no certificate created and registered)"
|
||||||
|
return 0
|
||||||
|
fi
|
||||||
|
git clone https://github.com/lukas2511/letsencrypt.sh $le_dir
|
||||||
|
cd $le_dir
|
||||||
|
# create config file for letsencrypt.sh
|
||||||
|
echo "WELLKNOWN=$le_dir" > $le_dir/config.sh
|
||||||
|
if [ -n "$le_email" ]
|
||||||
|
then
|
||||||
|
echo "CONTACT_EMAIL=$le_email" >> $le_dir/config.sh
|
||||||
|
fi
|
||||||
|
# create domain file for letsencrypt.sh
|
||||||
|
# WATCH THIS:
|
||||||
|
# - It did not work wit "sub.domain.org www.sub.domain.org".
|
||||||
|
# - So just use "sub.domain.org" only!
|
||||||
|
echo "$le_domain" > $le_dir/domains.txt
|
||||||
|
# test apache config for letsencrpyt
|
||||||
|
url_http=http://$le_domain/.well-known/acme-challenge/domains.txt
|
||||||
|
wget_output=$(wget -nv --spider --max-redirect 0 $url_http)
|
||||||
|
if [ $? -ne 0 ]
|
||||||
|
then
|
||||||
|
die "Failed to load $url_http"
|
||||||
|
fi
|
||||||
|
# run letsencrypt.sh
|
||||||
|
#
|
||||||
|
./letsencrypt.sh --cron
|
||||||
|
}
|
||||||
|
|
||||||
|
function configure_apache_for_https {
|
||||||
|
print_info "configuring apache to use httpS ..."
|
||||||
|
# letsencrypt.sh
|
||||||
|
#
|
||||||
|
# "${BASEDIR}/certs/${domain}/privkey.pem"
|
||||||
|
# "${BASEDIR}/certs/${domain}/cert.pem"
|
||||||
|
# "${BASEDIR}/certs/${domain}/fullchain.pem"
|
||||||
|
#
|
||||||
|
SSLCertificateFile=${le_dir}/certs/${le_domain}/cert.pem
|
||||||
|
SSLCertificateKeyFile=${le_dir}/certs/${le_domain}/privkey.pem
|
||||||
|
SSLCertificateChainFile=${le_dir}/certs/${le_domain}/fullchain.pem
|
||||||
|
if [ ! -f $SSLCertificateFile ]
|
||||||
|
then
|
||||||
|
print_warn "Failed to configure apache for httpS: Missing certificate file $SSLCertificateFile"
|
||||||
|
return 0
|
||||||
|
fi
|
||||||
|
# make sure that the ssl mode is enabled
|
||||||
|
print_info "...configuring apache to use httpS - a2enmod ssl ..."
|
||||||
|
a2enmod ssl
|
||||||
|
# modify apach' ssl conf file
|
||||||
|
if grep -i "ServerName" $sslconf
|
||||||
|
then
|
||||||
|
print_info "seems that apache was already configered to use httpS with $sslconf"
|
||||||
|
else
|
||||||
|
sed -i "s/ServerAdmin.*$/ServerAdmin webmaster@localhost\\n ServerName ${le_domain}/" $sslconf
|
||||||
|
fi
|
||||||
|
sed -i s#/etc/ssl/certs/ssl-cert-snakeoil.pem#$SSLCertificateFile# $sslconf
|
||||||
|
sed -i s#/etc/ssl/private/ssl-cert-snakeoil.key#$SSLCertificateKeyFile# $sslconf
|
||||||
|
sed -i s#/etc/apache2/ssl.crt/server-ca.crt#$SSLCertificateChainFile# $sslconf
|
||||||
|
sed -i s/#SSLCertificateChainFile/SSLCertificateChainFile/ $sslconf
|
||||||
|
# apply changes
|
||||||
|
a2ensite default-ssl.conf
|
||||||
|
service apache2 restart
|
||||||
|
}
|
||||||
|
|
||||||
|
function check_https {
|
||||||
|
print_info "checking httpS > testing ..."
|
||||||
|
url_https=https://$le_domain
|
||||||
|
wget_output=$(wget -nv --spider --max-redirect 0 $url_https)
|
||||||
|
if [ $? -ne 0 ]
|
||||||
|
then
|
||||||
|
print_warn "check not ok"
|
||||||
|
else
|
||||||
|
print_info "check ok"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
function install_hubzilla {
|
||||||
|
print_info "installing hubzilla..."
|
||||||
|
# rm -R /var/www/html/ # for "stand alone" usage
|
||||||
|
cd /var/www/
|
||||||
|
# git clone https://github.com/redmatrix/hubzilla html # for "stand alone" usage
|
||||||
|
cd html/
|
||||||
|
git clone https://github.com/redmatrix/hubzilla-addons addon
|
||||||
|
mkdir -p "store/[data]/smarty3"
|
||||||
|
chmod -R 777 store
|
||||||
|
touch .htconfig.php
|
||||||
|
chmod ou+w .htconfig.php
|
||||||
|
cd ..
|
||||||
|
chown -R www-data:www-data html
|
||||||
|
chown root:www-data /var/www/html/
|
||||||
|
chown root:www-data /var/www/html/.htaccess
|
||||||
|
chmod 0644 /var/www/html/.htaccess
|
||||||
|
# try to switch off email registration
|
||||||
|
sed -i "s/verify_email.*1/verify_email'] = 0/" /var/www/html/view/*/ht*
|
||||||
|
if [ -n "`grep -r 'verify_email.*1' /var/www/html/view/`" ]
|
||||||
|
then
|
||||||
|
print_warn "Hubzillas registration prozess might have email verification switched on."
|
||||||
|
fi
|
||||||
|
print_info "installed hubzilla"
|
||||||
|
}
|
||||||
|
|
||||||
|
function rewrite_to_https {
|
||||||
|
print_info "configuring apache to redirect http to httpS ..."
|
||||||
|
htaccessfile=/var/www/html/.htaccess
|
||||||
|
if grep -i "https" $htaccessfile
|
||||||
|
then
|
||||||
|
print_info "...configuring apache to redirect http to httpS was already done in $htaccessfile"
|
||||||
|
else
|
||||||
|
sed -i "s#QSA]#QSA]\\n RewriteCond %{SERVER_PORT} !^443$\\n RewriteRule (.*) https://%{HTTP_HOST}/$1 [R=301,L]#" $htaccessfile
|
||||||
|
fi
|
||||||
|
service apache2 restart
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
function install_owncloud {
|
||||||
|
if [ -z "$owncloud" ]
|
||||||
|
then
|
||||||
|
print_info "Do not install owncloud"
|
||||||
|
return 0
|
||||||
|
fi
|
||||||
|
if [ -f /etc/apt/sources.list.d/owncloud.list ]
|
||||||
|
then
|
||||||
|
print_info "owncloud is already installed and is left untouched"
|
||||||
|
return 0
|
||||||
|
fi
|
||||||
|
print_info "installing owncloud..."
|
||||||
|
# add the repository key to apt
|
||||||
|
wget -nv https://download.owncloud.org/download/repositories/stable/Debian_8.0/Release.key -O Release.key
|
||||||
|
apt-key add - < Release.key
|
||||||
|
# add the repository and install from there
|
||||||
|
sh -c "echo 'deb http://download.owncloud.org/download/repositories/stable/Debian_8.0/ /' >> /etc/apt/sources.list.d/owncloud.list"
|
||||||
|
apt-get update
|
||||||
|
nocheck_install "owncloud"
|
||||||
|
chown -R www-data:www-data /var/www/owncloud/
|
||||||
|
# set strong permissions
|
||||||
|
ocpath='/var/www/owncloud'
|
||||||
|
htuser='www-data'
|
||||||
|
htgroup='www-data'
|
||||||
|
rootuser='root' # On QNAP this is admin
|
||||||
|
find ${ocpath}/ -type f -print0 | xargs -0 chmod 0640
|
||||||
|
find ${ocpath}/ -type d -print0 | xargs -0 chmod 0750
|
||||||
|
chown -R ${rootuser}:${htgroup} ${ocpath}/
|
||||||
|
chown -R ${htuser}:${htgroup} ${ocpath}/apps/
|
||||||
|
chown -R ${htuser}:${htgroup} ${ocpath}/config/
|
||||||
|
chown -R ${htuser}:${htgroup} ${ocpath}/data/
|
||||||
|
chown -R ${htuser}:${htgroup} ${ocpath}/themes/
|
||||||
|
chown ${rootuser}:${htgroup} ${ocpath}/.htaccess
|
||||||
|
chown ${rootuser}:${htgroup} ${ocpath}/data/.htaccess
|
||||||
|
chmod 0644 ${ocpath}/.htaccess
|
||||||
|
chmod 0644 ${ocpath}/data/.htaccess
|
||||||
|
}
|
||||||
|
|
||||||
|
# This will allways overwrite both config files
|
||||||
|
# - internal disk
|
||||||
|
# - external disk (LUKS + ext4)
|
||||||
|
# of rsnapshot for hubzilla
|
||||||
|
function install_rsnapshot {
|
||||||
|
print_info "installing rsnapshot..."
|
||||||
|
nocheck_install "rsnapshot"
|
||||||
|
# internal disk
|
||||||
|
cp -f /etc/rsnapshot.conf $snapshotconfig
|
||||||
|
sed -i "/hourly/s/retain/#retain/" $snapshotconfig
|
||||||
|
sed -i "/monthly/s/#retain/retain/" $snapshotconfig
|
||||||
|
sed -i "s/^cmd_cp/#cmd_cp/" $snapshotconfig
|
||||||
|
sed -i "s/^backup/#backup/" $snapshotconfig
|
||||||
|
if [ -z "`grep 'letsencrypt' $snapshotconfig`" ]
|
||||||
|
then
|
||||||
|
echo "backup /var/lib/mysql/ localhost/" >> $snapshotconfig
|
||||||
|
echo "backup /var/www/html/ localhost/" >> $snapshotconfig
|
||||||
|
echo "backup /var/www/letsencrypt/ localhost/" >> $snapshotconfig
|
||||||
|
fi
|
||||||
|
# external disk
|
||||||
|
if [ -n "$backup_device_name" ] && [ -n "$backup_device_pass" ]
|
||||||
|
then
|
||||||
|
cp -f /etc/rsnapshot.conf $snapshotconfig_external_device
|
||||||
|
sed -i "s#snapshot_root.*#snapshot_root $backup_mount_point#" $snapshotconfig_external_device
|
||||||
|
sed -i "/hourly/s/retain/#retain/" $snapshotconfig_external_device
|
||||||
|
sed -i "/monthly/s/#retain/retain/" $snapshotconfig_external_device
|
||||||
|
sed -i "s/^cmd_cp/#cmd_cp/" $snapshotconfig_external_device
|
||||||
|
sed -i "s/^backup/#backup/" $snapshotconfig_external_device
|
||||||
|
if [ -z "`grep 'letsencrypt' $snapshotconfig_external_device`" ]
|
||||||
|
then
|
||||||
|
echo "backup /var/lib/mysql/ localhost/" >> $snapshotconfig_external_device
|
||||||
|
echo "backup /var/www/html/ localhost/" >> $snapshotconfig_external_device
|
||||||
|
echo "backup /var/www/letsencrypt/ localhost/" >> $snapshotconfig_external_device
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
print_info "No backup configuration (rsnapshot) for external device configured. Reason: backup_device_name and/or backup_device_pass not given in $configfile"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
function install_cryptosetup {
|
||||||
|
print_info "installing cryptsetup..."
|
||||||
|
nocheck_install "cryptsetup"
|
||||||
|
}
|
||||||
|
|
||||||
|
function configure_cron_daily {
|
||||||
|
print_info "configuring cron..."
|
||||||
|
# every 10 min for poller.php
|
||||||
|
if [ -z "`grep 'poller.php' /etc/crontab`" ]
|
||||||
|
then
|
||||||
|
echo "*/10 * * * * www-data cd /var/www/html; php include/poller.php >> /dev/null 2>&1" >> /etc/crontab
|
||||||
|
fi
|
||||||
|
# Run external script daily at 05:30
|
||||||
|
# - stop apache and mysql-server
|
||||||
|
# - backup hubzilla
|
||||||
|
# - update hubzilla core and addon
|
||||||
|
# - update and upgrade linux
|
||||||
|
# - reboot
|
||||||
|
echo "#!/bin/sh" > /var/www/$hubzilladaily
|
||||||
|
echo "#" >> /var/www/$hubzilladaily
|
||||||
|
echo "echo \" \"" >> /var/www/$hubzilladaily
|
||||||
|
echo "echo \"+++ \$(date) +++\"" >> /var/www/$hubzilladaily
|
||||||
|
echo "echo \" \"" >> /var/www/$hubzilladaily
|
||||||
|
echo "echo \"\$(date) - renew certificat if 30 days old...\"" >> /var/www/$hubzilladaily
|
||||||
|
echo "bash /var/www/letsencrypt/letsencrypt.sh --cron" >> /var/www/$hubzilladaily
|
||||||
|
echo "#" >> /var/www/$hubzilladaily
|
||||||
|
echo "# stop hubzilla" >> /var/www/$hubzilladaily
|
||||||
|
echo "echo \"\$(date) - stoping apaache and mysql...\"" >> /var/www/$hubzilladaily
|
||||||
|
echo "service apache2 stop" >> /var/www/$hubzilladaily
|
||||||
|
echo "/etc/init.d/mysql stop # to avoid inconsistancies" >> /var/www/$hubzilladaily
|
||||||
|
echo "#" >> /var/www/$hubzilladaily
|
||||||
|
echo "# backup" >> /var/www/$hubzilladaily
|
||||||
|
echo "echo \"\$(date) - try to mount external device for backup...\"" >> /var/www/$hubzilladaily
|
||||||
|
echo "backup_device_name=$backup_device_name" >> /var/www/$hubzilladaily
|
||||||
|
echo "backup_device_pass=$backup_device_pass" >> /var/www/$hubzilladaily
|
||||||
|
echo "backup_mount_point=$backup_mount_point" >> /var/www/$hubzilladaily
|
||||||
|
echo "device_mounted=0" >> /var/www/$hubzilladaily
|
||||||
|
echo "if [ -n \"$backup_device_name\" ]" >> /var/www/$hubzilladaily
|
||||||
|
echo "then" >> /var/www/$hubzilladaily
|
||||||
|
echo " if blkid | grep $backup_device_name" >> /var/www/$hubzilladaily
|
||||||
|
echo " then" >> /var/www/$hubzilladaily
|
||||||
|
if [ -n "$backup_device_pass" ]
|
||||||
|
then
|
||||||
|
echo " echo \"decrypting backup device...\"" >> /var/www/$hubzilladaily
|
||||||
|
echo " echo "\"$backup_device_pass\"" | cryptsetup luksOpen $backup_device_name cryptobackup" >> /var/www/$hubzilladaily
|
||||||
|
fi
|
||||||
|
echo " if [ ! -d $backup_mount_point ]" >> /var/www/$hubzilladaily
|
||||||
|
echo " then" >> /var/www/$hubzilladaily
|
||||||
|
echo " mkdir $backup_mount_point" >> /var/www/$hubzilladaily
|
||||||
|
echo " fi" >> /var/www/$hubzilladaily
|
||||||
|
echo " echo \"mounting backup device...\"" >> /var/www/$hubzilladaily
|
||||||
|
if [ -n "$backup_device_pass" ]
|
||||||
|
then
|
||||||
|
echo " if mount /dev/mapper/cryptobackup $backup_mount_point" >> /var/www/$hubzilladaily
|
||||||
|
else
|
||||||
|
echo " if mount $backup_device_name $backup_mount_point" >> /var/www/$hubzilladaily
|
||||||
|
fi
|
||||||
|
echo " then" >> /var/www/$hubzilladaily
|
||||||
|
echo " device_mounted=1" >> /var/www/$hubzilladaily
|
||||||
|
echo " echo \"device $backup_device_name is now mounted. Starting backup...\"" >> /var/www/$hubzilladaily
|
||||||
|
echo " rsnapshot -c $snapshotconfig_external_device daily" >> /var/www/$hubzilladaily
|
||||||
|
echo " rsnapshot -c $snapshotconfig_external_device weekly" >> /var/www/$hubzilladaily
|
||||||
|
echo " rsnapshot -c $snapshotconfig_external_device monthly" >> /var/www/$hubzilladaily
|
||||||
|
echo " echo \"\$(date) - disk sizes...\"" >> /var/www/$hubzilladaily
|
||||||
|
echo " df -h" >> /var/www/$hubzilladaily
|
||||||
|
echo " echo \"\$(date) - db size...\"" >> /var/www/$hubzilladaily
|
||||||
|
echo " du -h $backup_mount_point | grep mysql/hubzilla" >> /var/www/$hubzilladaily
|
||||||
|
echo " echo \"unmounting backup device...\"" >> /var/www/$hubzilladaily
|
||||||
|
echo " umount $backup_mount_point" >> /var/www/$hubzilladaily
|
||||||
|
echo " else" >> /var/www/$hubzilladaily
|
||||||
|
echo " echo \"failed to mount device $backup_device_name\"" >> /var/www/$hubzilladaily
|
||||||
|
echo " fi" >> /var/www/$hubzilladaily
|
||||||
|
if [ -n "$backup_device_pass" ]
|
||||||
|
then
|
||||||
|
echo " echo \"closing decrypted backup device...\"" >> /var/www/$hubzilladaily
|
||||||
|
echo " cryptsetup luksClose cryptobackup" >> /var/www/$hubzilladaily
|
||||||
|
fi
|
||||||
|
echo " fi" >> /var/www/$hubzilladaily
|
||||||
|
echo "fi" >> /var/www/$hubzilladaily
|
||||||
|
echo "if [ \$device_mounted == 0 ]" >> /var/www/$hubzilladaily
|
||||||
|
echo "then" >> /var/www/$hubzilladaily
|
||||||
|
echo " echo \"device could not be mounted $backup_device_name. Using internal disk for backup...\"" >> /var/www/$hubzilladaily
|
||||||
|
echo " rsnapshot -c $snapshotconfig daily" >> /var/www/$hubzilladaily
|
||||||
|
echo " rsnapshot -c $snapshotconfig weekly" >> /var/www/$hubzilladaily
|
||||||
|
echo " rsnapshot -c $snapshotconfig monthly" >> /var/www/$hubzilladaily
|
||||||
|
echo "fi" >> /var/www/$hubzilladaily
|
||||||
|
echo "#" >> /var/www/$hubzilladaily
|
||||||
|
echo "echo \"\$(date) - db size...\"" >> /var/www/$hubzilladaily
|
||||||
|
echo "du -h /var/cache/rsnapshot/ | grep mysql/hubzilla" >> /var/www/$hubzilladaily
|
||||||
|
echo "#" >> /var/www/$hubzilladaily
|
||||||
|
echo "# update" >> /var/www/$hubzilladaily
|
||||||
|
echo "echo \"\$(date) - updating letsencrypt.sh...\"" >> /var/www/$hubzilladaily
|
||||||
|
echo "git -C /var/www/letsencrypt/ pull" >> /var/www/$hubzilladaily
|
||||||
|
echo "echo \"\$(date) - updating hubhilla core...\"" >> /var/www/$hubzilladaily
|
||||||
|
echo "git -C /var/www/html/ pull" >> /var/www/$hubzilladaily
|
||||||
|
echo "echo \"\$(date) - updating hubhilla addons...\"" >> /var/www/$hubzilladaily
|
||||||
|
echo "git -C /var/www/html/addon/ pull" >> /var/www/$hubzilladaily
|
||||||
|
echo "chown -R www-data:www-data /var/www/html/ # make all accessable for the webserver" >> /var/www/$hubzilladaily
|
||||||
|
echo "chown root:www-data /var/www/html/.htaccess" >> /var/www/$hubzilladaily
|
||||||
|
echo "chmod 0644 /var/www/html/.htaccess # www-data can read but not write it" >> /var/www/$hubzilladaily
|
||||||
|
echo "echo \"\$(date) - updating linux...\"" >> /var/www/$hubzilladaily
|
||||||
|
echo "apt-get -q -y update && apt-get -q -y dist-upgrade # update linux and upgrade" >> /var/www/$hubzilladaily
|
||||||
|
echo "echo \"\$(date) - Backup hubzilla and update linux finished. Rebooting...\"" >> /var/www/$hubzilladaily
|
||||||
|
echo "#" >> /var/www/$hubzilladaily
|
||||||
|
echo "reboot" >> /var/www/$hubzilladaily
|
||||||
|
|
||||||
|
if [ -z "`grep 'hubzilla-daily.sh' /etc/crontab`" ]
|
||||||
|
then
|
||||||
|
echo "30 05 * * * root /bin/bash /var/www/$hubzilladaily >> /var/www/html/hubzilla-daily.log 2>&1" >> /etc/crontab
|
||||||
|
echo "0 0 1 * * root rm /var/www/html/hubzilla-daily.log" >> /etc/crontab
|
||||||
|
fi
|
||||||
|
|
||||||
|
# This is active after either "reboot" or "/etc/init.d/cron reload"
|
||||||
|
print_info "configured cron for updates/upgrades"
|
||||||
|
}
|
||||||
|
|
||||||
|
function write_uninstall_script {
|
||||||
|
print_info "writing uninstall script..."
|
||||||
|
|
||||||
|
cat > /var/www/hubzilla-remove.sh <<END
|
||||||
|
#!/bin/sh
|
||||||
|
#
|
||||||
|
# This script removes Hubzilla.
|
||||||
|
# You might do this for a fresh start using the script.
|
||||||
|
# The script will remove (almost everything) what was installed by the script,
|
||||||
|
# all applications including hubzilla and its database.
|
||||||
|
#
|
||||||
|
# Backup the certificates of letsencrypt (you never know)
|
||||||
|
cp -a /var/www/letsencrypt/ ~/backup_le_certificats
|
||||||
|
#
|
||||||
|
# Removal
|
||||||
|
apt-get remove apache2 apache2-utils libapache2-mod-php5 php5 php-pear php5-xcache php5-curl php5-mcrypt php5-gd php5-mysql mysql-server mysql-client phpmyadmin
|
||||||
|
apt-get purge apache2 apache2-utils libapache2-mod-php5 php5 php-pear php5-xcache php5-curl php5-mcrypt php5-gd php5-mysql mysql-server mysql-client phpmyadmin
|
||||||
|
apt-get autoremove
|
||||||
|
apt-get clean
|
||||||
|
rm /etc/rsnapshot_hubzilla.conf
|
||||||
|
rm /etc/rsnapshot_hubzilla_external_device.conf
|
||||||
|
rm -R /etc/apache2/
|
||||||
|
rm -R /var/lib/mysql/
|
||||||
|
rm -R /var/www
|
||||||
|
rm -R /etc/selfhost/
|
||||||
|
# uncomment the next line if you want to remove the backups
|
||||||
|
# rm -R /var/cache/rsnapshot
|
||||||
|
nano /etc/crontab # remove entries there manually
|
||||||
|
END
|
||||||
|
chmod -x /var/www/hubzilla-remove.sh
|
||||||
|
}
|
||||||
|
|
||||||
|
########################################################################
|
||||||
|
# START OF PROGRAM
|
||||||
|
########################################################################
|
||||||
|
export PATH=/bin:/usr/bin:/sbin:/usr/sbin
|
||||||
|
|
||||||
|
check_sanity
|
||||||
|
|
||||||
|
# Read config file edited by user
|
||||||
|
configfile=hubzilla-config.txt
|
||||||
|
source $configfile
|
||||||
|
|
||||||
|
selfhostdir=/etc/selfhost
|
||||||
|
selfhostscript=selfhost-updater.sh
|
||||||
|
hubzilladaily=hubzilla-daily.sh
|
||||||
|
snapshotconfig=/etc/rsnapshot_hubzilla.conf
|
||||||
|
snapshotconfig_external_device=/etc/rsnapshot_hubzilla_external_device.conf
|
||||||
|
backup_mount_point=/media/hubzilla_backup
|
||||||
|
le_dir=/var/www/letsencrypt
|
||||||
|
sslconf=/etc/apache2/sites-available/default-ssl.conf
|
||||||
|
|
||||||
|
#set -x # activate debugging from here
|
||||||
|
|
||||||
|
check_config
|
||||||
|
update_upgrade
|
||||||
|
install_curl
|
||||||
|
install_sendmail
|
||||||
|
install_apache
|
||||||
|
install_php
|
||||||
|
install_mysql
|
||||||
|
install_phpmyadmin
|
||||||
|
create_hubzilla_db
|
||||||
|
run_freedns
|
||||||
|
install_run_selfhost
|
||||||
|
ping_domain
|
||||||
|
configure_cron_freedns
|
||||||
|
configure_cron_selfhost
|
||||||
|
install_git
|
||||||
|
install_letsencrypt
|
||||||
|
configure_apache_for_https
|
||||||
|
check_https
|
||||||
|
install_hubzilla
|
||||||
|
rewrite_to_https
|
||||||
|
# install_owncloud # deprecated
|
||||||
|
install_rsnapshot
|
||||||
|
configure_cron_daily
|
||||||
|
install_cryptosetup
|
||||||
|
write_uninstall_script
|
||||||
|
|
||||||
|
#set +x # stop debugging from here
|
||||||
|
|
||||||
@@ -24,7 +24,11 @@ AddType audio/ogg .oga
|
|||||||
# Also place auth information into REMOTE_USER for sites running
|
# Also place auth information into REMOTE_USER for sites running
|
||||||
# in CGI mode.
|
# in CGI mode.
|
||||||
|
|
||||||
|
RewriteCond %{REQUEST_URI} ^/\.well\-known/.*
|
||||||
|
RewriteRule ^(.*)$ index.php?q=$1 [E=REMOTE_USER:%{HTTP:Authorization},L,QSA]
|
||||||
|
|
||||||
RewriteCond %{REQUEST_FILENAME} !-f
|
RewriteCond %{REQUEST_FILENAME} !-f
|
||||||
RewriteCond %{REQUEST_FILENAME} !-d
|
RewriteCond %{REQUEST_FILENAME} !-d
|
||||||
RewriteRule ^(.*)$ index.php?q=$1 [E=REMOTE_USER:%{HTTP:Authorization},L,QSA]
|
RewriteRule ^(.*)$ index.php?q=$1 [E=REMOTE_USER:%{HTTP:Authorization},L,QSA]
|
||||||
</IfModule>
|
</IfModule>
|
||||||
|
|
||||||
|
|||||||
94
.openshift/README.md
Normal file
94
.openshift/README.md
Normal file
@@ -0,0 +1,94 @@
|
|||||||
|
#Hubzilla on OpenShift
|
||||||
|
You will notice a new .openshift folder when you fetch from upstream, i.e. from https://github.com/redmatrix/hubzilla.git , which contains a deploy script to set up Hubzilla on OpenShift.
|
||||||
|
|
||||||
|
Create an account on OpenShift, then use the registration e-mail and password to create your first Hubzilla instance. Install git and RedHat's command line tools - rhc - if you have not already done so.
|
||||||
|
|
||||||
|
```
|
||||||
|
rhc app-create your_app_name php-5.4 mysql-5.5 cron phpmyadmin --namespace your_domain --from-code https://github.com/redmatrix/hubzilla.git -l your@email.address -p your_account_password
|
||||||
|
```
|
||||||
|
|
||||||
|
Make a note of the database username and password OpenShift creates for your instance, and use these at https://your_app_name-your_domain.rhcloud.com/ to complete the setup.
|
||||||
|
|
||||||
|
NOTE: PostgreSQL is NOT supported by the deploy script yet.
|
||||||
|
|
||||||
|
Update
|
||||||
|
To update, consider your own workflow first. I have forked Hubzilla code into my GitHub account to be able to try things out, this remote repo is called origin. Here is how I fetch new code from upstream, merge into my local repo, then push the updated code both into origin and the remote repo called openshift.
|
||||||
|
|
||||||
|
```
|
||||||
|
git fetch upstream;git checkout master;git merge upstream/master;git push origin;git push openshift HEAD
|
||||||
|
```
|
||||||
|
|
||||||
|
##Administration
|
||||||
|
Symptoms of need for MySQL database administration are:
|
||||||
|
- you can visit your domain and see the Hubzilla frontpage, but trying to login throws you back to login. This can mean your session table is marked as crashed.
|
||||||
|
- you can login, but your channel posts are not visible. This can mean your item table is marked as crashed.
|
||||||
|
- you can login and you can see your channel posts, but apparently nobody is getting your posts, comments, likes and so on. This can mean your outq table is marked as crashed.
|
||||||
|
|
||||||
|
You can check your OpenShift logs by doing
|
||||||
|
|
||||||
|
```
|
||||||
|
rhc tail -a your_app_name -n your_domain -l your@email.address -p your_account_password
|
||||||
|
```
|
||||||
|
|
||||||
|
and you might be able to confirm the above suspicions about crashed tables, or other problems you need to fix.
|
||||||
|
|
||||||
|
###How to fix crashed tables in MySQL
|
||||||
|
Using MySQL and the MyISAM database engine can result in table indexes coming out of sync, and you have at least two options for fixing tables marked as crashed.
|
||||||
|
- Use the database username and password OpenShift creates for your instance at https://your_app_name-your_domain.rhcloud.com/phpmyadmin/ to login via the web into your phpMyAdmin web interface, click your database in the left column, in the right column scroll down to the bottom of the list of tables and click the checkbox for marking all tables, then select Check tables from the drop down menu. This will check the tables for problems, and you can then checkmark only those tables with problems, and select Repair table from the same drop down menu at the bottom.
|
||||||
|
- You can login to your instance with SSH - see OpenShift for details - then
|
||||||
|
|
||||||
|
```
|
||||||
|
cd mysql/data/your_database
|
||||||
|
myisamchk -r *.MYI
|
||||||
|
```
|
||||||
|
|
||||||
|
or if you get
|
||||||
|
|
||||||
|
```
|
||||||
|
Can't create new tempfile
|
||||||
|
```
|
||||||
|
|
||||||
|
check your OpenShift's gear quota with
|
||||||
|
|
||||||
|
```
|
||||||
|
quota -gus
|
||||||
|
```
|
||||||
|
|
||||||
|
and if you are short on space, then locally (not SSH) do
|
||||||
|
|
||||||
|
```
|
||||||
|
rhc app-tidy your_app_name -l your_login -p your_password
|
||||||
|
```
|
||||||
|
|
||||||
|
to have rhc delete temporary files and OpenShift logs to free space first, then check the size of your local repo dir and execute
|
||||||
|
|
||||||
|
```
|
||||||
|
git gc
|
||||||
|
```
|
||||||
|
|
||||||
|
against it and check the size again, and then to minimize your remote repo connect via SSH to your application gear and execute the same command against it by changing to the remote repo directory - your repo should be in
|
||||||
|
|
||||||
|
```
|
||||||
|
~/git/your_app_name.git
|
||||||
|
```
|
||||||
|
|
||||||
|
(if not, do find -size +1M to find it), then do
|
||||||
|
|
||||||
|
```
|
||||||
|
cd ~/mysql/data/yourdatabase
|
||||||
|
myisamchk -r -v -f*.MYI
|
||||||
|
```
|
||||||
|
|
||||||
|
and hopefully your database tables are now okay.
|
||||||
|
|
||||||
|
##NOTES
|
||||||
|
Note 1: definitely DO turn off feeds and discovery by default if you are on the Free or Bronze plan on OpenShift with a single 1Gb gear by visiting https://your-app-name.rhcloud.com/admin/site when logged in as administrator of your Hubzilla site.
|
||||||
|
Note 2: DO add the above defaults into the deploy script.
|
||||||
|
Note 3: DO add git gc to the deploy script to clean up git.
|
||||||
|
Note 4: MAYBE DO add myisamchk - only checking? to the end of the deploy script.
|
||||||
|
|
||||||
|
The OpenShift `php` cartridge documentation can be found at:
|
||||||
|
http://openshift.github.io/documentation/oo_cartridge_guide.html#php
|
||||||
|
|
||||||
|
For information about .openshift directory, consult the documentation:
|
||||||
|
http://openshift.github.io/documentation/oo_user_guide.html#the-openshift-directory
|
||||||
3
.openshift/action_hooks/README.md
Normal file
3
.openshift/action_hooks/README.md
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
For information about action hooks, consult the documentation:
|
||||||
|
|
||||||
|
http://openshift.github.io/documentation/oo_user_guide.html#action-hooks
|
||||||
217
.openshift/action_hooks/deploy
Executable file
217
.openshift/action_hooks/deploy
Executable file
@@ -0,0 +1,217 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
# This deploy hook gets executed after dependencies are resolved and the
|
||||||
|
# build hook has been run but before the application has been started back
|
||||||
|
# up again. This script gets executed directly, so it could be python, php,
|
||||||
|
# ruby, etc.
|
||||||
|
|
||||||
|
# Bash help: http://www.panix.com/~elflord/unix/bash-tute.html
|
||||||
|
|
||||||
|
# For information about action hooks supported by OpenShift, consult the documentation:
|
||||||
|
# http://openshift.github.io/documentation/oo_user_guide.html#the-openshift-directory
|
||||||
|
|
||||||
|
####
|
||||||
|
|
||||||
|
# Hubzilla specific deploy script
|
||||||
|
|
||||||
|
# Place this file in /.openshift/action_hooks/ (The .openshift folder will be in the root of your repo)
|
||||||
|
# The file name should be "deploy" such that you have:
|
||||||
|
# .openshift/action_hooks/deploy
|
||||||
|
|
||||||
|
# Conventions: Vars in curley braces have the slash after implied so no need to add it.
|
||||||
|
# e.g. ${OPENSHIFT_REPO_DIR}php/foobar = /repo/php/foobar
|
||||||
|
# See all OpenShift vars here:
|
||||||
|
# https://www.openshift.com/developers/openshift-environment-variables
|
||||||
|
|
||||||
|
# HME - NOTE - leftover from original openshift-drupal-deploy
|
||||||
|
# In config.php you can leverage the enviroment variables like this:
|
||||||
|
# // Define env vars.
|
||||||
|
# if (array_key_exists('OPENSHIFT_APP_NAME', $_SERVER)) {
|
||||||
|
# $src = $_SERVER;
|
||||||
|
# } else {
|
||||||
|
# $src = $_ENV;
|
||||||
|
# }
|
||||||
|
#
|
||||||
|
# $conf["file_private_path"] = $src['OPENSHIFT_DATA_DIR'] . "private";
|
||||||
|
# $conf["file_temporary_path"] = $src['OPENSHIFT_DATA_DIR'] . "tmp";
|
||||||
|
|
||||||
|
|
||||||
|
####
|
||||||
|
|
||||||
|
# Start Deploy
|
||||||
|
|
||||||
|
echo "Starting Deploy..."
|
||||||
|
|
||||||
|
# Let's create the Hubzilla files directory in the Openshift data folder ($OPENSHIFT_DATA_DIR).
|
||||||
|
|
||||||
|
echo "Check for the files directory called store, if not created - create it"
|
||||||
|
|
||||||
|
if [ ! -d ${OPENSHIFT_DATA_DIR}store ]; then
|
||||||
|
mkdir -p ${OPENSHIFT_DATA_DIR}"store/[data]/smarty3"
|
||||||
|
echo "Done creating files directory"
|
||||||
|
|
||||||
|
else
|
||||||
|
|
||||||
|
echo "The files directory called store already exists"
|
||||||
|
|
||||||
|
fi
|
||||||
|
|
||||||
|
####
|
||||||
|
|
||||||
|
# Set permissions on the files directory.
|
||||||
|
|
||||||
|
echo "Now chmod 777 -R files"
|
||||||
|
|
||||||
|
chmod -R 777 ${OPENSHIFT_DATA_DIR}store
|
||||||
|
|
||||||
|
echo "chmod done, permissions set to 777"
|
||||||
|
|
||||||
|
####
|
||||||
|
|
||||||
|
# Symlink our files folder to the repo.
|
||||||
|
|
||||||
|
# Note the "php" directory below seems to be the best way to serve OpenShift files.
|
||||||
|
# This is good as that allows us for directories one level above such as tmp and private
|
||||||
|
|
||||||
|
echo "Create sym links for writeable directories"
|
||||||
|
|
||||||
|
ln -sf ${OPENSHIFT_DATA_DIR}store ${OPENSHIFT_REPO_DIR}store
|
||||||
|
|
||||||
|
echo "Files sym links created"
|
||||||
|
|
||||||
|
####
|
||||||
|
|
||||||
|
# Copy .htconfig.php from the repo, rename it and place it in the data directory.
|
||||||
|
# if it's there already, skip it.
|
||||||
|
|
||||||
|
if [ ! -f ${OPENSHIFT_DATA_DIR}.htconfig.php ];
|
||||||
|
|
||||||
|
then
|
||||||
|
|
||||||
|
cp ${OPENSHIFT_REPO_DIR}.htconfig.php ${OPENSHIFT_DATA_DIR}.htconfig.php
|
||||||
|
|
||||||
|
echo ".htconfig.php copied."
|
||||||
|
|
||||||
|
else
|
||||||
|
|
||||||
|
echo "Looks like the .htconfig.php file is already there, we won't overwrite it."
|
||||||
|
|
||||||
|
fi
|
||||||
|
|
||||||
|
####
|
||||||
|
|
||||||
|
# symlink the .htconfig.php file.
|
||||||
|
|
||||||
|
echo "Create sym link for .htconfig.php"
|
||||||
|
|
||||||
|
ln -sf ${OPENSHIFT_DATA_DIR}.htconfig.php ${OPENSHIFT_REPO_DIR}.htconfig.php
|
||||||
|
|
||||||
|
echo ".htconfig.php symlink created"
|
||||||
|
|
||||||
|
####
|
||||||
|
# Copy .htaccess from the repo, rename it and place it in the data directory.
|
||||||
|
# if it's there already, skip it.
|
||||||
|
|
||||||
|
if [ ! -f ${OPENSHIFT_DATA_DIR}.htaccess ];
|
||||||
|
|
||||||
|
then
|
||||||
|
|
||||||
|
cp ${OPENSHIFT_REPO_DIR}.htaccess ${OPENSHIFT_DATA_DIR}.htaccess
|
||||||
|
|
||||||
|
echo ".htaccess copied."
|
||||||
|
|
||||||
|
else
|
||||||
|
|
||||||
|
echo "Looks like the .htaccess file is already there, we won't overwrite it."
|
||||||
|
|
||||||
|
fi
|
||||||
|
|
||||||
|
####
|
||||||
|
|
||||||
|
# symlink the .htaccess file.
|
||||||
|
|
||||||
|
echo "Create sym link for .htaccess"
|
||||||
|
|
||||||
|
ln -sf ${OPENSHIFT_DATA_DIR}.htaccess ${OPENSHIFT_REPO_DIR}.htaccess
|
||||||
|
|
||||||
|
echo ".htaccess symlink created"
|
||||||
|
|
||||||
|
####
|
||||||
|
|
||||||
|
echo "Check for the poller at .openshift/cron/minutely/poller , if not created - create it"
|
||||||
|
|
||||||
|
if [ ! -f ${OPENSHIFT_REPO_DIR}.openshift/cron/minutely/poller ]; then
|
||||||
|
printf '%s\n' '#!/bin/bash' 'if [ ! -f $OPENSHIFT_DATA_DIR/last_run ]; then' ' touch $OPENSHIFT_DATA_DIR/last_run' 'fi' 'if [[ $(find $OPENSHIFT_DATA_DIR/last_run -mmin +9) ]]; then #run every 10 mins' ' rm -f $OPENSHIFT_DATA_DIR/last_run' ' touch $OPENSHIFT_DATA_DIR/last_run' ' # The command(s) that you want to run every 10 minutes' 'cd /var/lib/openshift/${OPENSHIFT_APP_UUID}/app-root/repo; /opt/rh/php54/root/usr/bin/php include/poller.php' 'fi' >${OPENSHIFT_REPO_DIR}.openshift/cron/minutely/poller
|
||||||
|
echo "Done creating file .openshift/cron/minutely/poller"
|
||||||
|
|
||||||
|
else
|
||||||
|
|
||||||
|
echo "The poller already exists"
|
||||||
|
|
||||||
|
fi
|
||||||
|
|
||||||
|
####
|
||||||
|
|
||||||
|
# Set permissions on the poller script to make it executable.
|
||||||
|
|
||||||
|
echo "Now chmod 777 -R poller"
|
||||||
|
|
||||||
|
chmod -R 777 ${OPENSHIFT_REPO_DIR}.openshift/cron/minutely/poller
|
||||||
|
|
||||||
|
echo "chmod done, permissions set to 777 on poller script."
|
||||||
|
|
||||||
|
####
|
||||||
|
|
||||||
|
### echo "Check for the hot deploy marker at .openshift/markers/hot_deploy , if not created - create it"
|
||||||
|
|
||||||
|
### if [ ! -f ${OPENSHIFT_REPO_DIR}.openshift/markers/hot_deploy ]; then
|
||||||
|
|
||||||
|
### touch ${OPENSHIFT_REPO_DIR}.openshift/markers/hot_deploy
|
||||||
|
|
||||||
|
### echo "Done creating file .openshift/markers/hot_deploy"
|
||||||
|
|
||||||
|
### else
|
||||||
|
|
||||||
|
### echo "The hot deploy marker already exists"
|
||||||
|
|
||||||
|
### fi
|
||||||
|
|
||||||
|
####
|
||||||
|
|
||||||
|
# Hubzilla configuration - changes to default settings
|
||||||
|
# to make Hubzilla on OpenShift a more pleasant experience
|
||||||
|
echo "Changing default configuration to conserve space and autocreate a social private channel upon account registration"
|
||||||
|
cd ${OPENSHIFT_REPO_DIR}
|
||||||
|
util/config system default_permissions_role social_private
|
||||||
|
util/config system workflow_channel_next channel
|
||||||
|
util/config system expire_delivery_reports 3
|
||||||
|
util/config system feed_contacts 0
|
||||||
|
util/config system diaspora_enabled 0
|
||||||
|
util/config system disable_discover_tab 1
|
||||||
|
util/config directory safemode 0
|
||||||
|
util/config directory globaldir 1
|
||||||
|
util/config directory pubforums 0
|
||||||
|
|
||||||
|
# Hubzill addons
|
||||||
|
echo "Try to add or update Hubzilla addons"
|
||||||
|
cd ${OPENSHIFT_REPO_DIR}
|
||||||
|
util/add_addon_repo https://github.com/redmatrix/hubzilla-addons.git HubzillaAddons
|
||||||
|
|
||||||
|
# Hubzilla themes
|
||||||
|
echo "Try to add or update Hubzilla themes"
|
||||||
|
cd ${OPENSHIFT_REPO_DIR}
|
||||||
|
util/add_theme_repo https://github.com/DeadSuperHero/hubzilla-themes.git DeadSuperHeroThemes
|
||||||
|
|
||||||
|
# Hubzilla ownMapp
|
||||||
|
echo "Try to add or update Hubzilla ownMapp"
|
||||||
|
cd ${OPENSHIFT_REPO_DIR}
|
||||||
|
util/add_addon_repo https://gitlab.com/zot/ownmapp.git ownMapp
|
||||||
|
|
||||||
|
# Hubzilla Chess
|
||||||
|
echo "Try to add or update Hubzilla chess "
|
||||||
|
cd ${OPENSHIFT_REPO_DIR}
|
||||||
|
util/add_addon_repo https://gitlab.com/zot/hubzilla-chess.git Chess
|
||||||
|
|
||||||
|
# Hubzilla Hubsites
|
||||||
|
echo "Try to add or update Hubzilla Hubsites"
|
||||||
|
cd ${OPENSHIFT_REPO_DIR}
|
||||||
|
util/add_addon_repo https://gitlab.com/zot/hubsites.git Hubsites
|
||||||
27
.openshift/cron/README.cron
Normal file
27
.openshift/cron/README.cron
Normal file
@@ -0,0 +1,27 @@
|
|||||||
|
Run scripts or jobs on a periodic basis
|
||||||
|
=======================================
|
||||||
|
Any scripts or jobs added to the minutely, hourly, daily, weekly or monthly
|
||||||
|
directories will be run on a scheduled basis (frequency is as indicated by the
|
||||||
|
name of the directory) using run-parts.
|
||||||
|
|
||||||
|
run-parts ignores any files that are hidden or dotfiles (.*) or backup
|
||||||
|
files (*~ or *,) or named *.{rpmsave,rpmorig,rpmnew,swp,cfsaved}
|
||||||
|
|
||||||
|
The presence of two specially named files jobs.deny and jobs.allow controls
|
||||||
|
how run-parts executes your scripts/jobs.
|
||||||
|
jobs.deny ===> Prevents specific scripts or jobs from being executed.
|
||||||
|
jobs.allow ===> Only execute the named scripts or jobs (all other/non-named
|
||||||
|
scripts that exist in this directory are ignored).
|
||||||
|
|
||||||
|
The principles of jobs.deny and jobs.allow are the same as those of cron.deny
|
||||||
|
and cron.allow and are described in detail at:
|
||||||
|
http://docs.redhat.com/docs/en-US/Red_Hat_Enterprise_Linux/6/html/Deployment_Guide/ch-Automating_System_Tasks.html#s2-autotasks-cron-access
|
||||||
|
|
||||||
|
See: man crontab or above link for more details and see the the weekly/
|
||||||
|
directory for an example.
|
||||||
|
|
||||||
|
PLEASE NOTE: The Cron cartridge must be installed in order to run the configured jobs.
|
||||||
|
|
||||||
|
For more information about cron, consult the documentation:
|
||||||
|
http://openshift.github.io/documentation/oo_cartridge_guide.html#cron
|
||||||
|
http://openshift.github.io/documentation/oo_user_guide.html#cron
|
||||||
0
.openshift/cron/daily/.gitignore
vendored
Normal file
0
.openshift/cron/daily/.gitignore
vendored
Normal file
0
.openshift/cron/hourly/.gitignore
vendored
Normal file
0
.openshift/cron/hourly/.gitignore
vendored
Normal file
0
.openshift/cron/minutely/.gitignore
vendored
Normal file
0
.openshift/cron/minutely/.gitignore
vendored
Normal file
0
.openshift/cron/monthly/.gitignore
vendored
Normal file
0
.openshift/cron/monthly/.gitignore
vendored
Normal file
16
.openshift/cron/weekly/README
Normal file
16
.openshift/cron/weekly/README
Normal file
@@ -0,0 +1,16 @@
|
|||||||
|
Run scripts or jobs on a weekly basis
|
||||||
|
=====================================
|
||||||
|
Any scripts or jobs added to this directory will be run on a scheduled basis
|
||||||
|
(weekly) using run-parts.
|
||||||
|
|
||||||
|
run-parts ignores any files that are hidden or dotfiles (.*) or backup
|
||||||
|
files (*~ or *,) or named *.{rpmsave,rpmorig,rpmnew,swp,cfsaved} and handles
|
||||||
|
the files named jobs.deny and jobs.allow specially.
|
||||||
|
|
||||||
|
In this specific example, the chronograph script is the only script or job file
|
||||||
|
executed on a weekly basis (due to white-listing it in jobs.allow). And the
|
||||||
|
README and chrono.dat file are ignored either as a result of being black-listed
|
||||||
|
in jobs.deny or because they are NOT white-listed in the jobs.allow file.
|
||||||
|
|
||||||
|
For more details, please see ../README.cron file.
|
||||||
|
|
||||||
1
.openshift/cron/weekly/chrono.dat
Normal file
1
.openshift/cron/weekly/chrono.dat
Normal file
@@ -0,0 +1 @@
|
|||||||
|
Time And Relative D...n In Execution (Open)Shift!
|
||||||
3
.openshift/cron/weekly/chronograph
Executable file
3
.openshift/cron/weekly/chronograph
Executable file
@@ -0,0 +1,3 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
echo "`date`: `cat $(dirname \"$0\")/chrono.dat`"
|
||||||
12
.openshift/cron/weekly/jobs.allow
Normal file
12
.openshift/cron/weekly/jobs.allow
Normal file
@@ -0,0 +1,12 @@
|
|||||||
|
#
|
||||||
|
# Script or job files listed in here (one entry per line) will be
|
||||||
|
# executed on a weekly-basis.
|
||||||
|
#
|
||||||
|
# Example: The chronograph script will be executed weekly but the README
|
||||||
|
# and chrono.dat files in this directory will be ignored.
|
||||||
|
#
|
||||||
|
# The README file is actually ignored due to the entry in the
|
||||||
|
# jobs.deny which is checked before jobs.allow (this file).
|
||||||
|
#
|
||||||
|
chronograph
|
||||||
|
|
||||||
7
.openshift/cron/weekly/jobs.deny
Normal file
7
.openshift/cron/weekly/jobs.deny
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
#
|
||||||
|
# Any script or job files listed in here (one entry per line) will NOT be
|
||||||
|
# executed (read as ignored by run-parts).
|
||||||
|
#
|
||||||
|
|
||||||
|
README
|
||||||
|
|
||||||
4
.openshift/markers/README.md
Normal file
4
.openshift/markers/README.md
Normal file
@@ -0,0 +1,4 @@
|
|||||||
|
For information about markers, consult the documentation:
|
||||||
|
|
||||||
|
http://openshift.github.io/documentation/oo_user_guide.html#markers
|
||||||
|
http://openshift.github.io/documentation/oo_cartridge_guide.html#php-markers
|
||||||
0
.openshift/pear.txt
Normal file
0
.openshift/pear.txt
Normal file
46
.travis.yml
Normal file
46
.travis.yml
Normal file
@@ -0,0 +1,46 @@
|
|||||||
|
# see http://about.travis-ci.org/docs/user/languages/php/ for more hints
|
||||||
|
language: php
|
||||||
|
|
||||||
|
# list any PHP version you want to test against
|
||||||
|
php:
|
||||||
|
# using major version aliases
|
||||||
|
|
||||||
|
# aliased to a recent 5.4.x version
|
||||||
|
- 5.4
|
||||||
|
# aliased to a recent 5.5.x version
|
||||||
|
- 5.5
|
||||||
|
# aliased to a recent 5.6.x version
|
||||||
|
- 5.6
|
||||||
|
# aliased to a recent 7.x version
|
||||||
|
- 7.0
|
||||||
|
# aliased to a recent hhvm version
|
||||||
|
- hhvm
|
||||||
|
|
||||||
|
# optionally specify a list of environments, for example to test different RDBMS
|
||||||
|
#env:
|
||||||
|
# - DB=mysql
|
||||||
|
# - DB=pgsql
|
||||||
|
|
||||||
|
# optionally set up exclutions and allowed failures in the matrix
|
||||||
|
matrix:
|
||||||
|
# exclude:
|
||||||
|
# - php: hhvm
|
||||||
|
# env: DB=pgsql # PDO driver for pgsql is unsupported by HHVM (3rd party install for support)
|
||||||
|
allow_failures:
|
||||||
|
- php: 7.0
|
||||||
|
- php: hhvm
|
||||||
|
|
||||||
|
# execute any number of scripts before the test run, custom env's are available as variables
|
||||||
|
#before_script:
|
||||||
|
# - if [[ "$DB" == "pgsql" ]]; then psql -c "DROP DATABASE IF EXISTS hello_world_test;" -U postgres; fi
|
||||||
|
# - if [[ "$DB" == "pgsql" ]]; then psql -c "create database hello_world_test;" -U postgres; fi
|
||||||
|
# - if [[ "$DB" == "mysql" ]]; then mysql -e "create database IF NOT EXISTS hello_world_test;" -uroot; fi
|
||||||
|
|
||||||
|
# omitting "script:" will default to phpunit
|
||||||
|
# use the $DB env variable to determine the phpunit.xml to use
|
||||||
|
script: phpunit tests/*php
|
||||||
|
|
||||||
|
# configure notifications (email, IRC, campfire etc)
|
||||||
|
notifications:
|
||||||
|
# irc: "irc.freenode.org#yourfavouriteroomfortravis"
|
||||||
|
# a plugin/script to post to a hubzilla channel would be neat here
|
||||||
92
CHANGELOG
Normal file
92
CHANGELOG
Normal file
@@ -0,0 +1,92 @@
|
|||||||
|
|
||||||
|
Hubzilla 1.2
|
||||||
|
Provide extra HTTP security headers (several of them).
|
||||||
|
Allow a site to disable delivery reports if disk space is limited
|
||||||
|
Regression: Wrong theme when viewing single post as non-member
|
||||||
|
Some Diaspora profile photos use relative URLs - force absolute
|
||||||
|
Add locked features to siteinfo report to aid remote debugging
|
||||||
|
Provide version compatibility checking to plugins (minversion, maxversion, and minphpversion)
|
||||||
|
Account config storage
|
||||||
|
Provide optional integrated registration and channel create form
|
||||||
|
cli utility for managing addons
|
||||||
|
issue with sharing photo "items"
|
||||||
|
cover photo manager: upload, crop, and store
|
||||||
|
cover photo widget created
|
||||||
|
rework the connections list page and provide a few management features there
|
||||||
|
fixed issue with Comanche layout definitions loaded by plugins
|
||||||
|
provide ability to separate delivery functions from item_store() and item_store_update() - some forum messages were being redelivered when cloned.
|
||||||
|
call build_sync_packet() on pdledit changes
|
||||||
|
Abstract the project name and version so these can be customised or removed
|
||||||
|
Allow hiding the ratings links on a per-site basis
|
||||||
|
db_type not present in international setup templates - was unable to choose postgres.
|
||||||
|
item_photo_menu logically divided into a) actions on the post, b) actions related to the author
|
||||||
|
bug: default channel not reset to 0 when last channel removed
|
||||||
|
create widget containing only the contact block
|
||||||
|
regression: public forums granted send stream permissions to connections
|
||||||
|
workaround Firefox's refusal to honour disabling autocomplete of passwords
|
||||||
|
regression: photo's uploaded to a channel by a guest (with file write permissions) not saved correctly.
|
||||||
|
provide mechanisms for custom .well-known handlers (needed for LetsEncrypt ownership verification)
|
||||||
|
proc_run modified to use exec() instead of proc_open() - causing issues on some PHP installations
|
||||||
|
remote delegation failure under a specific set of circumstances which we were finally able to duplicate
|
||||||
|
Delegation section of Channel Manager was missing names and contained useless notification icons.
|
||||||
|
Change "expire" channel setting to show system limit if there is one.
|
||||||
|
Regression: provide a one-click ignore of pending connection
|
||||||
|
Config to control directory keyword generation on client and server.
|
||||||
|
"Collections" renamed to "Privacy Groups", documentation improved
|
||||||
|
widget_item - allow use of page title instead of message id
|
||||||
|
Add site black/white list checking to all .well-known services
|
||||||
|
reduce incidents of screen jumping when "showmore" is activated
|
||||||
|
add oembed provider for photos
|
||||||
|
|
||||||
|
Addons:
|
||||||
|
|
||||||
|
CSS theming of pageheader plugin
|
||||||
|
xmpp addon ported from Friendica
|
||||||
|
Diaspora private mail issues after the third reply
|
||||||
|
Occasional issue with Diaspora connection requests
|
||||||
|
Add notification email to Diaspora PMs
|
||||||
|
Allow anonymising platform and version for statistics
|
||||||
|
msgfooter addon created
|
||||||
|
removed embedly plugin
|
||||||
|
sync clones after superblock addition
|
||||||
|
"keepout" plugin created
|
||||||
|
|
||||||
|
|
||||||
|
Hubzilla 1.1
|
||||||
|
|
||||||
|
Rewrote and simplified the Queue manager and delivery system
|
||||||
|
Rewrote and simplified the outer layers of the Zot protocol
|
||||||
|
Use a standard version numbering scheme in addition to the snapshot tags
|
||||||
|
Provide a channel blacklist for blocking channels with abusive or illegal content at the hub level
|
||||||
|
Make the black/white lists pluggable
|
||||||
|
Update template library
|
||||||
|
Support for letsencrypt certs in various places
|
||||||
|
Cleanup of login and register pages
|
||||||
|
Better error responses for permission denied on channel file repositories
|
||||||
|
Disabled the public stream by default for new installs (can be enabled if desired)
|
||||||
|
Cleanup of API authentication and rework the old OAuth1 stuff
|
||||||
|
Add API "status with media" support compatible with Twitter and conflicting method for GNU-social
|
||||||
|
Rework photo ActivityStreams objects to align better with ActivityStreams producers/consumers
|
||||||
|
Several minor API fixes to work better with AndStatus client
|
||||||
|
Invitation only site - experimental support added, needs more work
|
||||||
|
Fix delivery loop condition due to corrupted data which resulted in recursive upstream delivery
|
||||||
|
Provide more support for external (git) widget collections.
|
||||||
|
Extend the Queue API to 3rd-party network addons which have experienced downtime recently.
|
||||||
|
Regression: Inherited permissions were not explicitly set
|
||||||
|
Regression: "Xyz posted on your wall" notification sent when creating webpages at another channel
|
||||||
|
Regression: Custom permissions not pre-populated on channel creation with named role.
|
||||||
|
Provide "Public" string when a post can be made public, instead of "visible to default audience"
|
||||||
|
Allow hub admin to specify a default role type for the first channel created, reducing complexity
|
||||||
|
Ability for a hub admin to set feature defaults and lock them, reducing complexity
|
||||||
|
Change default expiration of delivery reports to 10 days to accomodate sites with reduced resources
|
||||||
|
Addons/Plugins:
|
||||||
|
Pageheader addon ported from Friendica
|
||||||
|
Hubwall (allow admin to send email to all accounts on this hub) created
|
||||||
|
GNU-social - queueing added
|
||||||
|
Diaspora - fixes for various failures to update profile photos, updates to queue API
|
||||||
|
Cross Domain Authenticated Chess (Andrew Manning's repository)
|
||||||
|
|
||||||
|
And... the normal "lots of bugs fixed, translations updated, and documentation improved"
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
2
LICENSE
2
LICENSE
@@ -1,4 +1,4 @@
|
|||||||
Copyright (c) 2010-2015 Hubzilla
|
Copyright (c) 2010-2016 Hubzilla
|
||||||
All rights reserved.
|
All rights reserved.
|
||||||
|
|
||||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
|||||||
19
README.md
19
README.md
@@ -1,11 +1,14 @@
|
|||||||
|

|
||||||
|
|
||||||
Hubzilla
|
Hubzilla - Community Server
|
||||||
========
|
===========================
|
||||||
|
|
||||||
###Websites. Redefined.
|
Help us redefine the web - using integrated and united community websites.
|
||||||
|
--------------------------------------------------------------------------
|
||||||
|
|
||||||
|
<p align="center" markdown="1">
|
||||||

|
<em><a href="https://github.com/redmatrix/hubzilla/blob/master/install/INSTALL.txt">Installing Hubzilla</a></em>
|
||||||
|
</p>
|
||||||
|
|
||||||
**What are Hubs?**
|
**What are Hubs?**
|
||||||
|
|
||||||
@@ -37,6 +40,8 @@ Possible website applications include
|
|||||||
* dating websites
|
* dating websites
|
||||||
* pretty much anything you can do on a traditional blog or community website, but that you could do better if you could easily connect it with other websites or privately share things across website boundaries.
|
* pretty much anything you can do on a traditional blog or community website, but that you could do better if you could easily connect it with other websites or privately share things across website boundaries.
|
||||||
|
|
||||||
|
<p align="center" markdown="1">
|
||||||
|
<em><a href="https://github.com/redmatrix/hubzilla/blob/master/install/INSTALL.txt">Installing Hubzilla</a></em>
|
||||||
|
</p>
|
||||||
|
|
||||||
|
[](https://travis-ci.org/redmatrix/hubzilla)
|
||||||
This project is under development and is not yet available for general use.
|
|
||||||
|
|||||||
92
Zotlabs/Access/AccessList.php
Normal file
92
Zotlabs/Access/AccessList.php
Normal file
@@ -0,0 +1,92 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace Zotlabs\Access;
|
||||||
|
|
||||||
|
|
||||||
|
class AccessList {
|
||||||
|
|
||||||
|
private $allow_cid;
|
||||||
|
private $allow_gid;
|
||||||
|
private $deny_cid;
|
||||||
|
private $deny_gid;
|
||||||
|
|
||||||
|
/* indicates if we are using the default constructor values or values that have been set explicitly. */
|
||||||
|
|
||||||
|
private $explicit;
|
||||||
|
|
||||||
|
function __construct($channel) {
|
||||||
|
|
||||||
|
if($channel) {
|
||||||
|
$this->allow_cid = $channel['channel_allow_cid'];
|
||||||
|
$this->allow_gid = $channel['channel_allow_gid'];
|
||||||
|
$this->deny_cid = $channel['channel_deny_cid'];
|
||||||
|
$this->deny_gid = $channel['channel_deny_gid'];
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
$this->allow_cid = '';
|
||||||
|
$this->allow_gid = '';
|
||||||
|
$this->deny_cid = '';
|
||||||
|
$this->deny_gid = '';
|
||||||
|
}
|
||||||
|
|
||||||
|
$this->explicit = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
function get_explicit() {
|
||||||
|
return $this->explicit;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Set AccessList from strings such as those in already
|
||||||
|
* existing stored data items
|
||||||
|
*/
|
||||||
|
|
||||||
|
function set($arr,$explicit = true) {
|
||||||
|
$this->allow_cid = $arr['allow_cid'];
|
||||||
|
$this->allow_gid = $arr['allow_gid'];
|
||||||
|
$this->deny_cid = $arr['deny_cid'];
|
||||||
|
$this->deny_gid = $arr['deny_gid'];
|
||||||
|
|
||||||
|
$this->explicit = $explicit;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* return an array consisting of the current
|
||||||
|
* access list components where the elements
|
||||||
|
* are directly storable.
|
||||||
|
*/
|
||||||
|
|
||||||
|
function get() {
|
||||||
|
return array(
|
||||||
|
'allow_cid' => $this->allow_cid,
|
||||||
|
'allow_gid' => $this->allow_gid,
|
||||||
|
'deny_cid' => $this->deny_cid,
|
||||||
|
'deny_gid' => $this->deny_gid,
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Set AccessList from arrays, such as those provided by
|
||||||
|
* acl_selector(). For convenience, a string (or non-array) input is
|
||||||
|
* assumed to be a comma-separated list and auto-converted into an array.
|
||||||
|
*/
|
||||||
|
|
||||||
|
function set_from_array($arr,$explicit = true) {
|
||||||
|
$this->allow_cid = perms2str((is_array($arr['contact_allow']))
|
||||||
|
? $arr['contact_allow'] : explode(',',$arr['contact_allow']));
|
||||||
|
$this->allow_gid = perms2str((is_array($arr['group_allow']))
|
||||||
|
? $arr['group_allow'] : explode(',',$arr['group_allow']));
|
||||||
|
$this->deny_cid = perms2str((is_array($arr['contact_deny']))
|
||||||
|
? $arr['contact_deny'] : explode(',',$arr['contact_deny']));
|
||||||
|
$this->deny_gid = perms2str((is_array($arr['group_deny']))
|
||||||
|
? $arr['group_deny'] : explode(',',$arr['group_deny']));
|
||||||
|
|
||||||
|
$this->explicit = $explicit;
|
||||||
|
}
|
||||||
|
|
||||||
|
function is_private() {
|
||||||
|
return (($this->allow_cid || $this->allow_gid || $this->deny_cid || $this->deny_gid) ? true : false);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
18
Zotlabs/Identity/BasicId.php
Normal file
18
Zotlabs/Identity/BasicId.php
Normal file
@@ -0,0 +1,18 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace Zotlabs\Identity\BasicId;
|
||||||
|
|
||||||
|
class BasicId {
|
||||||
|
|
||||||
|
private $name;
|
||||||
|
private $profile_photo;
|
||||||
|
private $profile_url;
|
||||||
|
private $address;
|
||||||
|
private $protocol;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
16
Zotlabs/Identity/ProfilePhoto.php
Normal file
16
Zotlabs/Identity/ProfilePhoto.php
Normal file
@@ -0,0 +1,16 @@
|
|||||||
|
<?php
|
||||||
|
namespace Zotlabs\Identity\ProfilePhoto;
|
||||||
|
|
||||||
|
class ProfilePhoto {
|
||||||
|
|
||||||
|
private $photo_large_url;
|
||||||
|
private $photo_medium_url;
|
||||||
|
private $photo_small_url;
|
||||||
|
private $photo_mimetype;
|
||||||
|
private $photo_updated;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
62
Zotlabs/Project/System.php
Normal file
62
Zotlabs/Project/System.php
Normal file
@@ -0,0 +1,62 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace Zotlabs\Project;
|
||||||
|
|
||||||
|
class System {
|
||||||
|
|
||||||
|
function get_platform_name() {
|
||||||
|
$a = get_app();
|
||||||
|
if(is_array($a->config) && is_array($a->config['system']) && $a->config['system']['platform_name'])
|
||||||
|
return $a->config['system']['platform_name'];
|
||||||
|
return PLATFORM_NAME;
|
||||||
|
}
|
||||||
|
|
||||||
|
function get_project_version() {
|
||||||
|
$a = get_app();
|
||||||
|
if(is_array($a->config) && is_array($a->config['system']) && $a->config['system']['hide_version'])
|
||||||
|
return '';
|
||||||
|
return RED_VERSION;
|
||||||
|
}
|
||||||
|
|
||||||
|
function get_update_version() {
|
||||||
|
$a = get_app();
|
||||||
|
if(is_array($a->config) && is_array($a->config['system']) && $a->config['system']['hide_version'])
|
||||||
|
return '';
|
||||||
|
return DB_UPDATE_VERSION;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
function get_notify_icon() {
|
||||||
|
$a = get_app();
|
||||||
|
if(is_array($a->config) && is_array($a->config['system']) && $a->config['system']['email_notify_icon_url'])
|
||||||
|
return $a->config['system']['email_notify_icon_url'];
|
||||||
|
return z_root() . '/images/hz-white-32.png';
|
||||||
|
}
|
||||||
|
|
||||||
|
function get_site_icon() {
|
||||||
|
$a = get_app();
|
||||||
|
if(is_array($a->config) && is_array($a->config['system']) && $a->config['system']['site_icon_url'])
|
||||||
|
return $a->config['system']['site_icon_url'];
|
||||||
|
return z_root() . '/images/hz-32.png';
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
function get_server_role() {
|
||||||
|
if(UNO)
|
||||||
|
return 'basic';
|
||||||
|
return 'advanced';
|
||||||
|
}
|
||||||
|
|
||||||
|
// return the standardised version. Since we can't easily compare
|
||||||
|
// before the STD_VERSION definition was applied, we have to treat
|
||||||
|
// all prior release versions the same. You can dig through them
|
||||||
|
// with other means (such as RED_VERSION) if necessary.
|
||||||
|
|
||||||
|
function get_std_version() {
|
||||||
|
if(defined('STD_VERSION'))
|
||||||
|
return STD_VERSION;
|
||||||
|
return '0.0.0';
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
@@ -1,11 +1,11 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
namespace RedMatrix\RedDAV;
|
namespace Zotlabs\Storage;
|
||||||
|
|
||||||
use Sabre\DAV;
|
use Sabre\DAV;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Authentication backend class for RedDAV.
|
* @brief Authentication backend class for DAV.
|
||||||
*
|
*
|
||||||
* This class also contains some data which is not necessary for authentication
|
* This class also contains some data which is not necessary for authentication
|
||||||
* like timezone settings.
|
* like timezone settings.
|
||||||
@@ -15,7 +15,7 @@ use Sabre\DAV;
|
|||||||
* @link http://github.com/friendica/red
|
* @link http://github.com/friendica/red
|
||||||
* @license http://opensource.org/licenses/mit-license.php The MIT License (MIT)
|
* @license http://opensource.org/licenses/mit-license.php The MIT License (MIT)
|
||||||
*/
|
*/
|
||||||
class RedBasicAuth extends DAV\Auth\Backend\AbstractBasic {
|
class BasicAuth extends DAV\Auth\Backend\AbstractBasic {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief This variable holds the currently logged-in channel_address.
|
* @brief This variable holds the currently logged-in channel_address.
|
||||||
@@ -45,18 +45,18 @@ class RedBasicAuth extends DAV\Auth\Backend\AbstractBasic {
|
|||||||
public $observer = '';
|
public $observer = '';
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
* @see RedBrowser::set_writeable()
|
* @see Browser::set_writeable()
|
||||||
* @var \Sabre\DAV\Browser\Plugin
|
* @var \Sabre\DAV\Browser\Plugin
|
||||||
*/
|
*/
|
||||||
public $browser;
|
public $browser;
|
||||||
/**
|
/**
|
||||||
* channel_id of the current visited path. Set in RedDirectory::getDir().
|
* channel_id of the current visited path. Set in Directory::getDir().
|
||||||
*
|
*
|
||||||
* @var int
|
* @var int
|
||||||
*/
|
*/
|
||||||
public $owner_id = 0;
|
public $owner_id = 0;
|
||||||
/**
|
/**
|
||||||
* channel_name of the current visited path. Set in RedDirectory::getDir().
|
* channel_name of the current visited path. Set in Directory::getDir().
|
||||||
*
|
*
|
||||||
* Used for creating the path in cloud/
|
* Used for creating the path in cloud/
|
||||||
*
|
*
|
||||||
@@ -197,7 +197,7 @@ class RedBasicAuth extends DAV\Auth\Backend\AbstractBasic {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Prints out all RedBasicAuth variables to logger().
|
* @brief Prints out all BasicAuth variables to logger().
|
||||||
*
|
*
|
||||||
* @return void
|
* @return void
|
||||||
*/
|
*/
|
||||||
@@ -1,6 +1,6 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
namespace RedMatrix\RedDAV;
|
namespace Zotlabs\Storage;
|
||||||
|
|
||||||
use Sabre\DAV;
|
use Sabre\DAV;
|
||||||
|
|
||||||
@@ -15,7 +15,7 @@ use Sabre\DAV;
|
|||||||
* @link http://github.com/friendica/red
|
* @link http://github.com/friendica/red
|
||||||
* @license http://opensource.org/licenses/mit-license.php The MIT License (MIT)
|
* @license http://opensource.org/licenses/mit-license.php The MIT License (MIT)
|
||||||
*/
|
*/
|
||||||
class RedBrowser extends DAV\Browser\Plugin {
|
class Browser extends DAV\Browser\Plugin {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @see set_writeable()
|
* @see set_writeable()
|
||||||
@@ -188,7 +188,7 @@ class RedBrowser extends DAV\Browser\Plugin {
|
|||||||
|
|
||||||
$parentHash = '';
|
$parentHash = '';
|
||||||
$owner = $this->auth->owner_id;
|
$owner = $this->auth->owner_id;
|
||||||
$splitPath = split('/', $fullPath);
|
$splitPath = explode('/', $fullPath);
|
||||||
if (count($splitPath) > 3) {
|
if (count($splitPath) > 3) {
|
||||||
for ($i = 3; $i < count($splitPath); $i++) {
|
for ($i = 3; $i < count($splitPath); $i++) {
|
||||||
$attachName = urldecode($splitPath[$i]);
|
$attachName = urldecode($splitPath[$i]);
|
||||||
@@ -217,31 +217,6 @@ class RedBrowser extends DAV\Browser\Plugin {
|
|||||||
$f[] = $ft;
|
$f[] = $ft;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Storage and quota for the account (all channels of the owner of this directory)!
|
|
||||||
$limit = service_class_fetch($owner, 'attach_upload_limit');
|
|
||||||
$r = q("SELECT SUM(filesize) AS total FROM attach WHERE aid = %d",
|
|
||||||
intval($this->auth->channel_account_id)
|
|
||||||
);
|
|
||||||
$used = $r[0]['total'];
|
|
||||||
if ($used) {
|
|
||||||
$quotaDesc = t('%1$s used');
|
|
||||||
$quotaDesc = sprintf($quotaDesc,
|
|
||||||
userReadableSize($used));
|
|
||||||
}
|
|
||||||
if ($limit && $used) {
|
|
||||||
$quotaDesc = t('%1$s used of %2$s (%3$s%)');
|
|
||||||
$quotaDesc = sprintf($quotaDesc,
|
|
||||||
userReadableSize($used),
|
|
||||||
userReadableSize($limit),
|
|
||||||
round($used / $limit, 1));
|
|
||||||
}
|
|
||||||
|
|
||||||
// prepare quota for template
|
|
||||||
$quota = array();
|
|
||||||
$quota['used'] = $used;
|
|
||||||
$quota['limit'] = $limit;
|
|
||||||
$quota['desc'] = $quotaDesc;
|
|
||||||
|
|
||||||
$output = '';
|
$output = '';
|
||||||
if ($this->enablePost) {
|
if ($this->enablePost) {
|
||||||
$this->server->broadcastEvent('onHTMLActionsPanel', array($parent, &$output));
|
$this->server->broadcastEvent('onHTMLActionsPanel', array($parent, &$output));
|
||||||
@@ -249,7 +224,6 @@ class RedBrowser extends DAV\Browser\Plugin {
|
|||||||
|
|
||||||
$html .= replace_macros(get_markup_template('cloud.tpl'), array(
|
$html .= replace_macros(get_markup_template('cloud.tpl'), array(
|
||||||
'$header' => t('Files') . ": " . $this->escapeHTML($path) . "/",
|
'$header' => t('Files') . ": " . $this->escapeHTML($path) . "/",
|
||||||
'$quota' => $quota,
|
|
||||||
'$total' => t('Total'),
|
'$total' => t('Total'),
|
||||||
'$actionspanel' => $output,
|
'$actionspanel' => $output,
|
||||||
'$shared' => t('Shared'),
|
'$shared' => t('Shared'),
|
||||||
@@ -298,11 +272,38 @@ class RedBrowser extends DAV\Browser\Plugin {
|
|||||||
if (get_class($node) === 'Sabre\\DAV\\SimpleCollection')
|
if (get_class($node) === 'Sabre\\DAV\\SimpleCollection')
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
// Storage and quota for the account (all channels of the owner of this directory)!
|
||||||
|
$limit = service_class_fetch($owner, 'attach_upload_limit');
|
||||||
|
$r = q("SELECT SUM(filesize) AS total FROM attach WHERE aid = %d",
|
||||||
|
intval($this->auth->channel_account_id)
|
||||||
|
);
|
||||||
|
$used = $r[0]['total'];
|
||||||
|
if ($used) {
|
||||||
|
$quotaDesc = t('You are using %1$s of your available file storage.');
|
||||||
|
$quotaDesc = sprintf($quotaDesc,
|
||||||
|
userReadableSize($used));
|
||||||
|
}
|
||||||
|
if ($limit && $used) {
|
||||||
|
$quotaDesc = t('You are using %1$s of %2$s available file storage. (%3$s%)');
|
||||||
|
$quotaDesc = sprintf($quotaDesc,
|
||||||
|
userReadableSize($used),
|
||||||
|
userReadableSize($limit),
|
||||||
|
round($used / $limit, 1) * 100);
|
||||||
|
}
|
||||||
|
|
||||||
|
// prepare quota for template
|
||||||
|
$quota = array();
|
||||||
|
$quota['used'] = $used;
|
||||||
|
$quota['limit'] = $limit;
|
||||||
|
$quota['desc'] = $quotaDesc;
|
||||||
|
$quota['warning'] = ((($limit) && ((round($used / $limit, 1) * 100) >= 90)) ? t('WARNING:') : ''); // 10485760 bytes = 100MB
|
||||||
|
|
||||||
$output .= replace_macros(get_markup_template('cloud_actionspanel.tpl'), array(
|
$output .= replace_macros(get_markup_template('cloud_actionspanel.tpl'), array(
|
||||||
'$folder_header' => t('Create new folder'),
|
'$folder_header' => t('Create new folder'),
|
||||||
'$folder_submit' => t('Create'),
|
'$folder_submit' => t('Create'),
|
||||||
'$upload_header' => t('Upload file'),
|
'$upload_header' => t('Upload file'),
|
||||||
'$upload_submit' => t('Upload')
|
'$upload_submit' => t('Upload'),
|
||||||
|
'$quota' => $quota
|
||||||
));
|
));
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1,6 +1,6 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
namespace RedMatrix\RedDAV;
|
namespace Zotlabs\Storage;
|
||||||
|
|
||||||
use Sabre\DAV;
|
use Sabre\DAV;
|
||||||
|
|
||||||
@@ -16,7 +16,7 @@ use Sabre\DAV;
|
|||||||
* @link http://github.com/friendica/red
|
* @link http://github.com/friendica/red
|
||||||
* @license http://opensource.org/licenses/mit-license.php The MIT License (MIT)
|
* @license http://opensource.org/licenses/mit-license.php The MIT License (MIT)
|
||||||
*/
|
*/
|
||||||
class RedDirectory extends DAV\Node implements DAV\ICollection, DAV\IQuota {
|
class Directory extends DAV\Node implements DAV\ICollection, DAV\IQuota {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief The path inside /cloud
|
* @brief The path inside /cloud
|
||||||
@@ -116,7 +116,7 @@ class RedDirectory extends DAV\Node implements DAV\ICollection, DAV\IQuota {
|
|||||||
|
|
||||||
$modulename = get_app()->module;
|
$modulename = get_app()->module;
|
||||||
if ($this->red_path === '/' && $name === $modulename) {
|
if ($this->red_path === '/' && $name === $modulename) {
|
||||||
return new RedDirectory('/' . $modulename, $this->auth);
|
return new Directory('/' . $modulename, $this->auth);
|
||||||
}
|
}
|
||||||
|
|
||||||
$x = RedFileData($this->ext_path . '/' . $name, $this->auth);
|
$x = RedFileData($this->ext_path . '/' . $name, $this->auth);
|
||||||
@@ -251,7 +251,7 @@ class RedDirectory extends DAV\Node implements DAV\ICollection, DAV\IQuota {
|
|||||||
intval($filesize),
|
intval($filesize),
|
||||||
intval(0),
|
intval(0),
|
||||||
intval($is_photo),
|
intval($is_photo),
|
||||||
dbesc($this->os_path . '/' . $hash),
|
dbesc($f),
|
||||||
dbesc(datetime_convert()),
|
dbesc(datetime_convert()),
|
||||||
dbesc(datetime_convert()),
|
dbesc(datetime_convert()),
|
||||||
dbesc($allow_cid),
|
dbesc($allow_cid),
|
||||||
@@ -362,6 +362,27 @@ class RedDirectory extends DAV\Node implements DAV\ICollection, DAV\IQuota {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief delete directory
|
||||||
|
*/
|
||||||
|
|
||||||
|
public function delete() {
|
||||||
|
logger('delete file ' . basename($this->red_path), LOGGER_DEBUG);
|
||||||
|
|
||||||
|
if ((! $this->auth->owner_id) || (! perm_is_allowed($this->auth->owner_id, $this->auth->observer, 'write_storage'))) {
|
||||||
|
throw new DAV\Exception\Forbidden('Permission denied.');
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($this->auth->owner_id !== $this->auth->channel_id) {
|
||||||
|
if (($this->auth->observer !== $this->data['creator']) || intval($this->data['is_dir'])) {
|
||||||
|
throw new DAV\Exception\Forbidden('Permission denied.');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
attach_delete($this->auth->owner_id, $this->folder_hash);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Checks if a child exists.
|
* @brief Checks if a child exists.
|
||||||
*
|
*
|
||||||
@@ -1,6 +1,6 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
namespace RedMatrix\RedDAV;
|
namespace Zotlabs\Storage;
|
||||||
|
|
||||||
use Sabre\DAV;
|
use Sabre\DAV;
|
||||||
|
|
||||||
@@ -15,7 +15,7 @@ use Sabre\DAV;
|
|||||||
* @link http://github.com/friendica/red
|
* @link http://github.com/friendica/red
|
||||||
* @license http://opensource.org/licenses/mit-license.php The MIT License (MIT)
|
* @license http://opensource.org/licenses/mit-license.php The MIT License (MIT)
|
||||||
*/
|
*/
|
||||||
class RedFile extends DAV\Node implements DAV\IFile {
|
class File extends DAV\Node implements DAV\IFile {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The file from attach table.
|
* The file from attach table.
|
||||||
@@ -126,7 +126,11 @@ class RedFile extends DAV\Node implements DAV\IFile {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
$fname = dbunescbin($d[0]['data']);
|
$fname = dbunescbin($d[0]['data']);
|
||||||
$f = 'store/' . $this->auth->owner_nick . '/' . (($fname) ? $fname : '');
|
if(strpos($fname,'store') === false)
|
||||||
|
$f = 'store/' . $this->auth->owner_nick . '/' . $fname ;
|
||||||
|
else
|
||||||
|
$f = $fname;
|
||||||
|
|
||||||
// @todo check return value and set $size directly
|
// @todo check return value and set $size directly
|
||||||
@file_put_contents($f, $data);
|
@file_put_contents($f, $data);
|
||||||
$size = @filesize($f);
|
$size = @filesize($f);
|
||||||
@@ -226,7 +230,11 @@ class RedFile extends DAV\Node implements DAV\IFile {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (intval($r[0]['os_storage'])) {
|
if (intval($r[0]['os_storage'])) {
|
||||||
$f = 'store/' . $this->auth->owner_nick . '/' . (($this->os_path) ? $this->os_path . '/' : '') . dbunescbin($r[0]['data']);
|
$x = dbunescbin($r[0]['data']);
|
||||||
|
if(strpos($x,'store') === false)
|
||||||
|
$f = 'store/' . $this->auth->owner_nick . '/' . (($this->os_path) ? $this->os_path . '/' : '') . $x;
|
||||||
|
else
|
||||||
|
$f = $x;
|
||||||
return fopen($f, 'rb');
|
return fopen($f, 'rb');
|
||||||
}
|
}
|
||||||
return dbunescbin($r[0]['data']);
|
return dbunescbin($r[0]['data']);
|
||||||
199
Zotlabs/Web/Router.php
Normal file
199
Zotlabs/Web/Router.php
Normal file
@@ -0,0 +1,199 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace Zotlabs\Web;
|
||||||
|
|
||||||
|
|
||||||
|
class Router {
|
||||||
|
|
||||||
|
function __construct(&$a) {
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* We have already parsed the server path into $a->argc and $a->argv
|
||||||
|
*
|
||||||
|
* $a->argv[0] is our module name. We will load the file mod/{$a->argv[0]}.php
|
||||||
|
* and use it for handling our URL request.
|
||||||
|
* The module file contains a few functions that we call in various circumstances
|
||||||
|
* and in the following order:
|
||||||
|
*
|
||||||
|
* "module"_init
|
||||||
|
* "module"_post (only called if there are $_POST variables)
|
||||||
|
* "module"_content - the string return of this function contains our page body
|
||||||
|
*
|
||||||
|
* Modules which emit other serialisations besides HTML (XML,JSON, etc.) should do
|
||||||
|
* so within the module init and/or post functions and then invoke killme() to terminate
|
||||||
|
* further processing.
|
||||||
|
*/
|
||||||
|
|
||||||
|
if(strlen($a->module)) {
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* We will always have a module name.
|
||||||
|
* First see if we have a plugin which is masquerading as a module.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
if(is_array($a->plugins) && in_array($a->module,$a->plugins) && file_exists("addon/{$a->module}/{$a->module}.php")) {
|
||||||
|
include_once("addon/{$a->module}/{$a->module}.php");
|
||||||
|
if(function_exists($a->module . '_module'))
|
||||||
|
$a->module_loaded = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
if((strpos($a->module,'admin') === 0) && (! is_site_admin())) {
|
||||||
|
$a->module_loaded = false;
|
||||||
|
notice( t('Permission denied.') . EOL);
|
||||||
|
goaway(z_root());
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* If the site has a custom module to over-ride the standard module, use it.
|
||||||
|
* Otherwise, look for the standard program module in the 'mod' directory
|
||||||
|
*/
|
||||||
|
|
||||||
|
if(! $a->module_loaded) {
|
||||||
|
if(file_exists("mod/site/{$a->module}.php")) {
|
||||||
|
include_once("mod/site/{$a->module}.php");
|
||||||
|
$a->module_loaded = true;
|
||||||
|
}
|
||||||
|
elseif(file_exists("mod/{$a->module}.php")) {
|
||||||
|
include_once("mod/{$a->module}.php");
|
||||||
|
$a->module_loaded = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This provides a place for plugins to register module handlers which don't otherwise exist on the system.
|
||||||
|
* If the plugin sets 'installed' to true we won't throw a 404 error for the specified module even if
|
||||||
|
* there is no specific module file or matching plugin name.
|
||||||
|
* The plugin should catch at least one of the module hooks for this URL.
|
||||||
|
*/
|
||||||
|
|
||||||
|
$x = array('module' => $a->module, 'installed' => false);
|
||||||
|
call_hooks('module_loaded', $x);
|
||||||
|
if($x['installed'])
|
||||||
|
$a->module_loaded = true;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The URL provided does not resolve to a valid module.
|
||||||
|
*
|
||||||
|
* On Dreamhost sites, quite often things go wrong for no apparent reason and they send us to '/internal_error.html'.
|
||||||
|
* We don't like doing this, but as it occasionally accounts for 10-20% or more of all site traffic -
|
||||||
|
* we are going to trap this and redirect back to the requested page. As long as you don't have a critical error on your page
|
||||||
|
* this will often succeed and eventually do the right thing.
|
||||||
|
*
|
||||||
|
* Otherwise we are going to emit a 404 not found.
|
||||||
|
*/
|
||||||
|
|
||||||
|
if(! $a->module_loaded) {
|
||||||
|
|
||||||
|
// Stupid browser tried to pre-fetch our Javascript img template. Don't log the event or return anything - just quietly exit.
|
||||||
|
if((x($_SERVER, 'QUERY_STRING')) && preg_match('/{[0-9]}/', $_SERVER['QUERY_STRING']) !== 0) {
|
||||||
|
killme();
|
||||||
|
}
|
||||||
|
|
||||||
|
if((x($_SERVER, 'QUERY_STRING')) && ($_SERVER['QUERY_STRING'] === 'q=internal_error.html') && $a->config['system']['dreamhost_error_hack']) {
|
||||||
|
logger('index.php: dreamhost_error_hack invoked. Original URI =' . $_SERVER['REQUEST_URI']);
|
||||||
|
goaway($a->get_baseurl() . $_SERVER['REQUEST_URI']);
|
||||||
|
}
|
||||||
|
|
||||||
|
logger('index.php: page not found: ' . $_SERVER['REQUEST_URI'] . ' ADDRESS: ' . $_SERVER['REMOTE_ADDR'] . ' QUERY: ' . $_SERVER['QUERY_STRING'], LOGGER_DEBUG);
|
||||||
|
header($_SERVER['SERVER_PROTOCOL'] . ' 404 ' . t('Not Found'));
|
||||||
|
$tpl = get_markup_template('404.tpl');
|
||||||
|
$a->page['content'] = replace_macros($tpl, array(
|
||||||
|
'$message' => t('Page not found.')
|
||||||
|
));
|
||||||
|
|
||||||
|
// pretend this is a module so it will initialise the theme
|
||||||
|
$a->module = '404';
|
||||||
|
$a->module_loaded = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
function Dispatch(&$a) {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Call module functions
|
||||||
|
*/
|
||||||
|
|
||||||
|
if($a->module_loaded) {
|
||||||
|
$a->page['page_title'] = $a->module;
|
||||||
|
$placeholder = '';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* No theme has been specified when calling the module_init functions
|
||||||
|
* For this reason, please restrict the use of templates to those which
|
||||||
|
* do not provide any presentation details - as themes will not be able
|
||||||
|
* to over-ride them.
|
||||||
|
*/
|
||||||
|
|
||||||
|
if(function_exists($a->module . '_init')) {
|
||||||
|
$arr = array('init' => true, 'replace' => false);
|
||||||
|
call_hooks($a->module . '_mod_init', $arr);
|
||||||
|
if(! $arr['replace']) {
|
||||||
|
$func = $a->module . '_init';
|
||||||
|
$func($a);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Do all theme initialiasion here before calling any additional module functions.
|
||||||
|
* The module_init function may have changed the theme.
|
||||||
|
* Additionally any page with a Comanche template may alter the theme.
|
||||||
|
* So we'll check for those now.
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* In case a page has overloaded a module, see if we already have a layout defined
|
||||||
|
* otherwise, if a PDL file exists for this module, use it
|
||||||
|
* The member may have also created a customised PDL that's stored in the config
|
||||||
|
*/
|
||||||
|
|
||||||
|
load_pdl($a);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* load current theme info
|
||||||
|
*/
|
||||||
|
|
||||||
|
$theme_info_file = 'view/theme/' . current_theme() . '/php/theme.php';
|
||||||
|
if (file_exists($theme_info_file)){
|
||||||
|
require_once($theme_info_file);
|
||||||
|
}
|
||||||
|
|
||||||
|
if(function_exists(str_replace('-', '_', current_theme()) . '_init')) {
|
||||||
|
$func = str_replace('-', '_', current_theme()) . '_init';
|
||||||
|
$func($a);
|
||||||
|
}
|
||||||
|
elseif (x($a->theme_info, 'extends') && file_exists('view/theme/' . $a->theme_info['extends'] . '/php/theme.php')) {
|
||||||
|
require_once('view/theme/' . $a->theme_info['extends'] . '/php/theme.php');
|
||||||
|
if(function_exists(str_replace('-', '_', $a->theme_info['extends']) . '_init')) {
|
||||||
|
$func = str_replace('-', '_', $a->theme_info['extends']) . '_init';
|
||||||
|
$func($a);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if(($_SERVER['REQUEST_METHOD'] === 'POST') && (! $a->error)
|
||||||
|
&& (function_exists($a->module . '_post'))
|
||||||
|
&& (! x($_POST, 'auth-params'))) {
|
||||||
|
call_hooks($a->module . '_mod_post', $_POST);
|
||||||
|
$func = $a->module . '_post';
|
||||||
|
$func($a);
|
||||||
|
}
|
||||||
|
|
||||||
|
if((! $a->error) && (function_exists($a->module . '_content'))) {
|
||||||
|
$arr = array('content' => $a->page['content'], 'replace' => false);
|
||||||
|
call_hooks($a->module . '_mod_content', $arr);
|
||||||
|
$a->page['content'] = $arr['content'];
|
||||||
|
if(! $arr['replace']) {
|
||||||
|
$func = $a->module . '_content';
|
||||||
|
$arr = array('content' => $func($a));
|
||||||
|
}
|
||||||
|
call_hooks($a->module . '_mod_aftercontent', $arr);
|
||||||
|
$a->page['content'] .= $arr['content'];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
345
Zotlabs/Zot/Auth.php
Normal file
345
Zotlabs/Zot/Auth.php
Normal file
@@ -0,0 +1,345 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace Zotlabs\Zot;
|
||||||
|
|
||||||
|
class Auth {
|
||||||
|
|
||||||
|
protected $test;
|
||||||
|
protected $test_results;
|
||||||
|
protected $debug_msg;
|
||||||
|
|
||||||
|
protected $address;
|
||||||
|
protected $desturl;
|
||||||
|
protected $sec;
|
||||||
|
protected $version;
|
||||||
|
protected $delegate;
|
||||||
|
protected $success;
|
||||||
|
protected $delegate_success;
|
||||||
|
|
||||||
|
protected $remote;
|
||||||
|
protected $remote_service_class;
|
||||||
|
protected $remote_level;
|
||||||
|
protected $remote_hub;
|
||||||
|
protected $dnt;
|
||||||
|
|
||||||
|
function __construct($req) {
|
||||||
|
|
||||||
|
|
||||||
|
$this->test = ((array_key_exists('test',$req)) ? intval($req['test']) : 0);
|
||||||
|
$this->test_results = array('success' => false);
|
||||||
|
$this->debug_msg = '';
|
||||||
|
|
||||||
|
$this->success = false;
|
||||||
|
$this->address = $req['auth'];
|
||||||
|
$this->desturl = $req['dest'];
|
||||||
|
$this->sec = $req['sec'];
|
||||||
|
$this->version = $req['version'];
|
||||||
|
$this->delegate = $req['delegate'];
|
||||||
|
|
||||||
|
$c = get_sys_channel();
|
||||||
|
if(! $c) {
|
||||||
|
logger('unable to obtain response (sys) channel');
|
||||||
|
$this->Debug('no local channels found.');
|
||||||
|
$this->Finalise();
|
||||||
|
}
|
||||||
|
|
||||||
|
$x = $this->GetHublocs($this->address);
|
||||||
|
|
||||||
|
if($x) {
|
||||||
|
foreach($x as $xx) {
|
||||||
|
if($this->Verify($c,$xx))
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @FIXME we really want to save the return_url in the session before we
|
||||||
|
* visit rmagic. This does however prevent a recursion if you visit
|
||||||
|
* rmagic directly, as it would otherwise send you back here again.
|
||||||
|
* But z_root() probably isn't where you really want to go.
|
||||||
|
*/
|
||||||
|
|
||||||
|
if(strstr($this->desturl,z_root() . '/rmagic'))
|
||||||
|
goaway(z_root());
|
||||||
|
|
||||||
|
$this->Finalise();
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
function GetHublocs($address) {
|
||||||
|
|
||||||
|
// Try and find a hubloc for the person attempting to auth.
|
||||||
|
// Since we're matching by address, we have to return all entries
|
||||||
|
// some of which may be from re-installed hubs; and we'll need to
|
||||||
|
// try each sequentially to see if one can pass the test
|
||||||
|
|
||||||
|
$x = q("select * from hubloc left join xchan on xchan_hash = hubloc_hash
|
||||||
|
where hubloc_addr = '%s' order by hubloc_id desc",
|
||||||
|
dbesc($address)
|
||||||
|
);
|
||||||
|
|
||||||
|
if(! $x) {
|
||||||
|
// finger them if they can't be found.
|
||||||
|
$ret = zot_finger($address, null);
|
||||||
|
if ($ret['success']) {
|
||||||
|
$j = json_decode($ret['body'], true);
|
||||||
|
if($j)
|
||||||
|
import_xchan($j);
|
||||||
|
$x = q("select * from hubloc left join xchan on xchan_hash = hubloc_hash
|
||||||
|
where hubloc_addr = '%s' order by hubloc_id desc",
|
||||||
|
dbesc($address)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if(! $x) {
|
||||||
|
logger('mod_zot: auth: unable to finger ' . $address);
|
||||||
|
$this->Debug('no hubloc found for ' . $address . ' and probing failed.');
|
||||||
|
$this->Finalise();
|
||||||
|
}
|
||||||
|
|
||||||
|
return $x;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
function Verify($channel,$hubloc) {
|
||||||
|
|
||||||
|
logger('auth request received from ' . $hubloc['hubloc_addr'] );
|
||||||
|
|
||||||
|
$this->remote = remote_channel();
|
||||||
|
$this->remote_service_class = '';
|
||||||
|
$this->remote_level = 0;
|
||||||
|
$this->remote_hub = $hubloc['hubloc_url'];
|
||||||
|
$this->dnt = 0;
|
||||||
|
|
||||||
|
// check credentials and access
|
||||||
|
|
||||||
|
// If they are already authenticated and haven't changed credentials,
|
||||||
|
// we can save an expensive network round trip and improve performance.
|
||||||
|
|
||||||
|
// Also check that they are coming from the same site as they authenticated with originally.
|
||||||
|
|
||||||
|
$already_authed = (((remote_channel()) && ($hubloc['hubloc_hash'] == remote_channel())
|
||||||
|
&& ($hubloc['hubloc_url'] === $_SESSION['remote_hub'])) ? true : false);
|
||||||
|
|
||||||
|
if($this->delegate && $this->delegate !== $_SESSION['delegate_channel'])
|
||||||
|
$already_authed = false;
|
||||||
|
|
||||||
|
if($already_authed)
|
||||||
|
return true;
|
||||||
|
|
||||||
|
if(local_channel()) {
|
||||||
|
|
||||||
|
// tell them to logout if they're logged in locally as anything but the target remote account
|
||||||
|
// in which case just shut up because they don't need to be doing this at all.
|
||||||
|
|
||||||
|
if (get_app()->channel['channel_hash'] == $hubloc['xchan_hash']) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
logger('already authenticated locally as somebody else.');
|
||||||
|
notice( t('Remote authentication blocked. You are logged into this site locally. Please logout and retry.') . EOL);
|
||||||
|
if($this->test) {
|
||||||
|
$this->Debug('already logged in locally with a conflicting identity.');
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Auth packets MUST use ultra top-secret hush-hush mode - e.g. the entire packet is encrypted using the
|
||||||
|
// site private key
|
||||||
|
// The actual channel sending the packet ($c[0]) is not important, but this provides a
|
||||||
|
// generic zot packet with a sender which can be verified
|
||||||
|
|
||||||
|
$p = zot_build_packet($channel,$type = 'auth_check',
|
||||||
|
array(array('guid' => $hubloc['hubloc_guid'],'guid_sig' => $hubloc['hubloc_guid_sig'])),
|
||||||
|
$hubloc['hubloc_sitekey'], $this->sec);
|
||||||
|
|
||||||
|
$this->Debug('auth check packet created using sitekey ' . $hubloc['hubloc_sitekey']);
|
||||||
|
$this->Debug('packet contents: ' . $p);
|
||||||
|
|
||||||
|
$result = zot_zot($hubloc['hubloc_callback'],$p);
|
||||||
|
if(! $result['success']) {
|
||||||
|
logger('auth_check callback failed.');
|
||||||
|
if($this->test)
|
||||||
|
$this->Debug('auth check request to your site returned .' . print_r($result, true));
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
$j = json_decode($result['body'], true);
|
||||||
|
if(! $j) {
|
||||||
|
logger('auth_check json data malformed.');
|
||||||
|
if($this->test)
|
||||||
|
$this->Debug('json malformed: ' . $result['body']);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
$this->Debug('auth check request returned .' . print_r($j, true));
|
||||||
|
|
||||||
|
if(! $j['success'])
|
||||||
|
return false;
|
||||||
|
|
||||||
|
// legit response, but we do need to check that this wasn't answered by a man-in-middle
|
||||||
|
|
||||||
|
if (! rsa_verify($this->sec . $hubloc['xchan_hash'],base64url_decode($j['confirm']),$hubloc['xchan_pubkey'])) {
|
||||||
|
logger('final confirmation failed.');
|
||||||
|
if($this->test)
|
||||||
|
$this->Debug('final confirmation failed. ' . $sec . print_r($j,true) . print_r($hubloc,true));
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (array_key_exists('service_class',$j))
|
||||||
|
$this->remote_service_class = $j['service_class'];
|
||||||
|
if (array_key_exists('level',$j))
|
||||||
|
$this->remote_level = $j['level'];
|
||||||
|
if (array_key_exists('DNT',$j))
|
||||||
|
$this->dnt = $j['DNT'];
|
||||||
|
|
||||||
|
|
||||||
|
// log them in
|
||||||
|
|
||||||
|
if ($this->test) {
|
||||||
|
// testing only - return the success result
|
||||||
|
$this->test_results['success'] = true;
|
||||||
|
$this->Debug('Authentication Success!');
|
||||||
|
$this->Finalise();
|
||||||
|
}
|
||||||
|
|
||||||
|
$_SESSION['authenticated'] = 1;
|
||||||
|
|
||||||
|
// check for delegation and if all is well, log them in locally with delegation restrictions
|
||||||
|
|
||||||
|
$this->delegate_success = false;
|
||||||
|
|
||||||
|
if($this->delegate) {
|
||||||
|
$r = q("select * from channel left join xchan on channel_hash = xchan_hash where xchan_addr = '%s' limit 1",
|
||||||
|
dbesc($this->delegate)
|
||||||
|
);
|
||||||
|
if ($r && intval($r[0]['channel_id'])) {
|
||||||
|
$allowed = perm_is_allowed($r[0]['channel_id'],$hubloc['xchan_hash'],'delegate');
|
||||||
|
if($allowed) {
|
||||||
|
$_SESSION['delegate_channel'] = $r[0]['channel_id'];
|
||||||
|
$_SESSION['delegate'] = $hubloc['xchan_hash'];
|
||||||
|
$_SESSION['account_id'] = intval($r[0]['channel_account_id']);
|
||||||
|
require_once('include/security.php');
|
||||||
|
// this will set the local_channel authentication in the session
|
||||||
|
change_channel($r[0]['channel_id']);
|
||||||
|
$this->delegate_success = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (! $this->delegate_success) {
|
||||||
|
// normal visitor (remote_channel) login session credentials
|
||||||
|
$_SESSION['visitor_id'] = $hubloc['xchan_hash'];
|
||||||
|
$_SESSION['my_url'] = $hubloc['xchan_url'];
|
||||||
|
$_SESSION['my_address'] = $this->address;
|
||||||
|
$_SESSION['remote_service_class'] = $this->remote_service_class;
|
||||||
|
$_SESSION['remote_level'] = $this->remote_level;
|
||||||
|
$_SESSION['remote_hub'] = $this->remote_hub;
|
||||||
|
$_SESSION['DNT'] = $this->dnt;
|
||||||
|
}
|
||||||
|
|
||||||
|
$arr = array('xchan' => $hubloc, 'url' => $this->desturl, 'session' => $_SESSION);
|
||||||
|
call_hooks('magic_auth_success',$arr);
|
||||||
|
get_app()->set_observer($hubloc);
|
||||||
|
require_once('include/security.php');
|
||||||
|
get_app()->set_groups(init_groups_visitor($_SESSION['visitor_id']));
|
||||||
|
info(sprintf( t('Welcome %s. Remote authentication successful.'),$hubloc['xchan_name']));
|
||||||
|
logger('mod_zot: auth success from ' . $hubloc['xchan_addr']);
|
||||||
|
$this->success = true;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
function Debug($msg) {
|
||||||
|
$this->debug_msg .= $msg . EOL;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
function Finalise() {
|
||||||
|
|
||||||
|
if($this->test) {
|
||||||
|
$this->test_results['message'] = $this->debug_msg;
|
||||||
|
json_return_and_die($this->test_results);
|
||||||
|
}
|
||||||
|
|
||||||
|
goaway($this->desturl);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* Magic Auth
|
||||||
|
* ==========
|
||||||
|
*
|
||||||
|
* So-called "magic auth" takes place by a special exchange. On the site where the "channel to be authenticated" lives (e.g. $mysite),
|
||||||
|
* a redirection is made via $mysite/magic to the zot endpoint of the remote site ($remotesite) with special GET parameters.
|
||||||
|
*
|
||||||
|
* The endpoint is typically https://$remotesite/post - or whatever was specified as the callback url in prior communications
|
||||||
|
* (we will bootstrap an address and fetch a zot info packet if possible where no prior communications exist)
|
||||||
|
*
|
||||||
|
* Five GET parameters are supplied:
|
||||||
|
* * auth => the urlencoded webbie (channel@host.domain) of the channel requesting access
|
||||||
|
* * dest => the desired destination URL (urlencoded)
|
||||||
|
* * sec => a random string which is also stored on $mysite for use during the verification phase.
|
||||||
|
* * version => the zot revision
|
||||||
|
* * delegate => optional urlencoded webbie of a local channel to invoke delegation rights for
|
||||||
|
*
|
||||||
|
* * test => (optional 1 or 0 - debugs the authentication exchange and returns a json response instead of redirecting the browser session)
|
||||||
|
*
|
||||||
|
* When this packet is received, an "auth-check" zot message is sent to $mysite.
|
||||||
|
* (e.g. if $_GET['auth'] is foobar@podunk.edu, a zot packet is sent to the podunk.edu zot endpoint, which is typically /post)
|
||||||
|
* If no information has been recorded about the requesting identity a zot information packet will be retrieved before
|
||||||
|
* continuing.
|
||||||
|
*
|
||||||
|
* The sender of this packet is an arbitrary/random site channel. The recipients will be a single recipient corresponding
|
||||||
|
* to the guid and guid_sig we have associated with the requesting auth identity
|
||||||
|
*
|
||||||
|
* \code{.json}
|
||||||
|
* {
|
||||||
|
* "type":"auth_check",
|
||||||
|
* "sender":{
|
||||||
|
* "guid":"kgVFf_...",
|
||||||
|
* "guid_sig":"PT9-TApz...",
|
||||||
|
* "url":"http:\/\/podunk.edu",
|
||||||
|
* "url_sig":"T8Bp7j...",
|
||||||
|
* "sitekey":"aMtgKTiirXrICP..."
|
||||||
|
* },
|
||||||
|
* "recipients":{
|
||||||
|
* {
|
||||||
|
* "guid":"ZHSqb...",
|
||||||
|
* "guid_sig":"JsAAXi..."
|
||||||
|
* }
|
||||||
|
* }
|
||||||
|
* "callback":"\/post",
|
||||||
|
* "version":1,
|
||||||
|
* "secret":"1eaa661",
|
||||||
|
* "secret_sig":"eKV968b1..."
|
||||||
|
* }
|
||||||
|
* \endcode
|
||||||
|
*
|
||||||
|
* auth_check messages MUST use encapsulated encryption. This message is sent to the origination site, which checks the 'secret' to see
|
||||||
|
* if it is the same as the 'sec' which it passed originally. It also checks the secret_sig which is the secret signed by the
|
||||||
|
* destination channel's private key and base64url encoded. If everything checks out, a json packet is returned:
|
||||||
|
*
|
||||||
|
* \code{.json}
|
||||||
|
* {
|
||||||
|
* "success":1,
|
||||||
|
* "confirm":"q0Ysovd1u...",
|
||||||
|
* "service_class":(optional)
|
||||||
|
* "level":(optional)
|
||||||
|
* "DNT": (optional do-not-track - 1 or 0)
|
||||||
|
* }
|
||||||
|
* \endcode
|
||||||
|
*
|
||||||
|
* 'confirm' in this case is the base64url encoded RSA signature of the concatenation of 'secret' with the
|
||||||
|
* base64url encoded whirlpool hash of the requestor's guid and guid_sig; signed with the source channel private key.
|
||||||
|
* This prevents a man-in-the-middle from inserting a rogue success packet. Upon receipt and successful
|
||||||
|
* verification of this packet, the destination site will redirect to the original destination URL and indicate a successful remote login.
|
||||||
|
* Service_class can be used by cooperating sites to provide different access rights based on account rights and subscription plans. It is
|
||||||
|
* a string whose contents are not defined by protocol. Example: "basic" or "gold".
|
||||||
|
*
|
||||||
|
* @param[in,out] App &$a
|
||||||
|
*/
|
||||||
55
Zotlabs/Zot/DReport.php
Normal file
55
Zotlabs/Zot/DReport.php
Normal file
@@ -0,0 +1,55 @@
|
|||||||
|
<?php
|
||||||
|
namespace Zotlabs\Zot;
|
||||||
|
|
||||||
|
class DReport {
|
||||||
|
|
||||||
|
private $location;
|
||||||
|
private $sender;
|
||||||
|
private $recipient;
|
||||||
|
private $message_id;
|
||||||
|
private $status;
|
||||||
|
private $date;
|
||||||
|
|
||||||
|
function __construct($location,$sender,$recipient,$message_id,$status = 'deliver') {
|
||||||
|
$this->location = $location;
|
||||||
|
$this->sender = $sender;
|
||||||
|
$this->recipient = $recipient;
|
||||||
|
$this->message_id = $message_id;
|
||||||
|
$this->status = $status;
|
||||||
|
$this->date = datetime_convert();
|
||||||
|
}
|
||||||
|
|
||||||
|
function update($status) {
|
||||||
|
$this->status = $status;
|
||||||
|
$this->date = datetime_convert();
|
||||||
|
}
|
||||||
|
|
||||||
|
function addto_recipient($name) {
|
||||||
|
$this->recipient = $this->recipient . ' ' . $name;
|
||||||
|
}
|
||||||
|
|
||||||
|
function addto_update($status) {
|
||||||
|
$this->status = $this->status . ' ' . $status;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
function set($arr) {
|
||||||
|
$this->location = $arr['location'];
|
||||||
|
$this->sender = $arr['sender'];
|
||||||
|
$this->recipient = $arr['recipient'];
|
||||||
|
$this->message_id = $arr['message_id'];
|
||||||
|
$this->status = $arr['status'];
|
||||||
|
$this->date = $arr['date'];
|
||||||
|
}
|
||||||
|
|
||||||
|
function get() {
|
||||||
|
return array(
|
||||||
|
'location' => $this->location,
|
||||||
|
'sender' => $this->sender,
|
||||||
|
'recipient' => $this->recipient,
|
||||||
|
'message_id' => $this->message_id,
|
||||||
|
'status' => $this->status,
|
||||||
|
'date' => $this->date
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
22
Zotlabs/Zot/IHandler.php
Normal file
22
Zotlabs/Zot/IHandler.php
Normal file
@@ -0,0 +1,22 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace Zotlabs\Zot;
|
||||||
|
|
||||||
|
interface IHandler {
|
||||||
|
|
||||||
|
function Ping();
|
||||||
|
|
||||||
|
function Pickup($data);
|
||||||
|
|
||||||
|
function Notify($data);
|
||||||
|
|
||||||
|
function Request($data);
|
||||||
|
|
||||||
|
function AuthCheck($data,$encrypted);
|
||||||
|
|
||||||
|
function Purge($sender,$recipients);
|
||||||
|
|
||||||
|
function Refresh($sender,$recipients);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
297
Zotlabs/Zot/Receiver.php
Normal file
297
Zotlabs/Zot/Receiver.php
Normal file
@@ -0,0 +1,297 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace Zotlabs\Zot;
|
||||||
|
|
||||||
|
class Receiver {
|
||||||
|
|
||||||
|
protected $data;
|
||||||
|
protected $encrypted;
|
||||||
|
protected $error;
|
||||||
|
protected $messagetype;
|
||||||
|
protected $sender;
|
||||||
|
protected $validated;
|
||||||
|
protected $recipients;
|
||||||
|
protected $response;
|
||||||
|
protected $handler;
|
||||||
|
|
||||||
|
function __construct($data,$prvkey,$handler) {
|
||||||
|
|
||||||
|
$this->error = false;
|
||||||
|
$this->validated = false;
|
||||||
|
$this->messagetype = '';
|
||||||
|
$this->response = array('success' => false);
|
||||||
|
|
||||||
|
$this->handler = $handler;
|
||||||
|
|
||||||
|
if(! is_array($data))
|
||||||
|
$data = json_decode($data,true);
|
||||||
|
|
||||||
|
if($data && is_array($data)) {
|
||||||
|
$this->encrypted = ((array_key_exists('iv',$data)) ? true : false);
|
||||||
|
|
||||||
|
if($this->encrypted) {
|
||||||
|
$this->data = @json_decode(@crypto_unencapsulate($data,$prvkey),true);
|
||||||
|
}
|
||||||
|
if(! $this->data)
|
||||||
|
$this->data = $data;
|
||||||
|
|
||||||
|
if($this->data && is_array($this->data) && array_key_exists('type',$this->data))
|
||||||
|
$this->messagetype = $this->data['type'];
|
||||||
|
}
|
||||||
|
if(! $this->messagetype)
|
||||||
|
$this->error = true;
|
||||||
|
|
||||||
|
if($this->data) {
|
||||||
|
$this->sender = ((array_key_exists('sender',$this->data)) ? $this->data['sender'] : null);
|
||||||
|
$this->recipients = ((array_key_exists('recipients',$this->data)) ? $this->data['recipients'] : null);
|
||||||
|
}
|
||||||
|
|
||||||
|
if($this->sender)
|
||||||
|
$this->ValidateSender();
|
||||||
|
|
||||||
|
$this->Dispatch();
|
||||||
|
}
|
||||||
|
|
||||||
|
function ValidateSender() {
|
||||||
|
$hubs = zot_gethub($this->sender,true);
|
||||||
|
if (! $hubs) {
|
||||||
|
|
||||||
|
/* Have never seen this guid or this guid coming from this location. Check it and register it. */
|
||||||
|
/* (!!) this will validate the sender. */
|
||||||
|
|
||||||
|
$result = zot_register_hub($this->sender);
|
||||||
|
|
||||||
|
if ((! $result['success']) || (! ($hubs = zot_gethub($this->sender,true)))) {
|
||||||
|
$this->response['message'] = 'Hub not available.';
|
||||||
|
json_return_and_die($this->response);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
foreach($hubs as $hub) {
|
||||||
|
update_hub_connected($hub,((array_key_exists('sitekey',$this->sender)) ? $this->sender['sitekey'] : ''));
|
||||||
|
}
|
||||||
|
$this->validated = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
function Dispatch() {
|
||||||
|
|
||||||
|
/* Handle tasks which don't require sender validation */
|
||||||
|
|
||||||
|
switch($this->messagetype) {
|
||||||
|
case 'ping':
|
||||||
|
/* no validation needed */
|
||||||
|
$this->handler->Ping();
|
||||||
|
break;
|
||||||
|
case 'pickup':
|
||||||
|
/* perform site validation, as opposed to sender validation */
|
||||||
|
$this->handler->Pickup($this->data);
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
if(! $this->validated) {
|
||||||
|
$this->response['message'] = 'Sender not valid';
|
||||||
|
json_return_and_die($this->response);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Now handle tasks which require sender validation */
|
||||||
|
|
||||||
|
switch($this->messagetype) {
|
||||||
|
|
||||||
|
case 'auth_check':
|
||||||
|
$this->handler->AuthCheck($this->data,$this->encrypted);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 'request':
|
||||||
|
$this->handler->Request($this->data);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 'purge':
|
||||||
|
$this->handler->Purge($this->sender,$this->recipients);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 'refresh':
|
||||||
|
case 'force_refresh':
|
||||||
|
$this->handler->Refresh($this->sender,$this->recipients);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 'notify':
|
||||||
|
$this->handler->Notify($this->data);
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
$this->response['message'] = 'Not implemented';
|
||||||
|
json_return_and_die($this->response);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief zot communications and messaging.
|
||||||
|
*
|
||||||
|
* Sender HTTP posts to this endpoint ($site/post typically) with 'data' parameter set to json zot message packet.
|
||||||
|
* This packet is optionally encrypted, which we will discover if the json has an 'iv' element.
|
||||||
|
* $contents => array( 'alg' => 'aes256cbc', 'iv' => initialisation vector, 'key' => decryption key, 'data' => encrypted data);
|
||||||
|
* $contents->iv and $contents->key are random strings encrypted with this site's RSA public key and then base64url encoded.
|
||||||
|
* Currently only 'aes256cbc' is used, but this is extensible should that algorithm prove inadequate.
|
||||||
|
*
|
||||||
|
* Once decrypted, one will find the normal json_encoded zot message packet.
|
||||||
|
*
|
||||||
|
* Defined packet types are: notify, purge, refresh, force_refresh, auth_check, ping, and pickup
|
||||||
|
*
|
||||||
|
* Standard packet: (used by notify, purge, refresh, force_refresh, and auth_check)
|
||||||
|
* \code{.json}
|
||||||
|
* {
|
||||||
|
* "type": "notify",
|
||||||
|
* "sender":{
|
||||||
|
* "guid":"kgVFf_1...",
|
||||||
|
* "guid_sig":"PT9-TApzp...",
|
||||||
|
* "url":"http:\/\/podunk.edu",
|
||||||
|
* "url_sig":"T8Bp7j5...",
|
||||||
|
* },
|
||||||
|
* "recipients": { optional recipient array },
|
||||||
|
* "callback":"\/post",
|
||||||
|
* "version":1,
|
||||||
|
* "secret":"1eaa...",
|
||||||
|
* "secret_sig": "df89025470fac8..."
|
||||||
|
* }
|
||||||
|
* \endcode
|
||||||
|
*
|
||||||
|
* Signature fields are all signed with the sender channel private key and base64url encoded.
|
||||||
|
* Recipients are arrays of guid and guid_sig, which were previously signed with the recipients private
|
||||||
|
* key and base64url encoded and later obtained via channel discovery. Absence of recipients indicates
|
||||||
|
* a public message or visible to all potential listeners on this site.
|
||||||
|
*
|
||||||
|
* "pickup" packet:
|
||||||
|
* The pickup packet is sent in response to a notify packet from another site
|
||||||
|
* \code{.json}
|
||||||
|
* {
|
||||||
|
* "type":"pickup",
|
||||||
|
* "url":"http:\/\/example.com",
|
||||||
|
* "callback":"http:\/\/example.com\/post",
|
||||||
|
* "callback_sig":"teE1_fLI...",
|
||||||
|
* "secret":"1eaa...",
|
||||||
|
* "secret_sig":"O7nB4_..."
|
||||||
|
* }
|
||||||
|
* \endcode
|
||||||
|
*
|
||||||
|
* In the pickup packet, the sig fields correspond to the respective data
|
||||||
|
* element signed with this site's system private key and then base64url encoded.
|
||||||
|
* The "secret" is the same as the original secret from the notify packet.
|
||||||
|
*
|
||||||
|
* If verification is successful, a json structure is returned containing a
|
||||||
|
* success indicator and an array of type 'pickup'.
|
||||||
|
* Each pickup element contains the original notify request and a message field
|
||||||
|
* whose contents are dependent on the message type.
|
||||||
|
*
|
||||||
|
* This JSON array is AES encapsulated using the site public key of the site
|
||||||
|
* that sent the initial zot pickup packet.
|
||||||
|
* Using the above example, this would be example.com.
|
||||||
|
*
|
||||||
|
* \code{.json}
|
||||||
|
* {
|
||||||
|
* "success":1,
|
||||||
|
* "pickup":{
|
||||||
|
* "notify":{
|
||||||
|
* "type":"notify",
|
||||||
|
* "sender":{
|
||||||
|
* "guid":"kgVFf_...",
|
||||||
|
* "guid_sig":"PT9-TApz...",
|
||||||
|
* "url":"http:\/\/z.podunk.edu",
|
||||||
|
* "url_sig":"T8Bp7j5D..."
|
||||||
|
* },
|
||||||
|
* "callback":"\/post",
|
||||||
|
* "version":1,
|
||||||
|
* "secret":"1eaa661..."
|
||||||
|
* },
|
||||||
|
* "message":{
|
||||||
|
* "type":"activity",
|
||||||
|
* "message_id":"10b049ce384cbb2da9467319bc98169ab36290b8bbb403aa0c0accd9cb072e76@podunk.edu",
|
||||||
|
* "message_top":"10b049ce384cbb2da9467319bc98169ab36290b8bbb403aa0c0accd9cb072e76@podunk.edu",
|
||||||
|
* "message_parent":"10b049ce384cbb2da9467319bc98169ab36290b8bbb403aa0c0accd9cb072e76@podunk.edu",
|
||||||
|
* "created":"2012-11-20 04:04:16",
|
||||||
|
* "edited":"2012-11-20 04:04:16",
|
||||||
|
* "title":"",
|
||||||
|
* "body":"Hi Nickordo",
|
||||||
|
* "app":"",
|
||||||
|
* "verb":"post",
|
||||||
|
* "object_type":"",
|
||||||
|
* "target_type":"",
|
||||||
|
* "permalink":"",
|
||||||
|
* "location":"",
|
||||||
|
* "longlat":"",
|
||||||
|
* "owner":{
|
||||||
|
* "name":"Indigo",
|
||||||
|
* "address":"indigo@podunk.edu",
|
||||||
|
* "url":"http:\/\/podunk.edu",
|
||||||
|
* "photo":{
|
||||||
|
* "mimetype":"image\/jpeg",
|
||||||
|
* "src":"http:\/\/podunk.edu\/photo\/profile\/m\/5"
|
||||||
|
* },
|
||||||
|
* "guid":"kgVFf_...",
|
||||||
|
* "guid_sig":"PT9-TAp...",
|
||||||
|
* },
|
||||||
|
* "author":{
|
||||||
|
* "name":"Indigo",
|
||||||
|
* "address":"indigo@podunk.edu",
|
||||||
|
* "url":"http:\/\/podunk.edu",
|
||||||
|
* "photo":{
|
||||||
|
* "mimetype":"image\/jpeg",
|
||||||
|
* "src":"http:\/\/podunk.edu\/photo\/profile\/m\/5"
|
||||||
|
* },
|
||||||
|
* "guid":"kgVFf_...",
|
||||||
|
* "guid_sig":"PT9-TAp..."
|
||||||
|
* }
|
||||||
|
* }
|
||||||
|
* }
|
||||||
|
* }
|
||||||
|
* \endcode
|
||||||
|
*
|
||||||
|
* Currently defined message types are 'activity', 'mail', 'profile', 'location'
|
||||||
|
* and 'channel_sync', which each have different content schemas.
|
||||||
|
*
|
||||||
|
* Ping packet:
|
||||||
|
* A ping packet does not require any parameters except the type. It may or may
|
||||||
|
* not be encrypted.
|
||||||
|
*
|
||||||
|
* \code{.json}
|
||||||
|
* {
|
||||||
|
* "type": "ping"
|
||||||
|
* }
|
||||||
|
* \endcode
|
||||||
|
*
|
||||||
|
* On receipt of a ping packet a ping response will be returned:
|
||||||
|
*
|
||||||
|
* \code{.json}
|
||||||
|
* {
|
||||||
|
* "success" : 1,
|
||||||
|
* "site" {
|
||||||
|
* "url": "http:\/\/podunk.edu",
|
||||||
|
* "url_sig": "T8Bp7j5...",
|
||||||
|
* "sitekey": "-----BEGIN PUBLIC KEY-----
|
||||||
|
* MIICIjANBgkqhkiG9w0BAQE..."
|
||||||
|
* }
|
||||||
|
* }
|
||||||
|
* \endcode
|
||||||
|
*
|
||||||
|
* The ping packet can be used to verify that a site has not been re-installed, and to
|
||||||
|
* initiate corrective action if it has. The url_sig is signed with the site private key
|
||||||
|
* and base64url encoded - and this should verify with the enclosed sitekey. Failure to
|
||||||
|
* verify indicates the site is corrupt or otherwise unable to communicate using zot.
|
||||||
|
* This return packet is not otherwise verified, so should be compared with other
|
||||||
|
* results obtained from this site which were verified prior to taking action. For instance
|
||||||
|
* if you have one verified result with this signature and key, and other records for this
|
||||||
|
* url which have different signatures and keys, it indicates that the site was re-installed
|
||||||
|
* and corrective action may commence (remove or mark invalid any entries with different
|
||||||
|
* signatures).
|
||||||
|
* If you have no records which match this url_sig and key - no corrective action should
|
||||||
|
* be taken as this packet may have been returned by an imposter.
|
||||||
|
*
|
||||||
|
* @param[in,out] App &$a
|
||||||
|
*/
|
||||||
|
|
||||||
35
Zotlabs/Zot/ZotHandler.php
Normal file
35
Zotlabs/Zot/ZotHandler.php
Normal file
@@ -0,0 +1,35 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace Zotlabs\Zot;
|
||||||
|
|
||||||
|
class ZotHandler implements IHandler {
|
||||||
|
|
||||||
|
function Ping() {
|
||||||
|
zot_reply_ping();
|
||||||
|
}
|
||||||
|
|
||||||
|
function Pickup($data) {
|
||||||
|
zot_reply_pickup($data);
|
||||||
|
}
|
||||||
|
|
||||||
|
function Notify($data) {
|
||||||
|
zot_reply_notify($data);
|
||||||
|
}
|
||||||
|
|
||||||
|
function Request($data) {
|
||||||
|
zot_reply_message_request($data);
|
||||||
|
}
|
||||||
|
|
||||||
|
function AuthCheck($data,$encrypted) {
|
||||||
|
zot_reply_auth_check($data,$encrypted);
|
||||||
|
}
|
||||||
|
|
||||||
|
function Purge($sender,$recipients) {
|
||||||
|
zot_reply_purge($sender,$recipients);
|
||||||
|
}
|
||||||
|
|
||||||
|
function Refresh($sender,$recipients) {
|
||||||
|
zot_reply_refresh($sender,$recipients);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
4
app/firefoxshare.apd
Normal file
4
app/firefoxshare.apd
Normal file
@@ -0,0 +1,4 @@
|
|||||||
|
url: $baseurl/ffsapi
|
||||||
|
requires: local_channel
|
||||||
|
name: Firefox Share
|
||||||
|
photo: $baseurl/app/firefoxshare.png
|
||||||
BIN
app/firefoxshare.png
Normal file
BIN
app/firefoxshare.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 3.1 KiB |
4
app/grid.apd
Normal file
4
app/grid.apd
Normal file
@@ -0,0 +1,4 @@
|
|||||||
|
url: $baseurl/network
|
||||||
|
requires: local_channel
|
||||||
|
name: Grid
|
||||||
|
photo: $baseurl/images/hubzilla_logo_6.png
|
||||||
@@ -1,4 +0,0 @@
|
|||||||
url: $baseurl/network
|
|
||||||
requires: local_channel
|
|
||||||
name: Matrix
|
|
||||||
photo: $baseurl/app/matrix.png
|
|
||||||
BIN
app/matrix.png
BIN
app/matrix.png
Binary file not shown.
|
Before Width: | Height: | Size: 3.8 KiB |
212
boot.php
212
boot.php
@@ -7,12 +7,12 @@
|
|||||||
/**
|
/**
|
||||||
* Hubzilla.
|
* Hubzilla.
|
||||||
*
|
*
|
||||||
* The Hubzilla (aka "Red") is an open source decentralised communications
|
* Hubzilla is an open source decentralised communications
|
||||||
* platform combined with a decentralised identity/authentication framework
|
* platform combined with a decentralised identity/authentication framework
|
||||||
* wrapped in an extensible content management system, providing website designers
|
* wrapped in an extensible content management system, providing website designers
|
||||||
* the ability to embed fully decentralised communications and social tools
|
* the ability to embed fully decentralised communications and social tools
|
||||||
* into many traditional website designs (blogs, forums, small business
|
* into many traditional website designs (blogs, forums, small business
|
||||||
* websites, charitable organisations, etc.). Red also provides DNS mobility
|
* websites, charitable organisations, etc.). Hubzilla also provides DNS mobility
|
||||||
* and internet scale privacy/access control.
|
* and internet scale privacy/access control.
|
||||||
*
|
*
|
||||||
* This allows any individual website to participate in a matrix of linked
|
* This allows any individual website to participate in a matrix of linked
|
||||||
@@ -46,10 +46,12 @@ require_once('include/account.php');
|
|||||||
|
|
||||||
|
|
||||||
define ( 'PLATFORM_NAME', 'hubzilla' );
|
define ( 'PLATFORM_NAME', 'hubzilla' );
|
||||||
define ( 'RED_VERSION', trim(file_get_contents('version.inc')) . 'R');
|
define ( 'RED_VERSION', trim(file_get_contents('version.inc')));
|
||||||
|
define ( 'STD_VERSION', '1.2.5' );
|
||||||
define ( 'ZOT_REVISION', 1 );
|
define ( 'ZOT_REVISION', 1 );
|
||||||
|
|
||||||
define ( 'DB_UPDATE_VERSION', 1145 );
|
define ( 'DB_UPDATE_VERSION', 1165 );
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Constant with a HTML line break.
|
* @brief Constant with a HTML line break.
|
||||||
@@ -63,10 +65,10 @@ define ( 'ATOM_TIME', 'Y-m-d\TH:i:s\Z' );
|
|||||||
//define ( 'NULL_DATE', '0000-00-00 00:00:00' );
|
//define ( 'NULL_DATE', '0000-00-00 00:00:00' );
|
||||||
define ( 'TEMPLATE_BUILD_PATH', 'store/[data]/smarty3' );
|
define ( 'TEMPLATE_BUILD_PATH', 'store/[data]/smarty3' );
|
||||||
|
|
||||||
define ( 'DIRECTORY_MODE_NORMAL', 0x0000); // This is technically DIRECTORY_MODE_TERTIARY, but it's the default, hence 0x0000
|
define ( 'DIRECTORY_MODE_NORMAL', 0x0000); // A directory client
|
||||||
define ( 'DIRECTORY_MODE_PRIMARY', 0x0001);
|
define ( 'DIRECTORY_MODE_PRIMARY', 0x0001); // There can only be *one* primary directory server in a directory_realm.
|
||||||
define ( 'DIRECTORY_MODE_SECONDARY', 0x0002);
|
define ( 'DIRECTORY_MODE_SECONDARY', 0x0002); // All other mirror directory servers
|
||||||
define ( 'DIRECTORY_MODE_STANDALONE', 0x0100);
|
define ( 'DIRECTORY_MODE_STANDALONE', 0x0100); // A detached (off the grid) hub with itself as directory server.
|
||||||
|
|
||||||
// We will look for upstream directories whenever me make contact
|
// We will look for upstream directories whenever me make contact
|
||||||
// with other sites, but if this is a new installation and isn't
|
// with other sites, but if this is a new installation and isn't
|
||||||
@@ -78,11 +80,12 @@ define ( 'DIRECTORY_FALLBACK_MASTER', 'https://zothub.com');
|
|||||||
|
|
||||||
$DIRECTORY_FALLBACK_SERVERS = array(
|
$DIRECTORY_FALLBACK_SERVERS = array(
|
||||||
'https://zothub.com',
|
'https://zothub.com',
|
||||||
'https://zotid.net',
|
'https://hubzilla.site',
|
||||||
'https://red.zottel.red',
|
'https://hubzilla.zottel.net',
|
||||||
'https://redmatrix.info',
|
'https://hub.pixelbits.de',
|
||||||
'https://my.federated.social',
|
'https://my.federated.social',
|
||||||
'https://redmatrix.nl'
|
'https://hubzilla.nl',
|
||||||
|
'https://blablanet.es'
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|
||||||
@@ -242,6 +245,21 @@ define ( 'PHOTO_COVER', 0x0010 );
|
|||||||
define ( 'PHOTO_ADULT', 0x0008 );
|
define ( 'PHOTO_ADULT', 0x0008 );
|
||||||
define ( 'PHOTO_FLAG_OS', 0x4000 );
|
define ( 'PHOTO_FLAG_OS', 0x4000 );
|
||||||
|
|
||||||
|
|
||||||
|
define ( 'PHOTO_RES_ORIG', 0 );
|
||||||
|
define ( 'PHOTO_RES_1024', 1 ); // rectangular 1024 max width or height, floating height if not (4:3)
|
||||||
|
define ( 'PHOTO_RES_640', 2 ); // to accomodate SMBC vertical comic strips without scrunching the width
|
||||||
|
define ( 'PHOTO_RES_320', 3 ); // accordingly
|
||||||
|
|
||||||
|
define ( 'PHOTO_RES_PROFILE_300', 4 ); // square 300 px
|
||||||
|
define ( 'PHOTO_RES_PROFILE_80', 5 ); // square 80 px
|
||||||
|
define ( 'PHOTO_RES_PROFILE_48', 6 ); // square 48 px
|
||||||
|
|
||||||
|
define ( 'PHOTO_RES_COVER_1200', 7 ); // 1200w x 435h (2.75:1)
|
||||||
|
define ( 'PHOTO_RES_COVER_850', 8 ); // 850w x 310h
|
||||||
|
define ( 'PHOTO_RES_COVER_425', 9 ); // 425w x 160h
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Menu types
|
* Menu types
|
||||||
*/
|
*/
|
||||||
@@ -253,11 +271,11 @@ define ( 'MENU_BOOKMARK', 0x0002 );
|
|||||||
* Network and protocol family types
|
* Network and protocol family types
|
||||||
*/
|
*/
|
||||||
|
|
||||||
define ( 'NETWORK_DFRN', 'dfrn'); // Friendica, Mistpark, other DFRN implementations
|
define ( 'NETWORK_DFRN', 'friendica-over-diaspora'); // Friendica, Mistpark, other DFRN implementations
|
||||||
define ( 'NETWORK_ZOT', 'zot!'); // Zot!
|
define ( 'NETWORK_ZOT', 'zot'); // Zot!
|
||||||
define ( 'NETWORK_OSTATUS', 'stat'); // status.net, identi.ca, GNU-social, other OStatus implementations
|
define ( 'NETWORK_OSTATUS', 'stat'); // status.net, identi.ca, GNU-social, other OStatus implementations
|
||||||
define ( 'NETWORK_FEED', 'feed'); // RSS/Atom feeds with no known "post/notify" protocol
|
define ( 'NETWORK_FEED', 'rss'); // RSS/Atom feeds with no known "post/notify" protocol
|
||||||
define ( 'NETWORK_DIASPORA', 'dspr'); // Diaspora
|
define ( 'NETWORK_DIASPORA', 'diaspora'); // Diaspora
|
||||||
define ( 'NETWORK_MAIL', 'mail'); // IMAP/POP
|
define ( 'NETWORK_MAIL', 'mail'); // IMAP/POP
|
||||||
define ( 'NETWORK_MAIL2', 'mai2'); // extended IMAP/POP
|
define ( 'NETWORK_MAIL2', 'mai2'); // extended IMAP/POP
|
||||||
define ( 'NETWORK_FACEBOOK', 'face'); // Facebook API
|
define ( 'NETWORK_FACEBOOK', 'face'); // Facebook API
|
||||||
@@ -333,6 +351,12 @@ define ( 'MENU_ITEM_ZID', 0x0001);
|
|||||||
define ( 'MENU_ITEM_NEWWIN', 0x0002);
|
define ( 'MENU_ITEM_NEWWIN', 0x0002);
|
||||||
define ( 'MENU_ITEM_CHATROOM', 0x0004);
|
define ( 'MENU_ITEM_CHATROOM', 0x0004);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
define ( 'SITE_TYPE_ZOT', 0);
|
||||||
|
define ( 'SITE_TYPE_NOTZOT', 1);
|
||||||
|
define ( 'SITE_TYPE_UNKNOWN', 2);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Poll/Survey types
|
* Poll/Survey types
|
||||||
*/
|
*/
|
||||||
@@ -415,6 +439,7 @@ define ( 'TERM_SAVEDSEARCH', 6 );
|
|||||||
define ( 'TERM_THING', 7 );
|
define ( 'TERM_THING', 7 );
|
||||||
define ( 'TERM_BOOKMARK', 8 );
|
define ( 'TERM_BOOKMARK', 8 );
|
||||||
define ( 'TERM_HIERARCHY', 9 );
|
define ( 'TERM_HIERARCHY', 9 );
|
||||||
|
define ( 'TERM_COMMUNITYTAG', 10 );
|
||||||
|
|
||||||
define ( 'TERM_OBJ_POST', 1 );
|
define ( 'TERM_OBJ_POST', 1 );
|
||||||
define ( 'TERM_OBJ_PHOTO', 2 );
|
define ( 'TERM_OBJ_PHOTO', 2 );
|
||||||
@@ -472,6 +497,11 @@ define ( 'ACTIVITY_POST', NAMESPACE_ACTIVITY_SCHEMA . 'post' );
|
|||||||
define ( 'ACTIVITY_UPDATE', NAMESPACE_ACTIVITY_SCHEMA . 'update' );
|
define ( 'ACTIVITY_UPDATE', NAMESPACE_ACTIVITY_SCHEMA . 'update' );
|
||||||
define ( 'ACTIVITY_TAG', NAMESPACE_ACTIVITY_SCHEMA . 'tag' );
|
define ( 'ACTIVITY_TAG', NAMESPACE_ACTIVITY_SCHEMA . 'tag' );
|
||||||
define ( 'ACTIVITY_FAVORITE', NAMESPACE_ACTIVITY_SCHEMA . 'favorite' );
|
define ( 'ACTIVITY_FAVORITE', NAMESPACE_ACTIVITY_SCHEMA . 'favorite' );
|
||||||
|
define ( 'ACTIVITY_CREATE', NAMESPACE_ACTIVITY_SCHEMA . 'create' );
|
||||||
|
define ( 'ACTIVITY_WIN', NAMESPACE_ACTIVITY_SCHEMA . 'win' );
|
||||||
|
define ( 'ACTIVITY_LOSE', NAMESPACE_ACTIVITY_SCHEMA . 'lose' );
|
||||||
|
define ( 'ACTIVITY_TIE', NAMESPACE_ACTIVITY_SCHEMA . 'tie' );
|
||||||
|
define ( 'ACTIVITY_COMPLETE', NAMESPACE_ACTIVITY_SCHEMA . 'complete' );
|
||||||
|
|
||||||
define ( 'ACTIVITY_POKE', NAMESPACE_ZOT . '/activity/poke' );
|
define ( 'ACTIVITY_POKE', NAMESPACE_ZOT . '/activity/poke' );
|
||||||
define ( 'ACTIVITY_MOOD', NAMESPACE_ZOT . '/activity/mood' );
|
define ( 'ACTIVITY_MOOD', NAMESPACE_ZOT . '/activity/mood' );
|
||||||
@@ -484,6 +514,7 @@ define ( 'ACTIVITY_OBJ_P_PHOTO', NAMESPACE_ACTIVITY_SCHEMA . 'profile-photo' );
|
|||||||
define ( 'ACTIVITY_OBJ_ALBUM', NAMESPACE_ACTIVITY_SCHEMA . 'photo-album' );
|
define ( 'ACTIVITY_OBJ_ALBUM', NAMESPACE_ACTIVITY_SCHEMA . 'photo-album' );
|
||||||
define ( 'ACTIVITY_OBJ_EVENT', NAMESPACE_ACTIVITY_SCHEMA . 'event' );
|
define ( 'ACTIVITY_OBJ_EVENT', NAMESPACE_ACTIVITY_SCHEMA . 'event' );
|
||||||
define ( 'ACTIVITY_OBJ_GROUP', NAMESPACE_ACTIVITY_SCHEMA . 'group' );
|
define ( 'ACTIVITY_OBJ_GROUP', NAMESPACE_ACTIVITY_SCHEMA . 'group' );
|
||||||
|
define ( 'ACTIVITY_OBJ_GAME', NAMESPACE_ACTIVITY_SCHEMA . 'game' );
|
||||||
define ( 'ACTIVITY_OBJ_TAGTERM', NAMESPACE_ZOT . '/activity/tagterm' );
|
define ( 'ACTIVITY_OBJ_TAGTERM', NAMESPACE_ZOT . '/activity/tagterm' );
|
||||||
define ( 'ACTIVITY_OBJ_PROFILE', NAMESPACE_ZOT . '/activity/profile' );
|
define ( 'ACTIVITY_OBJ_PROFILE', NAMESPACE_ZOT . '/activity/profile' );
|
||||||
define ( 'ACTIVITY_OBJ_THING', NAMESPACE_ZOT . '/activity/thing' );
|
define ( 'ACTIVITY_OBJ_THING', NAMESPACE_ZOT . '/activity/thing' );
|
||||||
@@ -544,6 +575,9 @@ define ( 'ITEM_TYPE_WEBPAGE', 3 );
|
|||||||
define ( 'ITEM_TYPE_BUG', 4 );
|
define ( 'ITEM_TYPE_BUG', 4 );
|
||||||
define ( 'ITEM_TYPE_DOC', 5 );
|
define ( 'ITEM_TYPE_DOC', 5 );
|
||||||
|
|
||||||
|
define ( 'ITEM_IS_STICKY', 1000 );
|
||||||
|
|
||||||
|
|
||||||
define ( 'DBTYPE_MYSQL', 0 );
|
define ( 'DBTYPE_MYSQL', 0 );
|
||||||
define ( 'DBTYPE_POSTGRES', 1 );
|
define ( 'DBTYPE_POSTGRES', 1 );
|
||||||
|
|
||||||
@@ -589,6 +623,21 @@ function startup() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
class ZotlabsAutoloader {
|
||||||
|
static public function loader($className) {
|
||||||
|
$filename = str_replace('\\', '/', $className) . ".php";
|
||||||
|
if (file_exists($filename)) {
|
||||||
|
include($filename);
|
||||||
|
if (class_exists($className)) {
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* class: App
|
* class: App
|
||||||
*
|
*
|
||||||
@@ -612,10 +661,9 @@ class App {
|
|||||||
public $poi = null; // "person of interest", generally a referenced connection
|
public $poi = null; // "person of interest", generally a referenced connection
|
||||||
private $oauth_key = null; // consumer_id of oauth request, if used
|
private $oauth_key = null; // consumer_id of oauth request, if used
|
||||||
public $layout = array(); // Comanche parsed template
|
public $layout = array(); // Comanche parsed template
|
||||||
public $pdl = null;
|
public $pdl = null; // Comanche page description
|
||||||
private $perms = null; // observer permissions
|
private $perms = null; // observer permissions
|
||||||
private $widgets = array(); // widgets for this page
|
private $widgets = array(); // widgets for this page
|
||||||
//private $widgetlist = null; // widget ordering and inclusion directives
|
|
||||||
|
|
||||||
public $groups;
|
public $groups;
|
||||||
public $language;
|
public $language;
|
||||||
@@ -694,11 +742,18 @@ class App {
|
|||||||
'smarty3' => '}}'
|
'smarty3' => '}}'
|
||||||
);
|
);
|
||||||
|
|
||||||
|
// These represent the URL which was used to access the page
|
||||||
|
|
||||||
private $scheme;
|
private $scheme;
|
||||||
private $hostname;
|
private $hostname;
|
||||||
private $baseurl;
|
|
||||||
private $path;
|
private $path;
|
||||||
|
|
||||||
|
// This is our standardised URL - regardless of what was used
|
||||||
|
// to access the page
|
||||||
|
|
||||||
|
private $baseurl;
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* App constructor.
|
* App constructor.
|
||||||
*/
|
*/
|
||||||
@@ -717,7 +772,6 @@ class App {
|
|||||||
set_include_path(
|
set_include_path(
|
||||||
'include' . PATH_SEPARATOR
|
'include' . PATH_SEPARATOR
|
||||||
. 'library' . PATH_SEPARATOR
|
. 'library' . PATH_SEPARATOR
|
||||||
. 'library/phpsec' . PATH_SEPARATOR
|
|
||||||
. 'library/langdet' . PATH_SEPARATOR
|
. 'library/langdet' . PATH_SEPARATOR
|
||||||
. '.' );
|
. '.' );
|
||||||
|
|
||||||
@@ -801,7 +855,7 @@ class App {
|
|||||||
$this->is_mobile = $mobile_detect->isMobile();
|
$this->is_mobile = $mobile_detect->isMobile();
|
||||||
$this->is_tablet = $mobile_detect->isTablet();
|
$this->is_tablet = $mobile_detect->isTablet();
|
||||||
|
|
||||||
$this->head_set_icon('/images/rm-32.png');
|
$this->head_set_icon('/images/hz-32.png');
|
||||||
|
|
||||||
BaseObject::set_app($this);
|
BaseObject::set_app($this);
|
||||||
|
|
||||||
@@ -814,6 +868,9 @@ class App {
|
|||||||
$this->register_template_engine($k);
|
$this->register_template_engine($k);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
spl_autoload_register('ZotlabsAutoloader::loader');
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
function get_baseurl($ssl = false) {
|
function get_baseurl($ssl = false) {
|
||||||
@@ -823,7 +880,7 @@ class App {
|
|||||||
&& array_key_exists('baseurl',$this->config['system'])
|
&& array_key_exists('baseurl',$this->config['system'])
|
||||||
&& strlen($this->config['system']['baseurl'])) {
|
&& strlen($this->config['system']['baseurl'])) {
|
||||||
$url = $this->config['system']['baseurl'];
|
$url = $this->config['system']['baseurl'];
|
||||||
|
$url = trim($url,'\\/');
|
||||||
return $url;
|
return $url;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -841,6 +898,7 @@ class App {
|
|||||||
&& array_key_exists('baseurl',$this->config['system'])
|
&& array_key_exists('baseurl',$this->config['system'])
|
||||||
&& strlen($this->config['system']['baseurl'])) {
|
&& strlen($this->config['system']['baseurl'])) {
|
||||||
$url = $this->config['system']['baseurl'];
|
$url = $this->config['system']['baseurl'];
|
||||||
|
$url = trim($url,'\\/');
|
||||||
}
|
}
|
||||||
|
|
||||||
$parsed = @parse_url($url);
|
$parsed = @parse_url($url);
|
||||||
@@ -858,6 +916,11 @@ class App {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function get_scheme() {
|
||||||
|
return $this->scheme;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
function get_hostname() {
|
function get_hostname() {
|
||||||
return $this->hostname;
|
return $this->hostname;
|
||||||
}
|
}
|
||||||
@@ -931,26 +994,6 @@ class App {
|
|||||||
return $this->groups;
|
return $this->groups;
|
||||||
}
|
}
|
||||||
|
|
||||||
function set_widget($title,$html, $location = 'aside') {
|
|
||||||
$this->widgets[] = array('title' => $title, 'html' => $html, 'location' => $location);
|
|
||||||
}
|
|
||||||
|
|
||||||
function get_widgets($location = '') {
|
|
||||||
if($location && count($this->widgets)) {
|
|
||||||
$ret = array();
|
|
||||||
foreach($this->widgets as $w) {
|
|
||||||
if ($w['location'] == $location)
|
|
||||||
$ret[] = $w;
|
|
||||||
}
|
|
||||||
$arr = array('location' => $location, 'widgets' => $ret);
|
|
||||||
call_hooks('get_widgets', $arr);
|
|
||||||
return $arr['widgets'];
|
|
||||||
}
|
|
||||||
$arr = array('location' => $location, 'widgets' => $this->widgets);
|
|
||||||
call_hooks('get_widgets', $arr);
|
|
||||||
return $arr['widgets'];
|
|
||||||
}
|
|
||||||
|
|
||||||
function set_pager_total($n) {
|
function set_pager_total($n) {
|
||||||
$this->pager['total'] = intval($n);
|
$this->pager['total'] = intval($n);
|
||||||
}
|
}
|
||||||
@@ -966,6 +1009,10 @@ class App {
|
|||||||
if ($user_scalable === false)
|
if ($user_scalable === false)
|
||||||
$user_scalable = 1;
|
$user_scalable = 1;
|
||||||
|
|
||||||
|
$preload_images = ((local_channel()) ? get_pconfig(local_channel(),'system','preload_images') : 0);
|
||||||
|
if ($preload_images === false)
|
||||||
|
$preload_images = 0;
|
||||||
|
|
||||||
$interval = ((local_channel()) ? get_pconfig(local_channel(),'system','update_interval') : 80000);
|
$interval = ((local_channel()) ? get_pconfig(local_channel(),'system','update_interval') : 80000);
|
||||||
if($interval < 10000)
|
if($interval < 10000)
|
||||||
$interval = 80000;
|
$interval = 80000;
|
||||||
@@ -979,10 +1026,11 @@ class App {
|
|||||||
*/
|
*/
|
||||||
$tpl = get_markup_template('head.tpl');
|
$tpl = get_markup_template('head.tpl');
|
||||||
$this->page['htmlhead'] = replace_macros($tpl, array(
|
$this->page['htmlhead'] = replace_macros($tpl, array(
|
||||||
|
'$preload_images' => $preload_images,
|
||||||
'$user_scalable' => $user_scalable,
|
'$user_scalable' => $user_scalable,
|
||||||
'$baseurl' => $this->get_baseurl(),
|
'$baseurl' => $this->get_baseurl(),
|
||||||
'$local_channel' => local_channel(),
|
'$local_channel' => local_channel(),
|
||||||
'$generator' => PLATFORM_NAME . ' ' . RED_VERSION,
|
'$generator' => Zotlabs\Project\System::get_platform_name() . ((Zotlabs\Project\System::get_project_version()) ? ' ' . Zotlabs\Project\System::get_project_version() : ''),
|
||||||
'$update_interval' => $interval,
|
'$update_interval' => $interval,
|
||||||
'$icon' => head_get_icon(),
|
'$icon' => head_get_icon(),
|
||||||
'$head_css' => head_get_css(),
|
'$head_css' => head_get_css(),
|
||||||
@@ -1056,18 +1104,7 @@ class App {
|
|||||||
}
|
}
|
||||||
|
|
||||||
function set_template_engine($engine = 'smarty3') {
|
function set_template_engine($engine = 'smarty3') {
|
||||||
|
|
||||||
$this->theme['template_engine'] = $engine;
|
$this->theme['template_engine'] = $engine;
|
||||||
|
|
||||||
/*if ($engine) {
|
|
||||||
case 'smarty3':
|
|
||||||
if(!is_writable(TEMPLATE_BUILD_PATH))
|
|
||||||
echo "<b>ERROR</b> folder <tt>" . TEMPLATE_BUILD_PATH . "</tt> must be writable by webserver."; killme();
|
|
||||||
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
break;
|
|
||||||
}*/
|
|
||||||
}
|
}
|
||||||
|
|
||||||
function get_template_ldelim($engine = 'smarty3') {
|
function get_template_ldelim($engine = 'smarty3') {
|
||||||
@@ -1180,7 +1217,7 @@ function z_root() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Return absolut URL for given $path.
|
* @brief Return absolute URL for given $path.
|
||||||
*
|
*
|
||||||
* @param string $path
|
* @param string $path
|
||||||
*
|
*
|
||||||
@@ -1346,7 +1383,7 @@ function check_config(&$a) {
|
|||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
$r = q("SELECT * FROM `addon` WHERE `installed` = 1");
|
$r = q("SELECT * FROM addon WHERE installed = 1");
|
||||||
if($r)
|
if($r)
|
||||||
$installed = $r;
|
$installed = $r;
|
||||||
else
|
else
|
||||||
@@ -1382,6 +1419,9 @@ function check_config(&$a) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
load_hooks();
|
load_hooks();
|
||||||
|
|
||||||
|
check_cron_broken();
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -1492,12 +1532,6 @@ function login($register = false, $form_id = 'main-login', $hiddens=false) {
|
|||||||
$tpl = get_markup_template("logout.tpl");
|
$tpl = get_markup_template("logout.tpl");
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
// There's no such thing as login_head.tpl, has never been in Red, removed from Friendica 1 Jun 2013...
|
|
||||||
|
|
||||||
// $a->page['htmlhead'] .= replace_macros(get_markup_template("login_head.tpl"), array(
|
|
||||||
// '$baseurl' => $a->get_baseurl(true)
|
|
||||||
// ));
|
|
||||||
|
|
||||||
$tpl = get_markup_template("login.tpl");
|
$tpl = get_markup_template("login.tpl");
|
||||||
if(strlen($a->query_string))
|
if(strlen($a->query_string))
|
||||||
$_SESSION['login_return_url'] = $a->query_string;
|
$_SESSION['login_return_url'] = $a->query_string;
|
||||||
@@ -1548,6 +1582,10 @@ function goaway($s) {
|
|||||||
* @return int|bool account_id or false
|
* @return int|bool account_id or false
|
||||||
*/
|
*/
|
||||||
function get_account_id() {
|
function get_account_id() {
|
||||||
|
|
||||||
|
if(intval($_SESSION['account_id']))
|
||||||
|
return intval($_SESSION['account_id']);
|
||||||
|
|
||||||
if(get_app()->account)
|
if(get_app()->account)
|
||||||
return intval(get_app()->account['account_id']);
|
return intval(get_app()->account['account_id']);
|
||||||
|
|
||||||
@@ -1718,8 +1756,12 @@ function proc_run($cmd){
|
|||||||
$cmd = "cmd /c start \"title\" /D \"$cwd\" /b $cmdline";
|
$cmd = "cmd /c start \"title\" /D \"$cwd\" /b $cmdline";
|
||||||
proc_close(proc_open($cmd, array(), $foo));
|
proc_close(proc_open($cmd, array(), $foo));
|
||||||
}
|
}
|
||||||
else
|
else {
|
||||||
|
if(get_config('system','use_proc_open'))
|
||||||
proc_close(proc_open($cmdline ." &", array(), $foo));
|
proc_close(proc_open($cmdline ." &", array(), $foo));
|
||||||
|
else
|
||||||
|
exec($cmdline . ' > /dev/null &');
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -2002,10 +2044,17 @@ function load_pdl(&$a) {
|
|||||||
require_once('include/comanche.php');
|
require_once('include/comanche.php');
|
||||||
|
|
||||||
if (! count($a->layout)) {
|
if (! count($a->layout)) {
|
||||||
|
|
||||||
|
$arr = array('module' => $a->module, 'layout' => '');
|
||||||
|
call_hooks('load_pdl',$arr);
|
||||||
|
$layout = $arr['layout'];
|
||||||
|
|
||||||
$n = 'mod_' . $a->module . '.pdl' ;
|
$n = 'mod_' . $a->module . '.pdl' ;
|
||||||
$u = comanche_get_channel_id();
|
$u = comanche_get_channel_id();
|
||||||
if($u)
|
if($u)
|
||||||
$s = get_pconfig($u, 'system', $n);
|
$s = get_pconfig($u, 'system', $n);
|
||||||
|
if(! $s)
|
||||||
|
$s = $layout;
|
||||||
|
|
||||||
if((! $s) && (($p = theme_include($n)) != ''))
|
if((! $s) && (($p = theme_include($n)) != ''))
|
||||||
$s = @file_get_contents($p);
|
$s = @file_get_contents($p);
|
||||||
@@ -2014,6 +2063,7 @@ function load_pdl(&$a) {
|
|||||||
$a->pdl = $s;
|
$a->pdl = $s;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -2075,15 +2125,8 @@ function construct_page(&$a) {
|
|||||||
|
|
||||||
$a->build_pagehead();
|
$a->build_pagehead();
|
||||||
|
|
||||||
$arr = $a->get_widgets();
|
if($a->page['pdl_content']) {
|
||||||
ksort($arr, SORT_NUMERIC);
|
$a->page['content'] = comanche_region($a,$a->page['content']);
|
||||||
if(count($arr)) {
|
|
||||||
foreach($arr as $x) {
|
|
||||||
if(! array_key_exists($x['location'], $a->page))
|
|
||||||
$a->page[$x['location']] = '';
|
|
||||||
|
|
||||||
$a->page[$x['location']] .= $x['html'];
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Let's say we have a comanche declaration '[region=nav][/region][region=content]$nav $content[/region]'.
|
// Let's say we have a comanche declaration '[region=nav][/region][region=content]$nav $content[/region]'.
|
||||||
@@ -2100,6 +2143,7 @@ function construct_page(&$a) {
|
|||||||
call_hooks('construct_page', $arr);
|
call_hooks('construct_page', $arr);
|
||||||
$a->layout = $arr['layout'];
|
$a->layout = $arr['layout'];
|
||||||
|
|
||||||
|
|
||||||
foreach($a->layout as $k => $v) {
|
foreach($a->layout as $k => $v) {
|
||||||
if((strpos($k, 'region_') === 0) && strlen($v)) {
|
if((strpos($k, 'region_') === 0) && strlen($v)) {
|
||||||
if(strpos($v, '$region_') !== false) {
|
if(strpos($v, '$region_') !== false) {
|
||||||
@@ -2143,6 +2187,24 @@ function construct_page(&$a) {
|
|||||||
|
|
||||||
header("Content-type: text/html; charset=utf-8");
|
header("Content-type: text/html; charset=utf-8");
|
||||||
|
|
||||||
|
// security headers - see https://securityheaders.io
|
||||||
|
|
||||||
|
if($a->get_scheme() === 'https' && $a->config['system']['transport_security_header'])
|
||||||
|
header("Strict-Transport-Security: max-age=31536000");
|
||||||
|
|
||||||
|
if($a->config['system']['content_security_policy'])
|
||||||
|
header("Content-Security-Policy: script-src 'self' 'unsafe-inline' 'unsafe-eval'; style-src 'self' 'unsafe-inline'");
|
||||||
|
|
||||||
|
if($a->config['system']['x_security_headers']) {
|
||||||
|
header("X-Frame-Options: SAMEORIGIN");
|
||||||
|
header("X-Xss-Protection: 1; mode=block;");
|
||||||
|
header("X-Content-Type-Options: nosniff");
|
||||||
|
}
|
||||||
|
|
||||||
|
if($a->config['system']['public_key_pins']) {
|
||||||
|
header("Public-Key-Pins: " . $a->config['system']['public_key_pins']);
|
||||||
|
}
|
||||||
|
|
||||||
require_once(theme_include(
|
require_once(theme_include(
|
||||||
((x($a->page, 'template')) ? $a->page['template'] : 'default' ) . '.php' )
|
((x($a->page, 'template')) ? $a->page['template'] : 'default' ) . '.php' )
|
||||||
);
|
);
|
||||||
@@ -2271,7 +2333,7 @@ function cert_bad_email() {
|
|||||||
'$error' => t('Website SSL certificate is not valid. Please correct.')
|
'$error' => t('Website SSL certificate is not valid. Please correct.')
|
||||||
));
|
));
|
||||||
|
|
||||||
$subject = email_header_encode(sprintf(t('[red] Website SSL error for %s'), $a->get_hostname()));
|
$subject = email_header_encode(sprintf(t('[hubzilla] Website SSL error for %s'), $a->get_hostname()));
|
||||||
mail($a->config['system']['admin_email'], $subject, $email_msg,
|
mail($a->config['system']['admin_email'], $subject, $email_msg,
|
||||||
'From: Administrator' . '@' . $a->get_hostname() . "\n"
|
'From: Administrator' . '@' . $a->get_hostname() . "\n"
|
||||||
. 'Content-type: text/plain; charset=UTF-8' . "\n"
|
. 'Content-type: text/plain; charset=UTF-8' . "\n"
|
||||||
@@ -2312,7 +2374,7 @@ function check_cron_broken() {
|
|||||||
'$lastdate' => (($d)? $d : t('never'))
|
'$lastdate' => (($d)? $d : t('never'))
|
||||||
));
|
));
|
||||||
|
|
||||||
$subject = email_header_encode(sprintf(t('[red] Cron tasks not running on %s'), $a->get_hostname()));
|
$subject = email_header_encode(sprintf(t('[hubzilla] Cron tasks not running on %s'), $a->get_hostname()));
|
||||||
mail($a->config['system']['admin_email'], $subject, $email_msg,
|
mail($a->config['system']['admin_email'], $subject, $email_msg,
|
||||||
'From: Administrator' . '@' . $a->get_hostname() . "\n"
|
'From: Administrator' . '@' . $a->get_hostname() . "\n"
|
||||||
. 'Content-type: text/plain; charset=UTF-8' . "\n"
|
. 'Content-type: text/plain; charset=UTF-8' . "\n"
|
||||||
@@ -2320,3 +2382,5 @@ function check_cron_broken() {
|
|||||||
set_config('system','lastpollcheck',datetime_convert());
|
set_config('system','lastpollcheck',datetime_convert());
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -57,9 +57,9 @@ Private messages are encrypted during transport and storage. In this day and age
|
|||||||
|
|
||||||
This provides the ability to select posts by date ranges
|
This provides the ability to select posts by date ranges
|
||||||
|
|
||||||
**Collections Filter**
|
**Privacy Group Filter**
|
||||||
|
|
||||||
Enable widget to display stream posts only from selected collections. This also toggles the outbound permissions while you are viewing a collection. This is analogous to Google "circles" or Disapora "aspects".
|
Enable widget to display stream posts only from selected groups of connection. This also toggles the outbound permissions while you are viewing a privacy group. This is analogous to Google "circles" or Disapora "aspects".
|
||||||
|
|
||||||
**Saved Searches**
|
**Saved Searches**
|
||||||
|
|
||||||
|
|||||||
136
doc/Hooks.md
136
doc/Hooks.md
@@ -1,136 +0,0 @@
|
|||||||
Hooks - Complete List
|
|
||||||
=====================
|
|
||||||
|
|
||||||
|
|
||||||
* 'about_hook'
|
|
||||||
* 'account_settings'
|
|
||||||
* 'app_menu'
|
|
||||||
* 'atom_author'
|
|
||||||
* 'atom_entry'
|
|
||||||
* 'atom_feed'
|
|
||||||
* 'atom_feed_end'
|
|
||||||
* 'authenticate'
|
|
||||||
* 'avatar_lookup'
|
|
||||||
* 'bb2diaspora'
|
|
||||||
* 'bbcode'
|
|
||||||
* 'channel_remove'
|
|
||||||
* 'check_account_email'
|
|
||||||
* 'check_account_invite'
|
|
||||||
* 'check_account_password'
|
|
||||||
* 'connect_premium'
|
|
||||||
* 'connector_settings'
|
|
||||||
* 'contact_block_end'
|
|
||||||
* 'contact_edit'
|
|
||||||
* 'contact_edit_post'
|
|
||||||
* 'contact_photo_menu'
|
|
||||||
* 'contact_select_options'
|
|
||||||
* 'conversation_start'
|
|
||||||
* 'cron'
|
|
||||||
* 'directory_item'
|
|
||||||
* 'display_item'
|
|
||||||
* 'display_item'
|
|
||||||
* 'display_settings'
|
|
||||||
* 'display_settings_post'
|
|
||||||
* 'enotify'
|
|
||||||
* 'enotify_mail'
|
|
||||||
* 'enotify_store'
|
|
||||||
* 'event_created'
|
|
||||||
* 'event_updated'
|
|
||||||
* 'feature_enabled'
|
|
||||||
* 'feature_settings'
|
|
||||||
* 'feature_settings_post'
|
|
||||||
* 'follow'
|
|
||||||
* 'gender_selector'
|
|
||||||
* 'get_all_perms'
|
|
||||||
* 'get_features'
|
|
||||||
* 'get_widgets'
|
|
||||||
* 'global_permissions'
|
|
||||||
* 'home_content'
|
|
||||||
* 'home_init'
|
|
||||||
* 'html2bbcode'
|
|
||||||
* 'import_directory_profile'
|
|
||||||
* 'init_1'
|
|
||||||
* 'item_photo_menu'
|
|
||||||
* 'item_translate'
|
|
||||||
* 'jot_networks'
|
|
||||||
* 'jot_tool'
|
|
||||||
* 'logged_in'
|
|
||||||
* 'login_hook'
|
|
||||||
* 'logging_out'
|
|
||||||
* 'magic_auth'
|
|
||||||
* 'magic_auth_success'
|
|
||||||
* 'main_slider'
|
|
||||||
* 'marital_selector'
|
|
||||||
* 'mood_verbs'
|
|
||||||
* 'network_content_init'
|
|
||||||
* 'network_ping'
|
|
||||||
* 'network_tabs'
|
|
||||||
* 'network_to_name'
|
|
||||||
* 'notifier_end'
|
|
||||||
* 'notifier_normal'
|
|
||||||
* 'obj_verbs'
|
|
||||||
* 'oembed_probe'
|
|
||||||
* 'page_content_top'
|
|
||||||
* 'page_end'
|
|
||||||
* 'page_header'
|
|
||||||
* 'parse_atom'
|
|
||||||
* 'parse_link'
|
|
||||||
* 'pdl_selector'
|
|
||||||
* 'perm_is_allowed'
|
|
||||||
* 'personal_xrd'
|
|
||||||
* 'photo_post_end'
|
|
||||||
* 'photo_post_end'
|
|
||||||
* 'photo_upload_begin'
|
|
||||||
* 'photo_upload_end'
|
|
||||||
* 'photo_upload_file'
|
|
||||||
* 'photo_upload_form'
|
|
||||||
* 'poke_verbs'
|
|
||||||
* 'post_local'
|
|
||||||
* 'post_local_end'
|
|
||||||
* 'post_local_start'
|
|
||||||
* 'post_mail'
|
|
||||||
* 'post_mail_end'
|
|
||||||
* 'post_remote'
|
|
||||||
* 'post_remote_end'
|
|
||||||
* 'post_remote_update'
|
|
||||||
* 'post_remote_update_end'
|
|
||||||
* 'prepare_body'
|
|
||||||
* 'prepare_body_final'
|
|
||||||
* 'prepare_body_init'
|
|
||||||
* 'proc_run'
|
|
||||||
* 'profile_advanced'
|
|
||||||
* 'profile_edit'
|
|
||||||
* 'profile_post'
|
|
||||||
* 'profile_sidebar'
|
|
||||||
* 'profile_sidebar_enter'
|
|
||||||
* 'profile_tabs'
|
|
||||||
* 'register_account'
|
|
||||||
* 'render_location'
|
|
||||||
* 'settings_account'
|
|
||||||
* 'settings_form'
|
|
||||||
* 'settings_post'
|
|
||||||
* 'sexpref_selector'
|
|
||||||
* 'smilie'
|
|
||||||
* 'validate_channelname'
|
|
||||||
* 'webfinger'
|
|
||||||
* 'zid'
|
|
||||||
* 'zid_init'
|
|
||||||
|
|
||||||
***General Module Hooks***
|
|
||||||
|
|
||||||
* $a->module . '_mod_aftercontent'
|
|
||||||
* $a->module . '_mod_aside'
|
|
||||||
* $a->module . '_mod_content'
|
|
||||||
* $a->module . '_mod_init'
|
|
||||||
* $a->module . '_mod_post'
|
|
||||||
|
|
||||||
***General Selector Hooks***
|
|
||||||
|
|
||||||
* $a->module . '_post_' . $selname
|
|
||||||
* $a->module . '_post_' . $selname
|
|
||||||
* $a->module . '_post_' . $selname
|
|
||||||
* $a->module . '_pre_' . $selname
|
|
||||||
* $a->module . '_pre_' . $selname
|
|
||||||
* $a->module . '_pre_' . $selname
|
|
||||||
|
|
||||||
#include doc/macros/main_footer.bb;
|
|
||||||
105
doc/Hubzilla_on_OpenShift.bb
Normal file
105
doc/Hubzilla_on_OpenShift.bb
Normal file
@@ -0,0 +1,105 @@
|
|||||||
|
[b]Hubzilla on OpenShift[/b]
|
||||||
|
You will notice a new .openshift folder when you fetch from upstream, i.e. from [url=https://github.com/redmatrix/hubzilla.git]https://github.com/redmatrix/hubzilla.git[/url] , which contains a deploy script to set up Hubzilla on OpenShift with plugins and extra themes.
|
||||||
|
|
||||||
|
As of this writing, 2015-10-28, you do not have to pay for OpenShift on the Free plan, which gives you three gears at no cost. The Bronze plan gives you three gears at no cost too, but you can expand to 16 gears by paying, and this requires you to register your payment card. The three gears can give three instances of Hubzilla with one gear each, or you can combine two gears into one high-availability Hubzilla instance and one extra gear. The main difference to be aware of is this: gears on the Free plan will go into hibernation if left idle for too long, this does not happen on the Bronze plan.
|
||||||
|
|
||||||
|
Create an account on OpenShift, then use the registration e-mail and password to create your first Hubzilla instance. Install git and RedHat's command line tools - rhc - if you have not already done so. See for example https://developers.openshift.com/en/getting-started-debian-ubuntu.html on how to do this on Debian GNU/Linux, or in the menu on that page for other GNU/Linux distributions or other operating systems.
|
||||||
|
|
||||||
|
[code]rhc app-create your_app_name php-5.4 mysql-5.5 cron phpmyadmin --namespace your_domain --from-code https://github.com/redmatrix/hubzilla.git -l your@email.address -p your_account_password
|
||||||
|
[/code]
|
||||||
|
|
||||||
|
Make a note of the database username and password OpenShift creates for your instance, and use these at [url=https://your_app_name-your_domain.rhcloud.com/]https://your_app_name-your_domain.rhcloud.com/[/url] to complete the setup. You MUST change server address from 127.0.0.1 to localhost.
|
||||||
|
|
||||||
|
NOTE: PostgreSQL is NOT supported by the deploy script yet, see [zrl=https://zot-mor.rhcloud.com/display/3c7035f2a6febf87057d84ea0ae511223e9b38dc27913177bc0df053edecac7c@zot-mor.rhcloud.com?zid=haakon%40zot-mor.rhcloud.com]this thread[/zrl].
|
||||||
|
|
||||||
|
[b]Update[/b]
|
||||||
|
To update, consider your own workflow first. I have forked Hubzilla code into my GitHub account to be able to try things out, this remote repo is called origin. Here is how I fetch new code from upstream, merge into my local repo, then push the updated code both into origin and the remote repo called openshift.
|
||||||
|
|
||||||
|
[code]git fetch upstream;git checkout master;git merge upstream/master;git push origin;git push openshift HEAD
|
||||||
|
[/code]
|
||||||
|
|
||||||
|
[b]Administration[/b]
|
||||||
|
Symptoms of need for MySQL database administration are:
|
||||||
|
[list]
|
||||||
|
[*] you can visit your domain and see the Hubzilla frontpage, but trying to login throws you back to login. This can mean your session table is marked as crashed.
|
||||||
|
[*] you can login, but your channel posts are not visible. This can mean your item table is marked as crashed.
|
||||||
|
[*] you can login and you can see your channel posts, but apparently nobody is getting your posts, comments, likes and so on. This can mean your outq table is marked as crashed.
|
||||||
|
[/list]
|
||||||
|
|
||||||
|
You can check your OpenShift logs by doing
|
||||||
|
|
||||||
|
[code]
|
||||||
|
rhc tail -a your_app_name -n your_domain -l your@email.address -p your_account_password
|
||||||
|
[/code]
|
||||||
|
|
||||||
|
and you might be able to confirm the above suspicions about crashed tables, or other problems you need to fix.
|
||||||
|
|
||||||
|
[b]How to fix crashed tables in MySQL[/b]
|
||||||
|
Using MySQL and the MyISAM database engine can result in table indexes coming out of sync, and you have at least two options for fixing tables marked as crashed.
|
||||||
|
[list]
|
||||||
|
[*] Use the database username and password OpenShift creates for your instance at [url=https://your_app_name-your_domain.rhcloud.com/phpmyadmin/]https://your_app_name-your_domain.rhcloud.com/phpmyadmin/[/url] to login via the web into your phpMyAdmin web interface, click your database in the left column, in the right column scroll down to the bottom of the list of tables and click the checkbox for marking all tables, then select Check tables from the drop down menu. This will check the tables for problems, and you can then checkmark only those tables with problems, and select Repair table from the same drop down menu at the bottom.
|
||||||
|
[*] You can port-forward the MySQL database service to your own machine and use the MySQL client called mysqlcheck to check, repair and optimize your database or individual database tables without stopping the MySQL service on OpenShift. Run the following in two separate console windows.
|
||||||
|
|
||||||
|
To port-forward do
|
||||||
|
|
||||||
|
[code]rhc port-forward -a your_app_name -n your_domain -l your@email.address -p your_password[/code]
|
||||||
|
|
||||||
|
in one console window, then do either -o for optimize, -c for check or -r for repair, like this
|
||||||
|
|
||||||
|
[code]mysqlcheck -h 127.0.0.1 -r your_app_name -u your_app_admin_name -p[/code]
|
||||||
|
|
||||||
|
and give the app's password at the prompt. If all goes well you should see a number of table names with an OK behind them.
|
||||||
|
|
||||||
|
You can now
|
||||||
|
[code]Press CTRL-C to terminate port forwarding[/code]
|
||||||
|
[*] You can do
|
||||||
|
|
||||||
|
[code]rhc cartridge stop mysql-5.5 -a your_app_name[/code]
|
||||||
|
|
||||||
|
to stop the MySQL service running in your app on OpenShift before running myisamchk - which should only be run when MySQL is stopped, and then
|
||||||
|
login to your instance with SSH - see OpenShift for details - and do
|
||||||
|
|
||||||
|
[code]cd mysql/data/your_database
|
||||||
|
myisamchk -r *.MYI[/code]
|
||||||
|
|
||||||
|
or if you get
|
||||||
|
|
||||||
|
[code]Can't create new tempfile[/code]
|
||||||
|
|
||||||
|
check your OpenShift's gear quota with
|
||||||
|
|
||||||
|
[code]quota -gus[/code]
|
||||||
|
|
||||||
|
and if you are short on space, then locally (not SSH) do
|
||||||
|
|
||||||
|
[code]rhc app-tidy your_app_name -l your_login -p your_password[/code]
|
||||||
|
|
||||||
|
to have rhc delete temporary files and OpenShift logs to free space first, then check the size of your local repo dir and execute
|
||||||
|
|
||||||
|
[code]git gc[/code]
|
||||||
|
|
||||||
|
against it and check the size again, and then to minimize your remote repo connect via SSH to your application gear and execute the same command against it by changing to the remote repo directory - your repo should be in
|
||||||
|
|
||||||
|
[code]~/git/your_app_name.git[/code]
|
||||||
|
|
||||||
|
(if not, do find -size +1M to find it), then do
|
||||||
|
|
||||||
|
[code]
|
||||||
|
cd
|
||||||
|
cd mysql/data/yourdatabase
|
||||||
|
myisamchk -r -v -f*.MYI[/code]
|
||||||
|
|
||||||
|
and hopefully your database tables are now okay.
|
||||||
|
You can now start the MySQL service on OpenShift by locally doing
|
||||||
|
|
||||||
|
[code]rhc cartridge start mysql-5.5 -a your_app_name[/code]
|
||||||
|
[/list]
|
||||||
|
|
||||||
|
[b]Notes[/b]
|
||||||
|
[list]
|
||||||
|
[*] definitely DO turn off feeds and discovery by default and limit delivery reports from 30 days to 3 days if you are on the Free or Bronze plan on OpenShift with a single 1Gb gear by visiting [observer.baseurl]/admin/site when logged in as administrator of your Hubzilla site.
|
||||||
|
[*] The above defaults have been added into the deploy script.
|
||||||
|
[*] DO add git gc to the deploy script
|
||||||
|
[*] MAYBE DO add myisamchk - only checking? to the end of the deploy script.
|
||||||
|
[*] mysqlcheck is similar in function to myisamchk, but works differently. The main operational difference is that mysqlcheck must be used when the mysqld server is running, whereas myisamchk should be used when it is not. The benefit of using mysqlcheck is that you do not have to stop the server to perform table maintenance - this means this documenation should be fixed.
|
||||||
|
[/list]
|
||||||
@@ -1,25 +1,28 @@
|
|||||||
#Privacy Policy
|
Privacy Policy
|
||||||
|
==============
|
||||||
|
|
||||||
|
|
||||||
|
##Summary##
|
||||||
|
|
||||||
##Summary
|
|
||||||
|
|
||||||
Q: Who can see my content?
|
Q: Who can see my content?
|
||||||
|
|
||||||
A: By default ANYBODY on the internet, UNLESS you restrict it. The $Projectname allows you to choose the privacy level you desire. Restricted content will NOT be visible to spy networks and their advertisers. It will be protected against eavesdropping by outsiders - to the best of our ability. Hub administrators with sufficient skills and patience MAY be able to eavesdrop on some private communications but they must expend effort to do so. Privacy modes exist within the $Projectname which are even resistant to eavesdropping by skilled and determined hub administrators.
|
A: By default ANYBODY on the internet, UNLESS you restrict it. $Projectname allows you to choose the privacy level you desire. Restricted content will NOT be visible to "spy networks" and advertisers. It will be protected against eavesdropping by outsiders - to the best of our ability. Hub administrators with sufficient skills and patience MAY be able to eavesdrop on some private communications but they must expend effort to do so. Privacy modes exist within $Projectname which are even resistant to eavesdropping by skilled and determined hub administrators.
|
||||||
|
|
||||||
Q: Can my content be censored?
|
Q: Can my content be censored?
|
||||||
|
|
||||||
A: The $Projectname (the network) CANNOT censor your content. Server and hub administrators are subject to local laws and MAY remove objectionable content from their site/hub. Anybody MAY become a hub administrator, including you; and therefore publish content which might otherwise be censored. You still MAY be subject to local laws.
|
A: $Projectname (the network) CANNOT censor your content. Server and hub administrators are subject to local laws and MAY remove objectionable content from their site/hub. Anybody MAY become a hub administrator, including you; and therefore publish content which might otherwise be censored. You still MAY be subject to local laws.
|
||||||
|
|
||||||
|
|
||||||
##Definitions
|
##Definitions
|
||||||
|
|
||||||
**$Projectname**
|
**$Projectname**
|
||||||
|
|
||||||
Otherwise referred to as "the network", the $Projectname is a collection of individual computers/servers (aka **hubs**) which connect together to form a larger cooperative network.
|
Otherwise referred to as "the network", $Projectname is a collection of individual computers/servers (aka **hubs**) which connect together to form a larger cooperative network.
|
||||||
|
|
||||||
**hub**
|
**hub**
|
||||||
|
|
||||||
An individual computer or server connected to the $Projectname. These are provided by a **hub administrator** and may be public or private, paid or free.
|
An individual computer or server connected to $Projectname. These are provided by a **hub administrator** and may be public or private, paid or free.
|
||||||
|
|
||||||
**hub administrator**
|
**hub administrator**
|
||||||
|
|
||||||
@@ -29,7 +32,7 @@ The system operator of an individual hub.
|
|||||||
|
|
||||||
**Public Information**
|
**Public Information**
|
||||||
|
|
||||||
Any information or anything posted by you within the $Projectname MAY be public or visible to anybody on the internet. To the extent possible, the $Projectname allows you to protect content and restrict who can view it.
|
Any information or anything posted by you within $Projectname MAY be public or visible to anybody on the internet. To the extent possible, $Projectname allows you to protect content and restrict who can view it.
|
||||||
|
|
||||||
Your profile photo, your channel name, and the location (URL or network address) of your channel are visible to anybody on the internet and privacy controls will not affect the display of these items.
|
Your profile photo, your channel name, and the location (URL or network address) of your channel are visible to anybody on the internet and privacy controls will not affect the display of these items.
|
||||||
|
|
||||||
@@ -37,7 +40,7 @@ You MAY additionally provide other profile information. Any information which yo
|
|||||||
|
|
||||||
**Content**
|
**Content**
|
||||||
|
|
||||||
Content you provide (status posts, photos, files, etc.) belongs to you. The $Projectname default is to publish content openly and visible to anybody on the internet (PUBLIC). You MAY control this in your channel settings and restrict the default permissions or you MAY restrict the visibility of any single published item separately (PRIVATE). The $Projectname developers will ensure that restricted content is ONLY visible to those in the restriction list - to the best of their ability.
|
Content you provide (status posts, photos, files, etc.) belongs to you. The $Projectname default is to publish content openly and visible to anybody on the internet (PUBLIC). You MAY control this in your channel settings and restrict the default permissions or you MAY restrict the visibility of any single published item separately (PRIVATE). $Projectname developers will ensure that restricted content is ONLY visible to those in the restriction list - to the best of their ability.
|
||||||
|
|
||||||
Content (especially status posts) that you share with other networks or that you have made visible to anybody on the internet (PUBLIC) cannot easily be taken back once it has been published. It MAY be shared with other networks and made available through RSS/Atom feeds. It may also be syndicated on other $Projectname sites. It MAY appear on spy networks and internet searches. If you do not wish this default behaviour please adjust your channel settings and restrict who can see your content.
|
Content (especially status posts) that you share with other networks or that you have made visible to anybody on the internet (PUBLIC) cannot easily be taken back once it has been published. It MAY be shared with other networks and made available through RSS/Atom feeds. It may also be syndicated on other $Projectname sites. It MAY appear on spy networks and internet searches. If you do not wish this default behaviour please adjust your channel settings and restrict who can see your content.
|
||||||
|
|
||||||
@@ -45,28 +48,29 @@ Content (especially status posts) that you share with other networks or that you
|
|||||||
|
|
||||||
Comments to posts that were created by others and posts which are designated as forum posts belong to you as the creator/author, but the distribution of these posts is not under your direct control. These posts/comments MAY be re-distributed to others, and MAY be visible to anybody on the internet. In the case of comments, the creator of the "first message" in the thread to which you are replying controls the distribution of all comments and replies to that message.
|
Comments to posts that were created by others and posts which are designated as forum posts belong to you as the creator/author, but the distribution of these posts is not under your direct control. These posts/comments MAY be re-distributed to others, and MAY be visible to anybody on the internet. In the case of comments, the creator of the "first message" in the thread to which you are replying controls the distribution of all comments and replies to that message.
|
||||||
|
|
||||||
|
|
||||||
**Private Information**
|
**Private Information**
|
||||||
|
|
||||||
$Projectname developers will ensure that any content you provide which is designated as PRIVATE will be protected against eavesdropping - to the best of their ability. Private content is generally hidden or obscured even from hub administrators. It is also stripped from email notifications. It is difficult but NOT impossible for this content to be seen by a hub administrator. This is a side effect of the physical laws of the universe. Unfortunately, if a database needs to decrypt a post at display time, it must have the means to decrypt the post! End to end encryption is also provided and this CANNOT be seen, even by a determined administrator.
|
$Projectname developers will ensure that any content you provide which is designated as PRIVATE will be protected against eavesdropping - to the best of their ability. Private channel content CAN be seen in the database of every involved hub administrator, but private messages are obscured in the database. The latter means that it is very difficult, but NOT impossible for this content to be seen by a hub administrator. Private channel content and private messages are also stripped from email notifications. End to end encryption is provided as an optional feature and this CANNOT be seen, even by a determined administrator.
|
||||||
|
|
||||||
##Identity Privacy
|
##Identity Privacy
|
||||||
|
|
||||||
Privacy for your identity is another aspect. Because you have a decentralized identity in the $Projectname, your privacy extends beyond your home hub. If you want to have complete control of your privacy and security you should run your own hub on a dedicated server. For many people, this is complicated and may stretch their technical abilities. So let's list a few precautions you can make to assure your privacy as much as possible.
|
Privacy for your identity is another aspect. Because you have a decentralized identity in $Projectname, your privacy extends beyond your home hub. If you want to have complete control of your privacy and security you should run your own hub on a dedicated server. For many people, this is complicated and may stretch their technical abilities. So let's list a few precautions you can make to assure your privacy as much as possible.
|
||||||
|
|
||||||
A decentralized identity has a lot of advantages and gives you al lot of interesting features, but you should be aware of the fact that your identity is known by other hubs in the $Projectname network. One of those advantages is that other channels can serve you customized content and allow you to see private things (such as private photos which others wish to share with you). Because of this those channels need to know who you are. But we understand that sometimes those other channels know more from you than you might desire. For instance the plug-in Visage that can tell a channel owner the last time you visit their profile. You can easily OPT-OUT of this low level and we think, harmless tracking.
|
A decentralized identity has a lot of advantages and gives you al lot of interesting features, but you should be aware of the fact that your identity is known by other hubs in the $Projectname network. One of those advantages is that other channels can serve you customized content and allow you to see private things (such as private photos which others wish to share with you). Because of this those channels need to know who you are. But we understand that sometimes those other channels know more from you than you might desire. For instance the plug-in Visage that can tell a channel owner the last time you visit their profile. You can easily OPT-OUT of this low level and we think, harmless tracking.
|
||||||
|
|
||||||
* You can enable [Do Not Track (DNT)](http://donottrack.us/) in your web browser. We respect this new privacy policy proposal. All modern browsers support DNT. You will find it in the privacy settings of your browsers or else you can consult the web browser's manual. This will not affect the functionality of the $Projectname. This setting is probably enough for most people.
|
* You can enable [Do Not Track (DNT)](http://donottrack.us/) in your web browser. We respect this new privacy policy proposal. All modern browsers support DNT. You will find it in the privacy settings of your browsers or else you can consult the web browser's manual. This will not affect the functionality of $Projectname. This setting is probably enough for most people.
|
||||||
|
|
||||||
*You can [disable publication](settings) of your channel in our channel directory. If you want people to find your channel, you should give your channel address directly to them. We think this is a good indication that you prefer extra privacy and automatically enable "Do Not Track" if this is the case.
|
*You can [disable publication](settings) of your channel in our channel directory. If you want people to find your channel, you should give your channel address directly to them. We think this is a good indication that you prefer extra privacy and automatically enable "Do Not Track" if this is the case.
|
||||||
|
|
||||||
* You can have a blocked hub. That means that all channels and content on that hub is not public, and not visible to the outside world. This is something only your hub administrator can do. We also respect this and automatically enable "Do Not Track" if it is set.
|
* You can have a blocked hub. That means that all channels and content on that hub is not public, and not visible to the outside world. This is something only your hub administrator can do. We also respect this and automatically enable "Do Not Track" if it is set.
|
||||||
|
|
||||||
###Censorship
|
###Censorship
|
||||||
|
|
||||||
The $Projectname is a global network which is inclusive of all religions and cultures. This does not imply that every member of the network feels the same way you do on contentious issues, and some people may be STRONGLY opposed to the content you post. In general, if you wish to post something that you know may nor be universally acceptable, the best approach is to restrict the audience using privacy controls to a small circle of friends.
|
$Projectname is a global network which is inclusive of all religions and cultures. This does not imply that every member of the network feels the same way you do on contentious issues, and some people may be STRONGLY opposed to the content you post. In general, if you wish to post something that you know may nor be universally acceptable, the best approach is to restrict the audience using privacy controls to a small circle of friends.
|
||||||
|
|
||||||
The $Projectname as a network provider is unable to censor content. However, hub administrators MAY censor any content which appears on their hub to comply with local laws or even personal judgement. Their decision is final. If you have issues with any hub administrator, you may move your account and postings to another site which is more in line with your expectations. Please check (periodically) the [Terms of Service](help/TermsOfService) of your hub to learn about any rules or guidelines. If your content consists of material which is illegal or may cause issues, you are STRONGLY encouraged to host your own (become a hub administrator). You may still find that your content is blocked on some hubs, but the $Projectname as a network cannot block it from being posted.
|
$Projectname as a network provider is unable to censor content. However, hub administrators MAY censor any content which appears on their hub to comply with local laws or even personal judgement. Their decision is final. If you have issues with any hub administrator, you may move your account and postings to another site which is more in line with your expectations. Please check (periodically) the [Terms of Service](help/TermsOfService) of your hub to learn about any rules or guidelines. If your content consists of material which is illegal or may cause issues, you are STRONGLY encouraged to host your own (become a hub administrator). You may still find that your content is blocked on some hubs, but $Projectname as a network cannot block it from being posted.
|
||||||
|
|
||||||
The $Projectname RECOMMENDS that hub administrators provide a grace period of 1-2 days between warning an account holder of content that needs to be removed and physically removing or disabling the account. This will give the content owner an opportunity to export their channel meta-data and import it to another site. In rare cases the content may be of such a nature to justify the immediate termination of the account. This is a hub decision, not a $Projectname decision.
|
$Projectname RECOMMENDS that hub administrators provide a grace period of 1-2 days between warning an account holder of content that needs to be removed and physically removing or disabling the account. This will give the content owner an opportunity to export their channel meta-data and import it to another site. In rare cases the content may be of such a nature to justify the immediate termination of the account. This is a hub decision, not a $Projectname decision.
|
||||||
|
|
||||||
If you typically and regularly post content of an adult or offensive nature, you are STRONGLY encouraged to mark your account "NSFW" (Not Safe For Work). This will prevent the display of your profile photo in the directory except to viewers that have chosen to disable "safe mode". If your profile photo is found by directory administrators to be adult or offensive, the directory administrator MAY flag your profile photo as NSFW. There is currently no official mechanism to contest or reverse this decision, which is why you SHOULD mark your own account NSFW if it is likely to be inappropriate for general audiences.
|
If you typically and regularly post content of an adult or offensive nature, you are STRONGLY encouraged to mark your account "NSFW" (Not Safe For Work). This will prevent the display of your profile photo in the directory except to viewers that have chosen to disable "safe mode". If your profile photo is found by directory administrators to be adult or offensive, the directory administrator MAY flag your profile photo as NSFW. There is currently no official mechanism to contest or reverse this decision, which is why you SHOULD mark your own account NSFW if it is likely to be inappropriate for general audiences.
|
||||||
|
|
||||||
|
|||||||
@@ -5,7 +5,7 @@ Hubzilla
|
|||||||
###Websites. Redefined.
|
###Websites. Redefined.
|
||||||
|
|
||||||
|
|
||||||

|

|
||||||
|
|
||||||
**What are Hubs?**
|
**What are Hubs?**
|
||||||
|
|
||||||
|
|||||||
@@ -11,9 +11,9 @@ When you start to mention somebody, it will create an auto-complete box to selec
|
|||||||
|
|
||||||
**Private Mentions**
|
**Private Mentions**
|
||||||
|
|
||||||
If you wish to restrict a post to a single person or a number of people, you can do this by selecting channels or collections from the privacy tool. You can also just tag them with a privacy tag. A privacy tag is a name preceded by the two characters @! - and in addition to tagging these channels, will also change the privacy permissions of the post to include them (and perhaps restrict the post from "everybody" if this was the default). You can have more than one privacy tag, for instance @!bob and @!linda will send the post only to Bob and Linda (in addition to any recipients you selected with the privacy selector - if any).
|
If you wish to restrict a post to a single person or a number of people, you can do this by selecting channels or privacy groups from the privacy tool. You can also just tag them with a privacy tag. A privacy tag is a name preceded by the two characters @! - and in addition to tagging these channels, will also change the privacy permissions of the post to include them (and perhaps restrict the post from "everybody" if this was the default). You can have more than one privacy tag, for instance @!bob and @!linda will send the post only to Bob and Linda (in addition to any recipients you selected with the privacy selector - if any).
|
||||||
|
|
||||||
You may also tag public collections. When you create or edit a collection, there is a checkbox to allow the group members to be seen by others. If this box is checked for a collection and you tag (for instance) @!Friends - the post will be restricted to the Friends collection. Check that the collection is public before doing this - as there is no way to take back a post except to delete it. The collection name will appear in the post and will alert members of that collection that they are members of it.
|
You may also tag privacy groups which are "public". When you create or edit a privacy group, there is a checkbox to allow the group members to be seen by others. If this box is checked for a group and you tag (for instance) @!Friends - the post will be restricted to the Friends group. Check that the group is public before doing this - as there is no way to take back a post except to delete it. The group name will appear in the post and will alert members of that group that they are members of it.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -4,13 +4,13 @@ Translating the $Projectname
|
|||||||
Translation Process
|
Translation Process
|
||||||
-------------------
|
-------------------
|
||||||
|
|
||||||
The strings used in the UI of Red is translated at [Transifex][1] and then
|
The strings used in the UI of Hubzilla is translated at [Transifex][1] and then
|
||||||
included in the git repository at github. If you want to help with translation
|
included in the git repository at github. If you want to help with translation
|
||||||
for any language, be it correcting terms or translating Red to a
|
for any language, be it correcting terms or translating Hubzilla to a
|
||||||
currently not supported language, please register an account at transifex.com
|
currently not supported language, please register an account at transifex.com
|
||||||
and contact the Red translation team there.
|
and contact the Redmatrix translation team there.
|
||||||
|
|
||||||
Translating Red is simple. Just use the online tool at transifex. If you
|
Translating Hubzilla is simple. Just use the online tool at transifex. If you
|
||||||
don't want to deal with git & co. that is fine, we check the status of the
|
don't want to deal with git & co. that is fine, we check the status of the
|
||||||
translations regularly and import them into the source tree at github so that
|
translations regularly and import them into the source tree at github so that
|
||||||
others can use them.
|
others can use them.
|
||||||
@@ -26,32 +26,32 @@ tree.
|
|||||||
|
|
||||||
If you want to get your work into the source tree yourself, feel free to do so
|
If you want to get your work into the source tree yourself, feel free to do so
|
||||||
and contact us with and question that arises. The process is simple and
|
and contact us with and question that arises. The process is simple and
|
||||||
Red ships with all the tools necessary.
|
Hubzilla ships with all the tools necessary.
|
||||||
|
|
||||||
The location of the translated files in the source tree is
|
The location of the translated files in the source tree is
|
||||||
/view/LNG-CODE/
|
/view/LNG-CODE/
|
||||||
where LNG-CODE is the language code used, e.g. de for German or fr for French.
|
where LNG-CODE is the language code used, e.g. de for German or fr for French.
|
||||||
For the email templates (the *.tpl files) just place them into the directory
|
For the email templates (the *.tpl files) just place them into the directory
|
||||||
and you are done. The translated strings come as a "messages.po" file from
|
and you are done. The translated strings come as a "hmessages.po" file from
|
||||||
transifex which needs to be translated into the PHP file Red uses. To do
|
transifex which needs to be translated into the PHP file Hubzilla uses. To do
|
||||||
so, place the file in the directory mentioned above and use the "po2php"
|
so, place the file in the directory mentioned above and use the "po2php"
|
||||||
utility from the util directory of your Red installation.
|
utility from the util directory of your Hubzilla installation.
|
||||||
|
|
||||||
Assuming you want to convert the German localization which is placed in
|
Assuming you want to convert the German localization which is placed in
|
||||||
view/de/messages.po you would do the following.
|
view/de/hmessages.po you would do the following.
|
||||||
|
|
||||||
1. Navigate at the command prompt to the base directory of your
|
1. Navigate at the command prompt to the base directory of your
|
||||||
Red installation
|
Hubzilla installation
|
||||||
|
|
||||||
2. Execute the po2php script, which will place the translation
|
2. Execute the po2php script, which will place the translation
|
||||||
in the strings.php file that is used by Red.
|
in the hstrings.php file that is used by Hubzilla.
|
||||||
|
|
||||||
$> php util/po2php.php view/de/messages.po
|
$> php util/po2php.php view/de/hmessages.po
|
||||||
|
|
||||||
The output of the script will be placed at view/de/strings.php where
|
The output of the script will be placed at view/de/hstrings.php where
|
||||||
froemdoca os expecting it, so you can test your translation mmediately.
|
froemdoca os expecting it, so you can test your translation mmediately.
|
||||||
|
|
||||||
3. Visit your Red page to check if it still works in the language you
|
3. Visit your Hubzilla page to check if it still works in the language you
|
||||||
just translated. If not try to find the error, most likely PHP will give
|
just translated. If not try to find the error, most likely PHP will give
|
||||||
you a hint in the log/warnings.about the error.
|
you a hint in the log/warnings.about the error.
|
||||||
|
|
||||||
@@ -59,19 +59,19 @@ view/de/messages.po you would do the following.
|
|||||||
not give any output if the file is ok but might give a hint for
|
not give any output if the file is ok but might give a hint for
|
||||||
searching the bug in the file.
|
searching the bug in the file.
|
||||||
|
|
||||||
$> php view/de/strings.php
|
$> php view/de/hstrings.php
|
||||||
|
|
||||||
4. commit the two files with a meaningful commit message to your git
|
4. commit the two files with a meaningful commit message to your git
|
||||||
repository, push it to your fork of the Red repository at github and
|
repository, push it to your fork of the Hubzilla repository at github and
|
||||||
issue a pull request for that commit.
|
issue a pull request for that commit.
|
||||||
|
|
||||||
Utilities
|
Utilities
|
||||||
---------
|
---------
|
||||||
|
|
||||||
Additional to the po2php script there are some more utilities for translation
|
Additional to the po2php script there are some more utilities for translation
|
||||||
in the "util" directory of the Red source tree. If you only want to
|
in the "util" directory of the Hubzilla source tree. If you only want to
|
||||||
translate Red into another language you wont need any of these tools most
|
translate Hubzilla into another language you wont need any of these tools most
|
||||||
likely but it gives you an idea how the translation process of Red
|
likely but it gives you an idea how the translation process of Hubzilla
|
||||||
works.
|
works.
|
||||||
|
|
||||||
For further information see the utils/README file.
|
For further information see the utils/README file.
|
||||||
@@ -79,7 +79,7 @@ For further information see the utils/README file.
|
|||||||
Known Problems
|
Known Problems
|
||||||
--------------
|
--------------
|
||||||
|
|
||||||
* Red uses the language setting of the visitors browser to determain the
|
* Hubzilla uses the language setting of the visitors browser to determain the
|
||||||
language for the UI. Most of the time this works, but there are some known
|
language for the UI. Most of the time this works, but there are some known
|
||||||
quirks.
|
quirks.
|
||||||
* the early translations are based on the friendica translations, if you
|
* the early translations are based on the friendica translations, if you
|
||||||
|
|||||||
@@ -15,7 +15,7 @@ Some/many of these widgets have restrictions which may restrict the type of page
|
|||||||
* args: count - number of items to return (default 24)
|
* args: count - number of items to return (default 24)
|
||||||
<br /> <br />
|
<br /> <br />
|
||||||
|
|
||||||
* collections - collection selector for the current logged in channel
|
* collections - privacy group selector for the current logged in channel
|
||||||
|
|
||||||
* args: mode - one of "conversation", "group", "abook" depending on module
|
* args: mode - one of "conversation", "group", "abook" depending on module
|
||||||
<br /> <br />
|
<br /> <br />
|
||||||
@@ -74,8 +74,11 @@ Some/many of these widgets have restrictions which may restrict the type of page
|
|||||||
|
|
||||||
* suggestedchats - "interesting" chatrooms chosen for the current observer
|
* suggestedchats - "interesting" chatrooms chosen for the current observer
|
||||||
|
|
||||||
* item - displays a single webpage item by mid
|
* item - displays a single webpage item by mid or page title
|
||||||
* args: mid - message_id of webpage to display
|
* args:
|
||||||
|
* channel_id - channel that owns the content, defualt is the profile_uid
|
||||||
|
* mid - message_id of webpage to display (must be webpage, not a conversation item)
|
||||||
|
* title - URL page title of webpage (must provide one of either title or mid)
|
||||||
<br /> <br />
|
<br /> <br />
|
||||||
|
|
||||||
* photo - display a single photo
|
* photo - display a single photo
|
||||||
@@ -85,10 +88,17 @@ Some/many of these widgets have restrictions which may restrict the type of page
|
|||||||
* style - CSS style string
|
* style - CSS style string
|
||||||
<br /> <br />
|
<br /> <br />
|
||||||
|
|
||||||
|
* cover_photo - display the cover photo for the selected channel
|
||||||
|
* args:
|
||||||
|
* channel_id - channel to use, default is the profile_uid
|
||||||
|
* style - CSS style string (default is dynamically resized to width of region)
|
||||||
|
<br /> <br />
|
||||||
|
|
||||||
|
|
||||||
* photo_rand - display a random photo from one of your photo albums. Photo permissions are honoured
|
* photo_rand - display a random photo from one of your photo albums. Photo permissions are honoured
|
||||||
* args:
|
* args:
|
||||||
* album - album name (very strongly recommended if you have lots of photos)
|
* album - album name (very strongly recommended if you have lots of photos)
|
||||||
* scale - typically 0 (original size), 1 (640px), or 2 (320px)
|
* scale - typically 0 (original size), 1 (1024px), 2, (640px), or 3 (320px)
|
||||||
* style - CSS style string
|
* style - CSS style string
|
||||||
* channel_id - if not your own
|
* channel_id - if not your own
|
||||||
<br /> <br />
|
<br /> <br />
|
||||||
@@ -99,6 +109,21 @@ Some/many of these widgets have restrictions which may restrict the type of page
|
|||||||
* channel_id - if not your own
|
* channel_id - if not your own
|
||||||
<br /> <br />
|
<br /> <br />
|
||||||
|
|
||||||
|
* tasklist - provide a task or to-do list for the currently logged-in channel.
|
||||||
|
* args:
|
||||||
|
* all - display completed tasks if all is non-zero.
|
||||||
|
<br /> <br />
|
||||||
|
|
||||||
|
* forums - provide a list of connected public forums with unseen counts for the current logged-in channel.
|
||||||
|
<br /> <br />
|
||||||
|
|
||||||
|
|
||||||
|
* album - provides a widget containing a complete photo album from albums belonging to the page owner; this may be too large to present in a sidebar region as is best implemented as a content region widget.
|
||||||
|
* args:
|
||||||
|
* album - album name
|
||||||
|
* title - optional title, album name is used if not present
|
||||||
|
<br /> <br />
|
||||||
|
|
||||||
|
|
||||||
Creating New Widgets
|
Creating New Widgets
|
||||||
====================
|
====================
|
||||||
|
|||||||
16
doc/about.bb
16
doc/about.bb
@@ -1,24 +1,24 @@
|
|||||||
[b]About[/b]
|
[b]About[/b]
|
||||||
|
|
||||||
The $Projectname is a decentralized communication network, which aims to provide communication that is censorship-resistant, privacy-respecting, and thus free from the oppressive claws of contemporary corporate communication giants. These giants function primarily as spy networks for paying clients of all sorts and types, in addition to monopolizing and centralizing the Internet; a feature that was not part of the original and revolutionary goals that produced the World Wide Web.
|
$Projectname is a decentralized communication network, which aims to provide communication that is censorship-resistant, privacy-respecting, and thus free from the oppressive claws of contemporary corporate communication giants. These giants function primarily as spy networks for paying clients of all sorts and types, in addition to monopolizing and centralizing the Internet; a feature that was not part of the original and revolutionary goals that produced the World Wide Web.
|
||||||
|
|
||||||
The $Projectname is free and open source. It is designed to scale from a $35 Raspberry Pi, to top of the line AMD and Intel Xeon-powered multi-core enterprise servers. It can be used to support communication between a few individuals, or scale to many thousands and more.
|
$Projectname is free and open source. It is designed to scale from a $35 Raspberry Pi, to top of the line AMD and Intel Xeon-powered multi-core enterprise servers. It can be used to support communication between a few individuals, or scale to many thousands and more.
|
||||||
|
|
||||||
Red aims to be skill and resource agnostic. It is easy to use by everyday computer users, as well as by systems administrators and developers.
|
$Projectname aims to be skill and resource agnostic. It is easy to use by everyday computer users, as well as by systems administrators and developers.
|
||||||
|
|
||||||
How you use it depends on how you want to use it.
|
How you use it depends on how you want to use it.
|
||||||
|
|
||||||
It is written in the PHP scripting language, thus making it trivial to install on any hosting platform in use today. This includes self-hosting at home, at hosting providers such as [url=http://mediatemple.com/]Media Temple[/url] and [url=http://www.dreamhost.com/]Dreamhost[/url], or on virtual and dedicated servers, offered by the likes of [url=https://www.linode.com]Linode[/url], [url=http://greenqloud.com]GreenQloud[/url] or [url=https://aws.amazon.com]Amazon AWS[/url].
|
It is written in the PHP scripting language, thus making it trivial to install on any hosting platform in use today. This includes self-hosting at home, at hosting providers such as [url=http://mediatemple.com/]Media Temple[/url] and [url=http://www.dreamhost.com/]Dreamhost[/url], or on virtual and dedicated servers, offered by the likes of [url=https://www.linode.com]Linode[/url], [url=http://greenqloud.com]GreenQloud[/url] or [url=https://aws.amazon.com]Amazon AWS[/url].
|
||||||
|
|
||||||
In other words, the $Projectname can run on any computing platform that comes with a web server, a MySQL-compatible database, and the PHP scripting language.
|
In other words, $Projectname can run on any computing platform that comes with a web server, a MySQL-compatible database, and the PHP scripting language.
|
||||||
|
|
||||||
Along the way, Red offers a number of unique goodies:
|
Along the way, $Projectname offers a number of unique goodies:
|
||||||
|
|
||||||
[b]Single-click user identification:[/b] meaning you can access sites on the $Projectname simply by clicking on links to remote sites. Authentication just happens automagically behind the scenes. Forget about remembering multiple user names with multiple passwords when accessing different sites online.
|
[b]Single-click user identification:[/b] meaning you can access sites on $Projectname simply by clicking on links to remote sites. Authentication just happens automagically behind the scenes. Forget about remembering multiple user names with multiple passwords when accessing different sites online.
|
||||||
|
|
||||||
[b]Cloning:[/b] of online identities. Your online presence no longer has to be tied to a single server, domain name or IP address. You can clone and import your identity (or channel as we call it) to another server (or, a hub as servers are known in the $Projectname). Now, should your primary hub go down, no worries, your contacts, posts[i]*[/i], and messages[i]*[/i] will automagically continue to be available and accessible under your cloned channel. [i](*: only posts and messages as from the moment you cloned your channel)[/i]
|
[b]Cloning:[/b] of online identities. Your online presence no longer has to be tied to a single server, domain name or IP address. You can clone and import your identity (or channel as we call it) to another server (or, a hub as servers are known in $Projectname). Now, should your primary hub go down, no worries, your contacts, posts[i]*[/i], and messages[i]*[/i] will automagically continue to be available and accessible under your cloned channel. [i](*: only posts and messages as from the moment you cloned your channel)[/i]
|
||||||
|
|
||||||
[b]Privacy:[/b] Red identities (Zot IDs) can be deleted, backed up/downloaded, and cloned. The user is in full control of their data. Should you decide to delete all your content and erase your Zot ID, all you have to do is click on a link and it's immediately deleted from the hub. No questions, no fuss.
|
[b]Privacy:[/b] $Projectname identities (Zot IDs) can be deleted, backed up/downloaded, and cloned. The user is in full control of their data. Should you decide to delete all your content and erase your Zot ID, all you have to do is click on a link and it's immediately deleted from the hub. No questions, no fuss.
|
||||||
|
|
||||||
#include doc/macros/main_footer.bb;
|
#include doc/macros/main_footer.bb;
|
||||||
|
|
||||||
|
|||||||
@@ -1,19 +1,22 @@
|
|||||||
[h3]Plugins/Addons[/h3]
|
[h3]Plugins/Addons[/h3]
|
||||||
[list=1]
|
[list=1]
|
||||||
[*] abcjsplugin - Create musical scores in your posts
|
[*] abcjsplugin - Create musical scores in your posts
|
||||||
|
[*] adultphotoflag - prevents nsfw photos from being displayed in public albums
|
||||||
[*] bbmath - use complex math expressions in your posts
|
[*] bbmath - use complex math expressions in your posts
|
||||||
[*] bookmarker - replace #^ with bookmark link in posts
|
[*] bookmarker - replace #^ with bookmark link in posts
|
||||||
[*] buglink - provide a bug reporting icon in the lower-left corner of every page
|
[*] buglink - provide a bug reporting icon in the lower-left corner of every page
|
||||||
[*] calc - a scientific calculator
|
[*] calc - a scientific calculator
|
||||||
|
[*] chess - cross domain identity aware interactive chess games
|
||||||
[*] chords - generate fingering charts and alternatives for every known guitar chord
|
[*] chords - generate fingering charts and alternatives for every known guitar chord
|
||||||
[*] custom_home - set a custom page as the hub start page
|
[*] custom_home - set a custom page as the hub start page
|
||||||
[*] diaspora - crosspost to a Diaspora account (different from the built-in Diaspora emulator)
|
[*] dfedfix - fixes some federation issues with Diaspora releases around aug-sep 2015
|
||||||
|
[*] diaspora - Diaspora protocol emulator
|
||||||
|
[*] diaspost - crosspost to a Diaspora account (different from the Diaspora protocol emulator)
|
||||||
[*] dirstats - show some interesting statistics generated by the driectory server
|
[*] dirstats - show some interesting statistics generated by the driectory server
|
||||||
[*] donate - provides a project donation page
|
[*] donate - provides a project donation page
|
||||||
[*] dwpost - crosspost to Dreamwidth
|
[*] dwpost - crosspost to Dreamwidth
|
||||||
[*] embedly - use the embedly (formerly ooehmbed) service to embed media from many providers
|
|
||||||
[*] extcron - use an external cron service to run your hub's scheduled tasks
|
[*] extcron - use an external cron service to run your hub's scheduled tasks
|
||||||
[*] flattr - provides a "Flattr Us" button
|
[*] flattrwidget - provides a "Flattr Us" button
|
||||||
[*] flip - create upside down text
|
[*] flip - create upside down text
|
||||||
[*] fortunate - displays random quote (fortune cookie). Requires setting up a fortune server.
|
[*] fortunate - displays random quote (fortune cookie). Requires setting up a fortune server.
|
||||||
[*] frphotos - import photo albums from Friendica
|
[*] frphotos - import photo albums from Friendica
|
||||||
@@ -26,12 +29,16 @@
|
|||||||
[*] libertree - crosspost to Libertree
|
[*] libertree - crosspost to Libertree
|
||||||
[*] likebanner - create a "like us on red#matrix" banner image
|
[*] likebanner - create a "like us on red#matrix" banner image
|
||||||
[*] ljpost - crosspost to LiveJournal
|
[*] ljpost - crosspost to LiveJournal
|
||||||
|
[*] logrot - logfile rotation utility
|
||||||
[*] mahjongg - Chinese puzzle game
|
[*] mahjongg - Chinese puzzle game
|
||||||
[*] mailhost - when using multiple channel clones, select one to receive email notifications
|
[*] mailhost - when using multiple channel clones, select one to receive email notifications
|
||||||
[*] mayan_places - set location field to a random city in the Mayan world
|
[*] mayan_places - set location field to a random city in the Mayan world
|
||||||
[*] morechoice - additional gender/sexual-preference choices for profiles (not safe for work)
|
[*] morechoice - additional gender/sexual-preference choices for profiles (not safe for work)
|
||||||
[*] moremoods - Additional mood options
|
[*] moremoods - Additional mood options
|
||||||
[*] morepokes - additional poke options (not safe for work)
|
[*] morepokes - additional poke options (not safe for work)
|
||||||
|
[*] msgfooter - provide legal or other text on each outgoing post
|
||||||
|
[*] noembed - use noembed.com as an addition to Hubzilla's native oembed functionality (currently broken)
|
||||||
|
[*] nofed - prevent "federation" of channel posts, maintains all interaction on your site
|
||||||
[*] nsabait - add random terrorism related hashtags to your posts
|
[*] nsabait - add random terrorism related hashtags to your posts
|
||||||
[*] nsfw - Highly recommended plugin to collpase posts with inappropriate content
|
[*] nsfw - Highly recommended plugin to collpase posts with inappropriate content
|
||||||
[*] openclipatar - choose a profile photo from hundreds of royalty free images
|
[*] openclipatar - choose a profile photo from hundreds of royalty free images
|
||||||
@@ -42,21 +49,29 @@
|
|||||||
[*] qrator - generate QR code images
|
[*] qrator - generate QR code images
|
||||||
[*] rainbowtag - display your tag and category clouds in colours
|
[*] rainbowtag - display your tag and category clouds in colours
|
||||||
[*] randpost - post/reply bot based on and requires fortunate
|
[*] randpost - post/reply bot based on and requires fortunate
|
||||||
[*] redred - Crosspost to another Redmatrix or Hubzilla channel
|
[*] redfiles - import file storage from redmatrix
|
||||||
|
[*] redphotos - import photo albums from redmatrix
|
||||||
|
[*] redred - Crosspost to another Red Matrix or Hubzilla channel
|
||||||
[*] rtof - Crosspost to Friendica
|
[*] rtof - Crosspost to Friendica
|
||||||
|
[*] sendzid - add 'zid' auth parmaters to all outbound links, not just in-network links
|
||||||
|
[*] skeleton - sample addon/plugin to demonstrate plugin development
|
||||||
[*] smiley_pack - extend the built-in smilie (emoticon) support
|
[*] smiley_pack - extend the built-in smilie (emoticon) support
|
||||||
[*] smileybutton - provides a smiley selector on the post window
|
[*] smileybutton - provides a smiley selector on the post window
|
||||||
[*] startpage - set a personal preferred page to redirect after logging in.
|
[*] startpage - set a personal preferred page to redirect after logging in.
|
||||||
|
[*] statistics_json - Diaspora statistics generator
|
||||||
[*] statusnet - GNU-social and StatusNet crosspost [zrl=[baseurl]/help/addons_gnusocial]Posting To Gnu Social[/zrl]
|
[*] statusnet - GNU-social and StatusNet crosspost [zrl=[baseurl]/help/addons_gnusocial]Posting To Gnu Social[/zrl]
|
||||||
[*] superblock - Highly recommended - completely block an offensive channel from your stream
|
[*] superblock - Highly recommended - completely block an offensive channel from your stream
|
||||||
|
[*] testdrive - Turns your hub into a test drive site with accounts that expire after a trail period.
|
||||||
[*] tictac - 3D tic-tac-toe
|
[*] tictac - 3D tic-tac-toe
|
||||||
[*] torch - flashlight app
|
[*] torch - flashlight app
|
||||||
[*] tour - feature tour for new members
|
[*] tour - feature tour for new members
|
||||||
[*] twitter - crosspost to Twitter
|
[*] twitter - crosspost to Twitter
|
||||||
[*] upload_limits - discover what server setting (there are a few) may be causing large photo uploads to fail
|
[*] upload_limits - discover what server setting (there are a few) may be causing large photo uploads to fail
|
||||||
[*] visage - show visitors to your channel
|
[*] visage - show visitors to your channel
|
||||||
|
[*] wholikesme - provides a page to display what connections have 'liked' your posts the most
|
||||||
[*] webRTC - use an external server (mayfirst.org) to negotiate webRTC hookups
|
[*] webRTC - use an external server (mayfirst.org) to negotiate webRTC hookups
|
||||||
[*] wppost - crosspost to WordPress (or other wordpress XMLRPC service)
|
[*] wppost - crosspost to WordPress (or other wordpress XMLRPC service)
|
||||||
|
[*] xmpp - XMPP chat based on converse.js
|
||||||
[/list]
|
[/list]
|
||||||
|
|
||||||
[h3]Addon Repositories[/h3]
|
[h3]Addon Repositories[/h3]
|
||||||
|
|||||||
15
doc/admins.bb
Normal file
15
doc/admins.bb
Normal file
@@ -0,0 +1,15 @@
|
|||||||
|
[h2]Documentation for Hub Administrators[/h2]
|
||||||
|
|
||||||
|
[h3]Administrators[/h3]
|
||||||
|
|
||||||
|
[zrl=[baseurl]/help/install]Install[/zrl]
|
||||||
|
[zrl=[baseurl]/help/red2pi]Installing $Projectname on the Raspberry Pi[/zrl]
|
||||||
|
[zrl=[baseurl]/help/Hubzilla_on_OpenShift]$Projectname on OpenShift[/zrl]
|
||||||
|
[zrl=[baseurl]/help/troubleshooting]Troubleshooting Tips[/zrl]
|
||||||
|
[zrl=[baseurl]/help/hidden_configs]Tweaking $Projectname's Hidden Configurations[/zrl]
|
||||||
|
[zrl=[baseurl]/help/faq_admins]FAQ For Admins[/zrl]
|
||||||
|
[zrl=[baseurl]/help/service_classes]Service Classes[/zrl]
|
||||||
|
[zrl=[baseurl]/help/directories]Working with and configuring Directories[/zrl]
|
||||||
|
[zrl=[baseurl]/help/theme_management]Theme Management[/zrl]
|
||||||
|
|
||||||
|
|
||||||
23
doc/api/statuses_update.bb
Normal file
23
doc/api/statuses_update.bb
Normal file
@@ -0,0 +1,23 @@
|
|||||||
|
[h2]statuses/update[/h2]
|
||||||
|
Parameters
|
||||||
|
|
||||||
|
title: Title of the status
|
||||||
|
status: Status in text [or bbcode] format
|
||||||
|
htmlstatus: Status in HTML format
|
||||||
|
in_reply_to_status_id
|
||||||
|
lat: latitude
|
||||||
|
long: longitude
|
||||||
|
media: image data
|
||||||
|
source: Application name
|
||||||
|
group_allow
|
||||||
|
contact_allow
|
||||||
|
group_deny
|
||||||
|
contact_deny
|
||||||
|
|
||||||
|
|
||||||
|
Example
|
||||||
|
|
||||||
|
[code]
|
||||||
|
curl -u theUsername:thePassword http://mywebsite/api/statuses/update.xml -d status='Hello world'
|
||||||
|
[/code]
|
||||||
|
|
||||||
@@ -4,19 +4,20 @@ The API allows you to post to the red# by HTTP POST request. Below you see an ex
|
|||||||
|
|
||||||
[code]curl -ssl -u [color=blue]$E-Mail[/color]:[color=blue]$Password[/color] -d "[color=blue]$Parameters[/color]" [url][observer=1][observer.baseurl][/observer][observer=0]example.com[/observer]/api/statuses/update
|
[code]curl -ssl -u [color=blue]$E-Mail[/color]:[color=blue]$Password[/color] -d "[color=blue]$Parameters[/color]" [url][observer=1][observer.baseurl][/observer][observer=0]example.com[/observer]/api/statuses/update
|
||||||
[/url][/code]
|
[/url][/code]
|
||||||
[table][tr][td]$E-Mail:[/td][td]The E-Mail Adress you use to login[/td][/tr]
|
[table][tr][td]$E-Mail:[/td][td]The E-Mail Address you use to login, or the channel nickname (without the hostname)[/td][/tr]
|
||||||
[tr][td]$Password:[/td][td]The Password you use to login[/td][/tr]
|
[tr][td]$Password:[/td][td]The Password you use to login[/td][/tr]
|
||||||
[tr][td]$Parameters:[/td][td]That's the interesting part, here you insert the content you want to send using the following parameters:[/td][/tr][/table]
|
[tr][td]$Parameters:[/td][td]That's the interesting part, here you insert the content you want to send using the following parameters:[/td][/tr][/table]
|
||||||
|
|
||||||
[ul]
|
[ul]
|
||||||
[*]title: the title of the posting
|
[*]title: the title of the posting
|
||||||
[*]channel: the channel you want to post to
|
[*]channel: the channel you want to post to (do not use this parameter with HTTP Basic auth)
|
||||||
[*]category: a comma-seperated list of categories for the posting
|
[*]category: a comma-seperated list of categories for the posting
|
||||||
[*]status: the content of the posting, formatted with BBCode
|
[*]status: the content of the posting, formatted with BBCode
|
||||||
OR
|
OR
|
||||||
[*]htmlstatus:the content of the posting, formatted in HTML.
|
[*]htmlstatus:the content of the posting, formatted in HTML.
|
||||||
[/ul]
|
[/ul]
|
||||||
|
|
||||||
|
To post to a specific channel, replace the email address with the channel nickname. If you supply the channel parameter, it has to match the "email", but is superfluous anyway.
|
||||||
|
|
||||||
Instead of calling [observer=1][observer.baseurl][/observer][observer=0]example.com[/observer]/api/statuses/update which returns a json (you could also add .json on the end to clarify) output, you can use [observer.baseurl]/api/statuses/update.xml to get an xml formatted return.
|
Instead of calling [observer=1][observer.baseurl][/observer][observer=0]example.com[/observer]/api/statuses/update which returns a json (you could also add .json on the end to clarify) output, you can use [observer.baseurl]/api/statuses/update.xml to get an xml formatted return.
|
||||||
|
|
||||||
|
|||||||
@@ -7,11 +7,11 @@
|
|||||||
<li>[u]underlined[/u] - <u>underlined</u><br />
|
<li>[u]underlined[/u] - <u>underlined</u><br />
|
||||||
<li>[s]strike[/s] - <strike>strike</strike><br />
|
<li>[s]strike[/s] - <strike>strike</strike><br />
|
||||||
<li>[color=red]red[/color] - <span style="color: red;">red</span><br />
|
<li>[color=red]red[/color] - <span style="color: red;">red</span><br />
|
||||||
<li>[url=https://redmatrix.me]$Projectname[/url] <a href="https://redmatrix.me">$Projectname</a><br />
|
<li>[url=https://zothub.com]$Projectname[/url] <a href="https://zothub.com">$Projectname</a><br />
|
||||||
<li>[img]https://redmatrix.me/images/default_profile_photos/rainbow_man/48.jpg[/img] <img src="https://redmatrix.me/images/default_profile_photos/rainbow_man/48.jpg" alt="Image/photo" /><br />
|
<li>[img]https://zothub.com/images/default_profile_photos/rainbow_man/48.jpg[/img] <img src="https://zothub.com/images/default_profile_photos/rainbow_man/48.jpg" alt="Image/photo" /><br />
|
||||||
<li>[img float=left]https://redmatrix.me/images/default_profile_photos/rainbow_man/48.jpg[/img] <img src="https://redmatrix.me/images/default_profile_photos/rainbow_man/48.jpg" style="float:left;" alt="Image/photo" /><br />
|
<li>[img float=left]https://zothub.com/images/default_profile_photos/rainbow_man/48.jpg[/img] <img src="https://zothub.com/images/default_profile_photos/rainbow_man/48.jpg" style="float:left;" alt="Image/photo" /><br />
|
||||||
<div style="clear:both;"></div>
|
<div style="clear:both;"></div>
|
||||||
<li>[img float=right]https://redmatrix.me/images/default_profile_photos/rainbow_man/48.jpg[/img] <img src="https://redmatrix.me/images/default_profile_photos/rainbow_man/48.jpg" style="float:right;" alt="Image/photo" /><br />
|
<li>[img float=right]https://zothub.com/images/default_profile_photos/rainbow_man/48.jpg[/img] <img src="https://zothub.com/images/default_profile_photos/rainbow_man/48.jpg" style="float:right;" alt="Image/photo" /><br />
|
||||||
<div style="clear:both;"></div>
|
<div style="clear:both;"></div>
|
||||||
<li>[code]code[/code] <code>code</code><br />
|
<li>[code]code[/code] <code>code</code><br />
|
||||||
<li>[quote]quote[/quote] <blockquote>quote</blockquote><br />
|
<li>[quote]quote[/quote] <blockquote>quote</blockquote><br />
|
||||||
@@ -50,8 +50,8 @@
|
|||||||
<p>$Projectname specific codes</p>
|
<p>$Projectname specific codes</p>
|
||||||
<ul class="listbullet" style="list-style-type: circle;">
|
<ul class="listbullet" style="list-style-type: circle;">
|
||||||
<li>[&copy;] © This works for many HTML entities</li>
|
<li>[&copy;] © This works for many HTML entities</li>
|
||||||
<li>[zrl]https://redmatrix.me[/zrl] Magic-auth version of [url] tag</li>
|
<li>[zrl]https://zothub.com[/zrl] Magic-auth version of [url] tag</li>
|
||||||
<li>[zmg]https://redmatrix.me/some/photo.jpg[/zmg] Magic-auth version of [img] tag<br /></li>
|
<li>[zmg]https://zothub.com/some/photo.jpg[/zmg] Magic-auth version of [img] tag<br /></li>
|
||||||
|
|
||||||
<li>[observer=1]Text to display if observer is authenticated in the matrix[/observer]</li>
|
<li>[observer=1]Text to display if observer is authenticated in the matrix[/observer]</li>
|
||||||
<li>[observer=0]Text to display if observer is <strong>not</strong> authenticated in the matrix[/observer]</li>
|
<li>[observer=0]Text to display if observer is <strong>not</strong> authenticated in the matrix[/observer]</li>
|
||||||
|
|||||||
45
doc/bugs.bb
Normal file
45
doc/bugs.bb
Normal file
@@ -0,0 +1,45 @@
|
|||||||
|
[h2]Bugs, Issues, and things that go bump in the night...[/h2]
|
||||||
|
[h3]Something went wrong! Who is charge of fixing it?[/h3]
|
||||||
|
|
||||||
|
[b]Hubzilla Community Server[/b]
|
||||||
|
|
||||||
|
Hubzilla Community Server is open source software which is maintained by "the community" - essentially unpaid volunteers.
|
||||||
|
|
||||||
|
[b]Hubzilla Enterprise Server[/b]
|
||||||
|
|
||||||
|
Hubzilla Enterprise Server is commercial software with a variety of support plans depending on the specific license terms.
|
||||||
|
|
||||||
|
|
||||||
|
The first thing you need to do is talk to your hub administrator - the person who runs and manages your site. They are in the unique position of having access to the internal software and database and [b]logfiles[/b] and will need to be involved in fixing your problem. Other people "on the net" can't really help with this. The first thing the hub administrator needs to do is look at their logs and/or try to reproduce the problem. So try to be as helpful and courteous as possible in helping them look into the problem.
|
||||||
|
|
||||||
|
To find your hub administrator (if you don't know who they are) please look at [url=[baseurl]/siteinfo]this page[/url]. If they have not provided any contact info on that page or provided an "Impressum" there, see [url=[baseurl]/siteinfo/json]this site info summary[/url] under the heading "admin:".
|
||||||
|
|
||||||
|
[h3]I'm a hub administrator; what do I do?[/h3]
|
||||||
|
|
||||||
|
The software instructions which provide this server are open source and are available for your inspection. If an error message was reported, often one can do a search on the source files for that error message and find out what triggered it. With this information and the site logfiles it may be possible to figure out the sequence of events leading to the error. There could also be other sites involved, and the problem may not even be on your site but elsewhere in the network. Try to pin down the communication endpoints (hubs or sites) involved in the problem and contact the administrator of that site or those sites. Please try and provide an event time of when things went wrong so it can be found in the logs. Work with the other administrator(s) to try and find the cause of the problem. Logfiles are your friend. When something happens in the software that we didn't expect, it is nearly always logged.
|
||||||
|
|
||||||
|
[h3]The white screen of death[/h3]
|
||||||
|
|
||||||
|
If you get a blank white screen when doing something, this is almost always a code or syntax error. There are instructions in your .htconfig.php file for enabling syntax logging. We recommend all sites use this. With syntax logging enabled repeat the sequence which led to the error and it should log the offending line of code. Hopefully you will be able to fix the problem with this information. When you do, please submit the fix "upstream" so that we can share the fix with the rest of the project members and other communities. This is a key benefit of using open source software - we share with each other and everybody benefits.
|
||||||
|
|
||||||
|
[h3]I'm stumped. I can't figure out what is wrong.[/h3]
|
||||||
|
|
||||||
|
[b]Hubzilla Enterprise Server[/b]
|
||||||
|
|
||||||
|
Please make contact with the vendor - who will have provided you with support contact details. Preferably this contact will be made by the hub administrator so that he/she can assist us in collecting the necessary issue details. We will assign a ticket and notify you of progress.
|
||||||
|
|
||||||
|
|
||||||
|
[b]Hubzilla Community Server[/b]
|
||||||
|
|
||||||
|
At this point it might be worthwhile discussing the issue on one of the online forums. There may be several of these and some may be more suited to your spoken language. As a last resort, try "Channel One", which is in English.
|
||||||
|
|
||||||
|
If the community developers can't help you right away, understand that they are volunteers and may have a lot of other work and demands on their time. At this point you need to file a bug report. You will need an account on github.com to do this. So register, and then visit https://github.com/redmatrix/hubzilla/issues
|
||||||
|
. Create an issue here and provide all the same information that you provided online. Don't leave out anything.
|
||||||
|
|
||||||
|
Then you wait. If it's a high profile issue, it may get fixed quickly. But nobody is in charge of fixing bugs. If it lingers without resolution, please spend some more time investigating the problem. Ask about anything you don't understand related to the behaviour. You will learn more about how the software works and quite possibly figure out why it isn't working now. Ultimately it is somebody in the community who is going to fix this and you are a member of the community; and this is how the open source process works.
|
||||||
|
|
||||||
|
|
||||||
|
[b]In either case[/b]
|
||||||
|
|
||||||
|
Other developers working to fix the problem may need to find out more, so do your homework and document what is happening and everything you've tried. Don't say "I did xyz and it didn't work." That doesn't tell us anything. Tell us precisely what steps you took and what you expected the result to be, and precisely what happened as a result. If there were any error messages, don't say "there was an error message". Tell us exactly what the message said.
|
||||||
|
|
||||||
78
doc/ca/Privacy.md
Normal file
78
doc/ca/Privacy.md
Normal file
@@ -0,0 +1,78 @@
|
|||||||
|
Política de Privacitat
|
||||||
|
======================
|
||||||
|
|
||||||
|
|
||||||
|
##Sumari##
|
||||||
|
|
||||||
|
|
||||||
|
Q: Qui pot veure el meu contingut?
|
||||||
|
|
||||||
|
A: Per defecte TOTHOM A INTERNET, EXCEPTE que ho hagis restringit. $Projectname permet te triar el nivell de privacitat que desitgis. El contingut restringit no serà visible als "espies de la xarxa " ni als anunciants. Estarà protegit contra l'espionatge per estranys - de la millor manera que sabem. Administradors de nodes amb habilitats i paciència suficients poden ser capaços d'espiar a algunes comunicacions privades però han de invertir molt esforç per fer-ho. Hi maneres de Privacitat en $Projectname que són fins i tot resistents a escoltes il·legals pels administradors de nodes hàbils i decidits.
|
||||||
|
|
||||||
|
Q: Pot el meu contingut ser censurat?
|
||||||
|
|
||||||
|
A: $Projectname (la xarxa de nodes) NO POT censurat el teu contingut. Els administradors de servidor i del node estan subjectes a les lleis locals i poden suprimir contingut censurable des del seu lloc/node. Qualsevol POT convertir-se en un administrador de node, inclòs tu; i per tant publicar contingut que d'altra manera podria ser censurat. Encara i això estaràs subjecte a les teves lleis locals. Es la teva decisió.
|
||||||
|
|
||||||
|
|
||||||
|
##Definicions
|
||||||
|
|
||||||
|
**$Projectname**
|
||||||
|
|
||||||
|
Coneguda d'un altre forma com "la xarxa", Hubzilla és una col·lecció d'equips individuals/servidors (àlies nodes) que connecten entre si per formar una xarxa cooperativa més gran.
|
||||||
|
|
||||||
|
**node (hub)**
|
||||||
|
|
||||||
|
Un equip individual o un servidor connectat a $Projectname. Aquests són proporcionats per un **administrador del node** i poden ser públics o privats, de pagament o gratuïts.
|
||||||
|
|
||||||
|
**administrador del node**
|
||||||
|
|
||||||
|
L'operador del sistema d'un node individual.
|
||||||
|
|
||||||
|
##Polítiques
|
||||||
|
|
||||||
|
**Informació Pública**
|
||||||
|
|
||||||
|
Qualsevol informació o cualsevol cosa publicada per tu a $Projectname POT ser pública o visible a qualsevol a Internet. En la mesura que sigui possible, $Projectname te permet protegir el contingut i restringir qui pot veure-ho.
|
||||||
|
|
||||||
|
La teva foto de perfil, el nom del teu canal, i la ubicació (URL o adreça de xarxa) del seu canal són visibles per a qualsevol persona a Internet i els controls de privacitat no afectaràn la visualització d'aquests elements.
|
||||||
|
|
||||||
|
POTS proporcionar, a més, un altra informació de perfil. Qualsevol informació que proporcionis en el teu perfil públic **per defecte** POT ser transmesa a altres centres en $Projectname i, a més, és possible que aparegui en el directori del canal. POTS restringir la visualització d'aquesta informació de perfil. Es POT restringir (permets que visualitzin), només als membres del teu nucli, o només les connexions (amics), o altres conjunts limitats de espectadors com desitgis. Si vols que el teu perfil estigui restringit, has d'establir la configuració de privacitat adequada, o simplement NO PROPORCIONIS informació addicional.
|
||||||
|
|
||||||
|
**Contingut**
|
||||||
|
|
||||||
|
El contingut que proporciones (missatges d'estat, fotos, arxius, etc.) et pertany a tu. Per defecte a $Projectname és publica contingut de forma oberta i visible per qualsevol en internet (PÚBLIC). POTS controlar això a la seva configuració del canal i restringir els permisos per defecte o pot restringir la visibilitat de qualsevol article únic publicat per separat (PRIVAT). Els desenvolupadors $Projectname s'han d'assegurat que el contingut restringit és visible NOMÉs per als que estan a la llista d'autoritzats - han emprat el millor d'ells per això.
|
||||||
|
|
||||||
|
El contingut (especialment les entrades d'estat) que es comparteixen amb altres xarxes o que has fet visible a qualsevol a Internet (PÚBLIC) no poden ser retirats (esborrats) fàcilment un cop que ha estat publicats. Pot haver estat compartit amb altres xarxes i posat a disposició a través de feeds RSS/Atom. També pot haver estat sindicat en altres llocs $Projectname. Pot aparèixer en les xarxes d'espionatge i recerques a Internet. Si no desitges aquest comportament per defecte, si et plau, ajusta la configuració del canal i restringeix qui pot veure el teu contingut.
|
||||||
|
|
||||||
|
**Comentaris i entrades a Forums**
|
||||||
|
|
||||||
|
Els comentaris als llocs que es van crear per altres i entrades que es designen com missatges al fòrum pertanyen tant a tu com al creador/autor, però la distribució d'aquests llocs no està sota el teu control directe. Aquestes entrades/comentaris es poden tornar a distribuir als altres, i pot ser visible per qualsevol en internet. En el cas dels comentaris, el creador del "primer missatge" al fil al qual està responent controla la distribució de tots els comentaris i respostes a aquest missatge.
|
||||||
|
|
||||||
|
|
||||||
|
**Informació Privada**
|
||||||
|
|
||||||
|
Els desenvolupadors de $Projectname aseguraràn que cualsevol contingut que creis designat com PRIVAT estarà protegit contra estaràn protegits contra les escoltes - han emprat el millor d'ells per això. El contingut privat generalment s'amaga o enfosqueix fins i tot als administradors de nodes. També s'eliminen les notificacions per correu electrònic. És difícil, però no impossible que aquest contingut sigui vist per un administrador de node. El xifrat extrem a extrem es facilita com una característica opcional i fa el contingut, NO VISIBLE, fins i tot per un administrador determinat a veure'l.
|
||||||
|
|
||||||
|
##Privacitat de la Identitat
|
||||||
|
|
||||||
|
La Privacitat per la teva identitat és un altre aspecte. En tenir una identitat descentralitzada a $Projectname, la seva privacitat s'estén més enllà del seu node d'inici. Si vols tenir el control complet de la teva privacitat i seguretat has d'executar el teu propi centre en un servidor dedicat. Per a moltes persones, això és complicat i pot esgotar les seves habilitats tècniques. Així que anem a enumerar algunes precaucions que pots fer per assegurar la teva privacitat tant com sigui possible.
|
||||||
|
|
||||||
|
Una identitat descentralitzat té molts avantatges i te dóna un munt de característiques interessants, però has de ser conscient del fet que la teva identitat és coneguda per altres centres de la xarxa $Projectname. Un d'aquests avantatges és que altres canals poden servir contingut personalitzat i permetrà veure el contingut privat (com fotos privades que altres volen compartir amb vostè). Per això els canals necessiten saber qui ets. Però entenem que de vegades aquests altres canals en saben més de tu del que pugui desitjar. Per exemple, el plug-in Visage pot dir-li al propietari d'un canal l'última vegada que vas visitar el seu perfil. Pots renunciar fàcilment a aquest baix nivell de seguiment, que creiem inofensiu.
|
||||||
|
|
||||||
|
* Pots activar [No Em Segueixis (anglès:Do Not Track (DNT))](http://donottrack.us/) al teu navegador web. Respectem aquesta nova política de privacitat proposada. Tots en navegadors moderns soporten DNT. Trobaràs als ajustos de privacitat del teu navegador web o sino pots consultar el manual del navegador. Això no afectarà la funcionalitat de $Projectname. Aquest ajust, segurament, es suficient per la majoria de la gent.
|
||||||
|
|
||||||
|
* Pots [deshabilitar publicacions](ajustos) del teu canal al nostre canal de directoris. Si vols que la gent trobi el teu canal, has de facilitar la teva direcció del canal a ell(a). Pensem que això es un bon indicador que, en aquest cas, vols es un extra de privacitat i automaticament s'activarà "No Em Segueixis" (DNT).
|
||||||
|
|
||||||
|
* Pots tenir un node blocat. Això significa que tots els canals i contingut en aquest node no es públic i invisible al món exterior. Això és quelcom que només ho pot fer l'administrador del teu node. També es respecta això i automàticament s'activa DNT si és sel·leccionat.
|
||||||
|
|
||||||
|
###Censura
|
||||||
|
|
||||||
|
$Projectname és una xarxa global que inclou a totes les religions i cultures. Això no implica que tots els membres de la xarxa pensin de la mateixa manera que tu pel que fa en temes polèmics, i algunes persones poden sentir una forta oposició al contingut que publiquis. En general, si desitjes publicar alguna cosa que saps que no és universalment acceptable, el millor enfocament consisteix a restringir l'audiència utilitzant els controls de privacitat a un petit cercle d'amics.
|
||||||
|
|
||||||
|
$Projectname com un proveïdor de la xarxa no pot censurar el contingut. No obstant això, els administradors de node poden censurar qualsevol contingut que apareix en el seu centre per complir amb les lleis locals o fins i tot el seu judici personal. La seva decisió serà inapel·lable. Si té problemes amb qualsevol administrador de node, pots moure el teu compte i publicacions a un altre lloc que estigui més d'acord amb les teves expectatives. Si us plau comprova (periòdicament) les [Condicions d'ús](help/TermsOfService) del teu centre per aprendre sobre les normes o directrius. Si el teu contingut consisteix en un material que és il·legal o que pugui causar problemes, es recomana ENCARIDAMENT a allotjar tu mateix (convertir-te en un administrador de node). Podràs trobar que el teu contingut està bloquejat en alguns centres, però $Projectname, com a xarxa, no pot bloquejar una vegada publicat.
|
||||||
|
|
||||||
|
$Projectname RECOMANA que els administradors de nodes ofereixin un període de gràcia de 1-2 dies entre advertir al titular d'un compte, que hi ha contingut que ha de ser eliminat, i l'eliminació física o desactivació del compte. Això li donarà al propietari del contingut l'oportunitat d'exportar els seus canal de meta-dades i importar-lo a un altre lloc. En rares ocasions el contingut pot ser de tal naturalesa que es justifiqui l'eliminació immediata del compte. Aquesta és una decisió del node, no és una decisió de $Projectname.
|
||||||
|
|
||||||
|
Si normalment i regularment publiques contingut per a adults o de caràcter ofensiu, es recomana ENCARIDAMENT que marquis el compte com "NSFW" (No segur per al treball). Això evitarà que es mostri la teva foto de perfil al directori, excepte per als espectadors que han optat per desactivar el "mode segur". Si la teva foto de perfil es considera per a adults o ofensiu pels administradors de directori, l'administrador del directori POT marcar la teva foto de perfil com NSFW. Actualment no hi ha un sistema oficial per revertir aquesta decisió. Així DEURIES marcar tu mateix, el teu compte, com a NSFW si és probable que no sigui apropiat per a audiències generals.
|
||||||
|
|
||||||
|
#include doc/macros/main_footer.bb;
|
||||||
8
doc/ca/TermsOfService.md
Normal file
8
doc/ca/TermsOfService.md
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
Termes del Servei
|
||||||
|
================
|
||||||
|
Aquest node Hubzilla encara no te Termes del Servei. Estic buscant un model adient.....
|
||||||
|
En resum empreu el servei respectant els altres i no cometeu il·legalitats. Aquest node no s'identifica amb les opinions dels usuaris ni es responsablilitza de les mateixes.
|
||||||
|
|
||||||
|
|
||||||
|
#include doc/SiteTOS.md;
|
||||||
|
|
||||||
27
doc/ca/about.bb
Normal file
27
doc/ca/about.bb
Normal file
@@ -0,0 +1,27 @@
|
|||||||
|
[b]Que és[/b]
|
||||||
|
|
||||||
|
$Projectname és una xarxa de comunicacions descentralitzades, que permet comunicacions lliures de censura, amb privacitat, i per tant lliure de les urpes opressores de gegants contemporanis de comunicació corporativa. Aquests gegants funcionen principalment com xarxes d''espionatge per a cobrar a clients de totes les classes i tipus, a més de monopolitzar i centralitzar Internet; una característica que no formava part dels objectius originals i revolucionàries que van produir la World Wide Web.
|
||||||
|
|
||||||
|
$Projectname és gratuït i de codi obert. Està dissenyat per a creixèr des de una raspberry pi de 35€, fins el màxim de la gama de servidors AMD i servidors empresarials de múltiples nuclis que funcionen amb Intel Xeon. Pot ser utilitzat per a suportar la comunicació entre uns pocs individus, o l'escalar a molts milers i més.
|
||||||
|
|
||||||
|
$Projectname pretén ser àgil i capaç de treballar amb múltiples recursos informàtics. És fàcil d'utilitzar pels usuaris habituals d''ordinadors, així com per administradors de sistemes i desenvolupadors.
|
||||||
|
|
||||||
|
|
||||||
|
La forma d'utilitzar depèn de com voleu utilitzar-lo.
|
||||||
|
|
||||||
|
Està escrit en el llenguatge de scripting PHP, pel que és trivial instal·lar-lo en qualsevol plataforma d'allotjament en ús avui en dia. Això inclou l'auto-allotjament a casa, en els proveïdors d'allotjament, com ara [url=http://mediatemple.com/]Media Temple[/url] i [url=http://www.dreamhost.com/]Dreamhost[/url], o en servidors virtuals i dedicats, oferts per gràcia de [url=https://www.linode.com]Linode[/url], [url=http://greenqloud.com]GreenQloud[/url] o [url=https://aws.amazon.com]Amazon AWS[/url].
|
||||||
|
|
||||||
|
|
||||||
|
En altres paraules, $Projectname es pot executar en qualsevol plataforma informàtica que vingui amb un servidor web, una base de dades compatible amb MySQL i el llenguatge de scripting PHP.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
De pas, $Projectname ofereix una sèrie de atractius únics:
|
||||||
|
|
||||||
|
[b]Identificació amb un sol clic d'usuari:[/b] vol dir que pot accedir a llocs en $Projectname simplement fent clic als enllaços a llocs remots. L''autenticació passa automàgicament en segon plà. Oblida't de recordar múltiples noms d'usuari amb múltiples contrasenyes en accedir a diferents llocs en línia.
|
||||||
|
|
||||||
|
[b]La clonació:[/b] de les identitats en línia. La seva presència en línia ja no ha d'estar lligat a un sol servidor, nom de domini o adreça IP. Pot clonar i importar la seva identitat (o canal com en diem) a un altre servidor (o, en un concentrasor com son coneguts els servidors a $Projectname). Ara, si el seu concentrador/servidor cau, no et preocupis, els teus contactes, missatges [i]*[/i], i els missatges de [i]*[/i] automàgicament segueixen estant disponibles i accessibles al seu canal clonat. [i](*: només es perden els missatges i els missatges a partir del moment en que va clonar el seu canal)[/i]
|
||||||
|
|
||||||
|
[b]Privacitat:[/b] les identitats a $Projectname (Zot identificadors) es poden eliminar, salvar/descarregar i clonar. L'usuari té el control total de les seves dades. Si vostè decideix esborrar tot el seu contingut i esborrar la seva ID Zot, tot el que has de fer és fer clic a un enllaç i s'eliminen immediatament d concentrador/servidor. No hi ha preguntes, sense problemes.
|
||||||
|
|
||||||
|
#include doc/macros/main_footer.bb;
|
||||||
19
doc/ca/accounts_profiles_channels_basics.bb
Normal file
19
doc/ca/accounts_profiles_channels_basics.bb
Normal file
@@ -0,0 +1,19 @@
|
|||||||
|
[size=large][b]Comptes, Perfils i Canals[/b][/size]
|
||||||
|
|
||||||
|
Una vegada t'has registrat amb un [i]compte[/i] al servei, també has de crear un [i]perfil[/i] i un [i]canal[/i].
|
||||||
|
|
||||||
|
[b]Compte[/b]
|
||||||
|
Tens i]un[/i] compte. Això consisteix en una adreça de correu electrònic i una contrasenya. Amb el teu compte pots accedit al teu perfil i al teu canal.
|
||||||
|
[i]Pensa en el teu compte com una via per autenticar-te al teu lloc $Projectname. Et permet fer coses com, crear perfils i canals amb els que podràs amb altres persones.[/i]
|
||||||
|
|
||||||
|
[b]Perfil[/b]
|
||||||
|
Segurament t'has registrat a altres serveis a internet, com fòrums, o comunicacions en línia. Per a tots ells proveeixes alguna informació de tu, data de naixement, país, edat, i que es el que d'agrada. [observer=1]If you like you can see your profile here: [baseurl]/profile/[observer.webname] and edit it by clicking on the pencil icon next to your avatar image. [/observer]
|
||||||
|
Unlike other services $Projectname offers you the advantage of creating [i]many more profiles[/i]. That way you are able to distinguish between profiles targeted specially at everyone (your public profile), your work mates, your family and your partner.
|
||||||
|
[i]Think of your profile as the basic information about yourself you tell other people.[/i]
|
||||||
|
|
||||||
|
[b]Channel[/b]
|
||||||
|
During the registration you created your first [i]channel[/i]. Yes, besides several profiles you are able to have several channels. This might be a bit confusing in the beginning, but let's clear things up. You already have created one channel. You can use this one for the public, to communicate with people about every day life. But perhaps you are an avid book reader and many people are bored by that. So you open a [i]second channel[/i] just for the book lovers, where you all can talk about books as much as you like. Obviously this is a new stream of posts, with a new profile (... or new profile[i]s[/i] ...) and completely different contacts. Some connections might exist in both channels, but there will be some that are exclusive to only one of both. You yourself just switch between both of them just like you would in real life switch when talking to people you meet on the street or people you meet specially to talk about books. You can even connect to yourself, or better: to your other channel. :)
|
||||||
|
[i]Think of a channel as different spaces dedicated to different topics where you meet with different people.[/i]
|
||||||
|
|
||||||
|
#include doc/macros/main_footer.bb;
|
||||||
|
|
||||||
15
doc/ca/admins.bb
Normal file
15
doc/ca/admins.bb
Normal file
@@ -0,0 +1,15 @@
|
|||||||
|
[h2]Documentació per a Administradors de Concentradors (dits Hubs en anglès)[/h2]
|
||||||
|
|
||||||
|
[h3]Administradors[/h3]
|
||||||
|
|
||||||
|
[zrl=[baseurl]/help/install]Instal·lació[/zrl]
|
||||||
|
[zrl=[baseurl]/help/red2pi]Instal·lant $Projectname en una Raspberry Pi[/zrl]
|
||||||
|
[zrl=[baseurl]/help/Hubzilla_on_OpenShift]$Projectname en OpenShift[/zrl]
|
||||||
|
[zrl=[baseurl]/help/troubleshooting]Consells per solucionar problemes[/zrl]
|
||||||
|
[zrl=[baseurl]/help/hidden_configs]Afinant Configuracions ocultes de $Projectname[/zrl]
|
||||||
|
[zrl=[baseurl]/help/faq_admins]FAQ Per als Administradors[/zrl]
|
||||||
|
[zrl=[baseurl]/help/service_classes]Classes de Serveis[/zrl]
|
||||||
|
[zrl=[baseurl]/help/directories]Treballant amb i configuració de directoris[/zrl]
|
||||||
|
[zrl=[baseurl]/help/theme_management]Gestió de Temes[/zrl]
|
||||||
|
|
||||||
|
|
||||||
32
doc/ca/channels.bb
Normal file
32
doc/ca/channels.bb
Normal file
@@ -0,0 +1,32 @@
|
|||||||
|
[b]Canals[/b]
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
Els canals són simplement col·leccions de continguts emmagatzemats en un sol lloc. Un canal pot representar qualsevol cosa. Podria representi, un lloc web, un fòrum, àlbums de fotos, qualsevol cosa. Per a la majoria de la gent, el seu primer canal serà "Ell" mateix.
|
||||||
|
|
||||||
|
Les característiques més importants d'un canal que "em" representa són:
|
||||||
|
|
||||||
|
Comunicacions segures i privades "lliures d'spam"
|
||||||
|
|
||||||
|
Identitat i "un sol inici de sessió " a través de tota la xarxa
|
||||||
|
|
||||||
|
Controls de privacitat i permisos que s'estenen a tota la xarxa
|
||||||
|
|
||||||
|
Serveis de directori (com una guia telefònica)
|
||||||
|
|
||||||
|
En resum, una cadena que et representa a tú mateix és "jo, a l'Internet ".
|
||||||
|
|
||||||
|
Hauràs de crear el teu primer canal com a part del procés de registre. També pots crear canals additonal des del menú "Selecciona canal ".
|
||||||
|
|
||||||
|
Se li demanarà que proporcioni un nom de canal, i un curt sobrenom. Per a un canal que et representa a tu mateix, és una bona idea utilitzar el teu nom real per assegurar-se que els teus amics puguin trobar-te, i connectar al teu canal. El sobrenom curt s'utilitzarà per generar un nom "intermediari". Això és una mica com un nom d'usuari, i es veurà com una adreça de correu electrònic, prenent forma sobrenom@domini. Has de pensar una mica en que desitges utilitzar aquí. Imagina a algú demanant la teu nom intermediari i haver de dir-los que és "Crema-miss_issipi.123". "cremamississipi" seria una opció molt millor.
|
||||||
|
|
||||||
|
Una vegada que hagis creat el teu canal, se't portarà a la pàgina de configuració, que permet definir el teu canal, i establir els teus permisos predeterminats.
|
||||||
|
|
||||||
|
Un cop fet això, el canal està llest per utilitzar. En [observer=1][observer.url][/observer][observer=0]example.com/channel/username[/observer] trobaràs el teu canal de "flux". Aquí és on apareixerà la teva activitat recent, en ordre cronològic invers. Si publica a la casella "compartir", apareixerà l'entrada a la part superior del teu flux. També trobaràs enllaços a totes les altres àrees de comunicació per aquest canal. El fitxa "en quant a " conté el teu "perfil", la pàgina de fotos conté àlbums de fotos, i la pàgina d'esdeveniments conté esdeveniments compartits per tu i els teus contactes.
|
||||||
|
|
||||||
|
La pàgina "Xarxa" conté tots els missatges recents de tota la xarxa $Projectname, de nou amb sentit cronològic invers. Els missatges exactes que apareixen aquí depenen en gran mesura dels teus permisos. En la teva forma més permissiva, rebràs missatges de desconeguts. A l'altre extrem de l'escala, podràs veure els missatges de només els seus amics - o si ets realment antisocial, només els teus propis missatges.
|
||||||
|
|
||||||
|
Com s'ha esmentat al principi, són possibles molts altres tipus de canal, però, el procediment de creació és el mateix. La diferència entre els canals es troba principalment en els permisos assignats. Per exemple, una cadena per a l'intercanvi de documents amb els seus col.legues a la feina, és millor si canvieu valors més permissius per "Em pot escriure en el meu" públic "magatzem d'arxius ", que un compte personal. Per obtenir més informació, consulteu la secció de permisos.
|
||||||
|
|
||||||
|
|
||||||
|
#include doc/macros/main_footer.bb;
|
||||||
34
doc/ca/develop.bb
Normal file
34
doc/ca/develop.bb
Normal file
@@ -0,0 +1,34 @@
|
|||||||
|
[h2]Documentació per Desenvolupadors[/h2]
|
||||||
|
|
||||||
|
[h3]Documentació Tècnica[/h3]
|
||||||
|
[zrl=[baseurl]/help/Zot---A-High-Level-Overview]Una vista en profunditat a Zot[/zrl]
|
||||||
|
[zrl=[baseurl]/help/zot]Una introducció a Zot[/zrl]
|
||||||
|
[zrl=[baseurl]/help/zot_structures]Estuctures a Zot[/zrl]
|
||||||
|
[zrl=[baseurl]/help/comanche]Descripcions de Pàgina a Comanche[/zrl]
|
||||||
|
[zrl=[baseurl]/help/Creating-Templates]Creant Plantilles a Comanche[/zrl]
|
||||||
|
[zrl=[baseurl]/help/Widgets]Artilugis[/zrl]
|
||||||
|
[zrl=[baseurl]/help/plugins]Complements[/zrl]
|
||||||
|
[zrl=[baseurl]/help/hooklist]Ganxos (detallat - en construcció)[/zrl]
|
||||||
|
[zrl=[baseurl]/help/doco]Documentació[/zrl]
|
||||||
|
[zrl=[baseurl]/help/DerivedTheme1]Creant Temes Derivats[/zrl]
|
||||||
|
[zrl=[baseurl]/help/schema_development]Esquemes[/zrl]
|
||||||
|
[zrl=[baseurl]/help/Translations]Traduccions[/zrl]
|
||||||
|
[zrl=[baseurl]/help/developers]Desenvolupadors[/zrl]
|
||||||
|
[zrl=[baseurl]/help/intro_for_developers]Introducció per Desenvolupadors[/zrl]
|
||||||
|
[zrl=[baseurl]/help/database]Documentació del esquema de la base de dades[/zrl]
|
||||||
|
[zrl=[baseurl]/help/api_functions]Funcions de la API[/zrl]
|
||||||
|
[zrl=[baseurl]/help/api_posting]Entrades a $Projectname emprant la API[/zrl]
|
||||||
|
[zrl=[baseurl]/help/developer_function_primer]Funcions Red 101[/zrl]
|
||||||
|
[zrl=[baseurl]/doc/html/]Refrència del Codi (Doxygen generat - ajust de cookies)[/zrl]
|
||||||
|
[zrl=[baseurl]/help/to_do_doco]Llista de Pendents per a la Documentació del Projecte $Projectname[/zrl]
|
||||||
|
[zrl=[baseurl]/help/to_do_code]Llista de Pendents per a Desenvolupadors[/zrl]
|
||||||
|
[zrl=[baseurl]/help/roadmap]Full de ruta[/zrl]
|
||||||
|
[zrl=[baseurl]/help/git_for_non_developers]Git per a No-Desenvolupadors[/zrl]
|
||||||
|
[zrl=[baseurl]/help/dev_beginner]Manual pas-a-pas per a desenvolupadors principiants[/zrl]
|
||||||
|
|
||||||
|
[h3]Preguntes Més Freqüents (FAQ) Per Desenvolupadors[/h3]
|
||||||
|
[zrl=[baseurl]/help/faq_developers]FAQ Per Desenvoupadors[/zrl]
|
||||||
|
|
||||||
|
[h3]Recursos Externs[/h3]
|
||||||
|
[url=https://zothub.com/channel/one]Development Channel[/url]
|
||||||
|
[url=https://federated.social/channel/postgres]Postgres-specific $Projectname Admin Support Channel[/url]
|
||||||
202
doc/ca/features.bb
Normal file
202
doc/ca/features.bb
Normal file
@@ -0,0 +1,202 @@
|
|||||||
|
[b][size=36]Característiques[/size][/b]
|
||||||
|
|
||||||
|
[b][size=24]$Projectname en Poques Paraules[/size][/b]
|
||||||
|
|
||||||
|
TL;DR
|
||||||
|
|
||||||
|
$Projectname proveeix publicacions i comunicacions socials distribuïdes amb [b]permisos descentralitzats[/b].
|
||||||
|
|
||||||
|
Així, que vol dir "permisos descentralitzats"? Em donen la habilitat de compàrtir quelcom al meu lloc web (fotos, mitjans, arxius, pàgines web, etc.) Aamb persones específiques en llocs completament diferents - encara que no necesàriament amb [i]tothom[/i] en aquests llocs web; i no es necessita tenir un usuari i contrasenya en aquests altres llocs web per poder fer-ho ni per poder tafanejar el que ells han compartit amb mi. Ells tenen un usuari i contrasenya al seu lloc web i "màgica autenticació" entre llocs web afiliats a la xarxa. També, al esser centralitzat, no hi ha terceres parts que puguin saltar-se els permisos i veure el que estàs fent a la xarxa.
|
||||||
|
|
||||||
|
$Projectname combina moltes característiques dels blocs tradicionals, les xarxes socials i els mitjans de comunicació, sistemes de gestió de continguts i emmagatzematge en el núvol personal en un marc de treball fàcil d'utilitzar. Cada node de la xarxa pot funcionar independent o enllaçar amb altres nodes per crear una súper-xarxa; deixant la privacitat sota el control de l'editor original.
|
||||||
|
|
||||||
|
$Projectname és una aplicació de servidor web de codi obert escrit originalment en PHP/MySQL i és fàcilment instalable per aquells amb habilitats d'administració web bàsiques. També s'estén fàcilment a través de plugins i temes i altres eines de tercers.
|
||||||
|
|
||||||
|
[b][size=24]Característiques de $Projectname[/size][/b]
|
||||||
|
|
||||||
|
|
||||||
|
$Projectname és un tot terreny per a la publicació web i una xarxa de comunicacions amb diverses característiques úniques. Està dissenyat per a ser utilitzat per la gamma més àmplia de persones a la web, dels blocaires no tècnics, als programadors de PHP experts i administradors de sistemes experimentats.
|
||||||
|
|
||||||
|
A aquesta pàgina s'enumeren algunes de les característiques fonamentals de $Projectname que s'inclouen amb la versió oficial. Igual que amb la majoria del programari lliure i de codi obert, pot haver moltes altres extensions, complements, plugins, temes i configuracions que estan limitats només per les necessitats i la imaginació dels membres.
|
||||||
|
|
||||||
|
[b][size=24]Construït per la Privacitat i la Llibertat[/size][/b]
|
||||||
|
|
||||||
|
Un dels objectius de disseny de $Projectname és permetre la comunicació fàcil a la web, mentre que preserva la intimitat, si així es desitja pels membres. Per aconseguir aquest objectiu, $Projectname inclou una sèrie de característiques que permeten nivells arbitraris de privacitat:
|
||||||
|
|
||||||
|
[b]Control Lliscant d'Afinitat[/b]
|
||||||
|
|
||||||
|
En afegir connexions en $Projectname, els membres tenen l'opció d'assignar nivells de "afinitat" (el prop que la seva amistat és amb el contacte) per a la nova connexió. Per exemple, quan s'afegeix a algú que resulta ser una persona a la que segueixes el seu bloc, podries assignar al seu canal un nivell d'afinitat de "Coneguts".
|
||||||
|
|
||||||
|
D'altra banda, quan s'afegeix el canal d'un amic, que pot ser col·locat sota el nivell d'afinitat de "Amics".
|
||||||
|
|
||||||
|
En aquest punt, l'eina [i]Control Lliscant d'Afinitat[/i] de $Projectname, que en general apareix a la part superior de la teva pàgina, ajusta el contingut de la pàgina per incloure als que estan dins del rang afinitat desitjada. No es mostraran Canals fora d'aquest rang, llevat que s'ajusti el Control Lliscant per incloure'ls.
|
||||||
|
|
||||||
|
El Control Lliscant D'Afinitat permet filtrar instantàniament grans quantitats de contingut, agrupats per nivells de proximitat.
|
||||||
|
|
||||||
|
[b]Filtre de Connexions[/b]
|
||||||
|
|
||||||
|
Tens la capacitat de controlar amb precisió el que apareix en el teu flux emprant opcionalment el "filtre de connexió". Quan s'activa, l'editor de connexió proporciona entrades per a la selecció de criteris que ha de ser aparellat amb la finalitat d'incloure o excloure un lloc específic d'un canal específic. Una vegada que un missatge s'ha permès, tots els comentaris a aquest lloc se'ls permet, independentment de si s'ajusten als criteris de selecció. Pots seleccionar paraules que si estàn presents al bloc o assegurar-te que està inclosses en el teu flux. Les expressions regulars es poden usar per al control encara més fi, així com hashtags o fins i tot l'idioma detectat del lloc.
|
||||||
|
|
||||||
|
[b]Llista de Control d'Accés[/b]
|
||||||
|
|
||||||
|
En compartir el contingut, els membres tenen l'opció de restringir qui veu el contingut. En fer clic al cadenat sota de la casella de compartir, un pot triar els destinataris desitjats del lloc, fent clic en els seus noms.
|
||||||
|
|
||||||
|
Un cop enviat, el missatge serà visible únicament pel remitent i els destinataris seleccionats. En altres paraules, el missatge no apareixerà al mur públic.
|
||||||
|
|
||||||
|
Llistes de Control d'Accés es poden aplicar als continguts i missatges, fotos, esdeveniments, pàgines web, sales de xat i arxius.
|
||||||
|
|
||||||
|
[b]Inici de Sessió Únic[/b]
|
||||||
|
|
||||||
|
Les Llistes de Control d'Accés treballen per a tots els canals a la xarxa gràcies a la nostra tecnologia única d'inici de sessió únic. La majoria dels enllaços interns proporcionen una identitat símbolica que pot ser verificada en altres llocs $Projectname i s'utilitza per controlar l'accés als recursos privats. Entres una vegada al teu concentrador. Després d'això, l'autenticació de tots els recursos de $Projectname és "màgia".
|
||||||
|
|
||||||
|
|
||||||
|
[b]WebDAV activa l'Emagatzematge d'Arxius[/b]
|
||||||
|
|
||||||
|
Els arxius poden ser enviats a la teva àrea d'emmagatzematge personal utilitzant les teves utilitats del sistema operatiu (arrossegar i deixar anar en la majoria dels casos). Pots protegir aquests arxius amb la Llista de Control d'Accés amb qualsevol combinació de membres de $Projectname (incloent alguns membres d'altres terceres xarxes) o fer-los públics.
|
||||||
|
|
||||||
|
[b]Foto Àlbums[/b]
|
||||||
|
|
||||||
|
Salva Fotos en Àlbums. Totes les fotografies es poden protegir mitjançant llistes de control d'accés.
|
||||||
|
|
||||||
|
[b]Calendari d'Esdeveniments[/b]
|
||||||
|
|
||||||
|
Creació i gestió d'esdeveniments i tasques, que també poden ser protegits amb llistes de control d'accés. Els esdeveniments poden ser importats/exportats a un altre programari amb el format estàndard de la indústria vCalendar/iCal i compartida en els llocs amb els altres. Esdeveniments d'aniversari s'agreguen automàticament dels teus amics i es tradueixen a la seva zona horària correcta així sabràs exactament quan es produeix l'aniversari - no importa on et trobis en el món en relació amb la persona de l'aniversari. Els esdeveniments es creen normalment amb taulells d'assistència perquè els teus amics i connexions puguin confirmar la seva assistència a l'instant.
|
||||||
|
|
||||||
|
[b]Sales de Xat[/b]
|
||||||
|
|
||||||
|
Pots crear qualsevol nombre de sales de xat personals i permetre l'accés a través de llistes de control d'accés. Aquestes solen ser més segures que XMPP, IRC, i altres transports de missatgeria instantània, encara que també permetem l'ús d'aquests altres serveis a través de connectors.
|
||||||
|
|
||||||
|
[b]Constructor de Pàgines Web[/b]
|
||||||
|
|
||||||
|
$Projectname té moltes eines de creació de "Gestió de Contingut" per a la creació de pàgines web, incloent l'edició disposició, menús, blocs, widgets, i pàgina/contingut per regions. Totes aquestes poden ser d'accés controlat perquè les pàgines resultants siguin privades per al seu públic objectiu.
|
||||||
|
|
||||||
|
[b]Apps/Aplicacions[/b]
|
||||||
|
|
||||||
|
Apps poden ser construïdes i distribuïdes pels membres. Aquestes aplicacions són diferents del tradicional "bloqueig pel proveïdor" perquè són controlats completament per l'autor - que pot proporcionar control d'accés a les pàgines d'aplicacions de destinació i la càrrega consegüent per a aquest accés. La majoria de les aplicacions en $Projectname són gratuïtes i es poden crear fàcilment per aquells que no tenen coneixements de programació.
|
||||||
|
|
||||||
|
[b]Disposició[/b]
|
||||||
|
|
||||||
|
La disposició de la pàgina es basa en un llenguatge de descripció anomenat Comanche. $Projectname en si mateix està escrit amb dissenys de Comanche i es poden canviar. Això permet un nivell de personalització que no se sol trobar en els anomenats "entorns multiusuari".
|
||||||
|
|
||||||
|
[b]Favorits[/b]
|
||||||
|
|
||||||
|
Compartir i guardar/administrar els enllaços de favorits proporcionats en les converses.
|
||||||
|
|
||||||
|
|
||||||
|
[b]Xifrat de missatges privats i Dubtes sobre la confidencialitat[/b]
|
||||||
|
|
||||||
|
El correu privat s'emmagatzema en un format ocult. Si bé això no és a prova de bales, en general, evita l'espionatge informal per l'administrador del lloc o ISP.
|
||||||
|
|
||||||
|
Cada canal de $Projectname té el seu propi conjunt únic de claus RSA (de 4096 bits) públiques i privades associades, que es genera quan es crea primer els canals. Això s'utilitza per protegir els missatges privats i missatges en trànsit.
|
||||||
|
|
||||||
|
A més, els missatges poden ser creats utilitzant "xifrat d'extrem a extrem", que no pot ser llegit per els operadors $Projectname o ISPs o algú que no coneixi el codi d'accés.
|
||||||
|
|
||||||
|
Els missatges públics en general, no es xifren en trànsit o en l'emmagatzematge.
|
||||||
|
|
||||||
|
Els missatges privats poden ser retirats (com si no s'hagués enviat), encara que no es garanteix que el destinatari no l'ha llegit abans que l'hagis retirat.
|
||||||
|
|
||||||
|
Entrades i missatges poden ser creats amb una data de venciment, moment en el qual s'eliminaran/borraran en el lloc del destinatari.
|
||||||
|
|
||||||
|
|
||||||
|
[b]Servei de Federació[/b]
|
||||||
|
|
||||||
|
A més de l'afegit (addon) "connectors d'entrades creuades" a una varietat de xarxes alternatives, no hi ha suport natiu per a la importació de continguts de RSS/Atom i usar això per crear canals especials. A més, una implementació experimental, però de treball del protocol de la Diàspora permet la comunicació amb la gent en les xarxes socials friendica i Diàspora descentralitzats. Actualment això es va marcar experimental a causa de que aquestes xarxes no tenen el mateix nivell de funcions de privacitat i encriptació i habilitats com $Projectname i poden presentar riscos per a la privacitat.
|
||||||
|
També hi ha suport experimental per a l'autenticació OpenID que es pot utilitzar en les llistes de control d'accés. Aquest és un treball en progrés. El seu concentrador $Projectname pot ser utilitzat com un proveïdor d'OpenID per autenticar als serveis externs que utilitzen aquesta tecnologia.
|
||||||
|
Els canals poden tenir permisos per convertir-se en "canals derivats" on dos o més canals existents es combinen per crear un nou canal d'actualitat.
|
||||||
|
|
||||||
|
[b]Col·leccions[/b]
|
||||||
|
|
||||||
|
"Col·leccions" és la nostra implementació de grups de privacitat, que és similar a Google "Cercles" i "Aspectes" de Diaspora. Això li permet filtrar el flux entrant per col·leccions o grups, i automàticament configurar la llista de control d'accés sortint a només aquells en la Col·lecció quan publiqui. Pots obviar tot això en qualsevol moment (abans d'enviar l'entrada).
|
||||||
|
|
||||||
|
|
||||||
|
[b]Serveis de Directori [/b]
|
||||||
|
|
||||||
|
Oferim fàcil accés a un directori de membres i proporcionem eines descentralitzades capaçes de proporcionar amics "suggerits". Els directoris són llocs normals $Projectname que han optat per acceptar la funció de servidor de directori. Això requereix més recursos que la majoria dels llocs típics pel que no és el predeterminat. Els Directoris estan sincronitzats i reflecteixen el que tots ells contenen amb informació actualitzada sobre tota la xarxa (subjecte a demores normals de propagació).
|
||||||
|
|
||||||
|
|
||||||
|
[b]TLS/SSL[/b]
|
||||||
|
|
||||||
|
Els concentradors de $Projectname que empran TLS/SSL, les comunicacions entre client i servidor son encriptades via TLS/SSL. Donades les recents revelacions en els mitjans de comunicació en relació amb, la vigilància global i l'elusió de xifrat pel NSA i GCHQ, és raonable suposar que les comunicacions HTTPS-protegides es poden veure compromeses de diverses maneres. Les comunicacions privades són en conseqüència xifrades en un nivell superior abans d'enviar-les fora del lloc.
|
||||||
|
|
||||||
|
[b]Ajustos del Canals[/b]
|
||||||
|
|
||||||
|
Quan es crea un canal, es tria un rol al que s'apliquen una sèrie d'ajustos de seguretat i privacitat preconfigurats. Aquests són elegits per les millors pràctiques per mantenir la privacitat en els nivells requerits.
|
||||||
|
|
||||||
|
Si escolliu un paper privacitat "personalitzat", cada canal permet permisos de gra fi que es fixaràn per a diferents aspectes de la comunicació. Per exemple, sota la capçalera "Ajusts de Seguretat i Privacitat", cada aspecte a la banda esquerra de la pàgina, té sis (6) Opcions possibles de visualització/accés, que es poden seleccionar fent clic al menú desplegable. També hi ha una sèrie d'altres opcions de privacitat que pots editar.
|
||||||
|
|
||||||
|
Les opcions són:
|
||||||
|
- Ningú, excepte tu mateix.
|
||||||
|
- Només aquells que es permeten específicament.
|
||||||
|
- Qualsevol persona en la seva llibreta d'adreces.
|
||||||
|
- Qualsevol en aquest lloc web.
|
||||||
|
- Qualsevol persona en aquesta xarxa.
|
||||||
|
- Qualsevol autenticat.
|
||||||
|
- Qualsevol persona a Internet.
|
||||||
|
|
||||||
|
[b]Forums Públics i Privats[/b]
|
||||||
|
|
||||||
|
Els fòrums són típicament canals que poden estar obertes a la participació de múltiples autors. Actualment existeixen dos mecanismes per pujar als fòrums: 1) els missatges "de mur a mur" i 2) a través de les etiquetes de foro @menció. Els fòrums poden ser creats per qualsevol persona i s'utilitzats per a qualsevol propòsit. El directori conté una opció per buscar fòrums públics. Als Fòrums privats només es poden fer entrades pels membres i sovint només son vistos pels membres.
|
||||||
|
|
||||||
|
|
||||||
|
[b]Clonat de Comptes[/b]
|
||||||
|
|
||||||
|
Els Comptes a $Projectname es refereixen com a [i]identitats nómades[/i], perquè la identitat d'un membre no està lligada al concentrador/servidor on es va crear originalment. Per exemple, quan es crea un compte de Facebook o Gmail, que està lligat a aquests serveis. No poden funcionar sense Facebook.com o Gmail.com.
|
||||||
|
|
||||||
|
Per contra, imagina que has creat una identitat a $Projectname anomenada [b]tina@Hubzillahub.com[/b]. Aquesta es pot clonar a un altre hub de $Projectname amb el mateix nom o un altre de diferent: per exemple [b]viuPerSempre@HubzillaHub.info[/b]
|
||||||
|
|
||||||
|
Tots dos canals estan ara sincronitzats, el que significa que tots els seus contactes i preferències es dupliquen en el teu clon. No importa si s'envia un missatge des del seu hub original o el nou centre. Els missatges/emtrades seran reflectits/des en tots dos comptes.
|
||||||
|
|
||||||
|
Aquesta és una característica bastant revolucionària, si tenim en compte alguns dels escenaris:
|
||||||
|
|
||||||
|
- Què passa si el concentrador/servidor on la identitat es basa cau sobtadament fora de línia? Sense clonació, un membre no pot comunicar fins que aquest centre torna a estar de nou en línia (sens dubte molts de vosaltres heu vist i maleït el Twitter "Fail Whale"). Amb la clonació, es pot iniciar la sessió al compte clonat, i la vida continua feliços per sempre. - L'administrador del teu concentrador/servidor ja no es pot permetre el luxe de pagar el concentrador/servidor $Projectname que ofereix gratuitament. Llavors anuncia que el centre serà tancant en dues setmanes. Això li dóna temps suficient als socis/partíceps per clonar la seva identitat/s i preservar les seves relacions de $Projectname, amics i contingut. - Què passa si la teva identitat està subjecta a la censura del govern? El teu proveïdor del concentrador/servidor pot ser obligat a eliminar el teu compte, juntament amb les identitats i dades associades. Amb la clonació, a $Projectname ofereixes [b]resistència a la censura[/b]. Pots tenir centenars de clons, si vols, amb noms totalment diferents, i existents en molts centres diferents, escampats a tot l'Internet.
|
||||||
|
|
||||||
|
$Projectname ofereix noves i interesants possibilitats per a la privacitat. Pots llegir més a la pàgina <<Bones Pràctiques en Comunicacions Privades>>.
|
||||||
|
|
||||||
|
A tenir en compte. Per a una explicació completa de la clonació d'identitat, llegir el <HOW TO CLONE MY IDENTITY>.
|
||||||
|
|
||||||
|
[b]Perfils Multiples[/b]
|
||||||
|
|
||||||
|
Es poden crear qualsevol nombre de perfils amb informació diferent i es poden fer-se visible/s a alguns de les teves connexions/amics. Un perfil "per defecte" es pot veure per qualsevol persona i pot contenir informació limitada, amb més informació disponible per grups o persones seleccionades. Això vol dir que el perfil (i el contingut del lloc) per als teus amics bevedors de cervesa pot ser diferents del que presentes als seus companys de treball, i també completament diferent del que és visible per al públic en general.
|
||||||
|
|
||||||
|
[b]Còpies de Seguretat del Compte[/b]
|
||||||
|
|
||||||
|
Hubzilla ofereix una còpia de seguretat del compte, amb un simple clic, on pots descarregar una còpia de seguretat completa del teu perfil(s).
|
||||||
|
|
||||||
|
Les còpies de seguretat es poden utilitzar per clonar o restaurar un perfil.
|
||||||
|
|
||||||
|
[b]Eliminació del Compte[/b]
|
||||||
|
|
||||||
|
Els comptes poden ser [b]esborrats immediatament[/b] fent clic en un enllaç. [b]Això és així[/b]. Tot el contingut associat s'elimina de la xarxa (això inclou els missatges i qualsevol altre tipus de contingut produït pel perfil suprimit). Depenent del nombre de connexions que té, el procés d'eliminació de contingut remot podria portar el seu temps, però està previst que passi tan aviat com sigui possible.
|
||||||
|
|
||||||
|
[b][size=20]Creació de Contingut[/size][/b]
|
||||||
|
|
||||||
|
[b]Escribint Entrades[/b]
|
||||||
|
|
||||||
|
$Projectname suporta un nombre de diferents alternatives per afegir contingut amb text enriquit. La opció per defecte es una variant personalitzada de _BBcode, ajustada per al seu ús a $Projectname. Pots activar l'ús de Markdown (un llenguatge de marques) fàcil de treballar amb ell. Un editor visual també es pot emprar. El editor visual tradicionalment emprat en $Projectname va tenir seriosos problemes i ha estat eliminat. Estem actualment buscant un substitut.
|
||||||
|
|
||||||
|
Quant creem "llocs Web", El contingut espot afegir en HTML, Markdown, BBcode, i/o text plà.
|
||||||
|
|
||||||
|
[b]Esborrat del contingut[/b]
|
||||||
|
Qualsevol contingut creat a $Projectname roman sota el control del membre (o canal) que el va crear originalment. En qualsevol moment, un membre pot esborrar un missatge o un rang de missatges. El procés d'esborrat assegura que el contingut es eliminat, indiferentment de on es va publicar si en el canal primari (l'inicial)del concentrador/servidor o en altre qualsevol on el canal es va autenticar remotament via Zot ($Projectname communicació i protocol d'autenticació).
|
||||||
|
|
||||||
|
[b]Multimedia[/b]
|
||||||
|
Igual que qualsevol altre sistema modern de blocs, xarxes socials, o d'un servei de micro-blogging, $Projectname és compatible amb la càrrega d'arxius, la incorporació dels vídeos, l'enllaç de pàgines web.
|
||||||
|
|
||||||
|
[b]Vista Prèvia/Edició[/b]
|
||||||
|
Les entrades es poder pre visualitzar abans d'enviar-les i reeditar desprès de ser enviades.
|
||||||
|
|
||||||
|
[b]Votacions/Consens[/b]
|
||||||
|
El missatges poden convertir-se en "consensos", són articles que ofereixen als lectors una forma de retroalimentació, es recopilen en comptadors de "d'acord", "en desacord" i "abstenir-se". Que permeten mesurar l'interès per les idees i crear enquestes informals.
|
||||||
|
|
||||||
|
|
||||||
|
[b]Estenent $Projectname[/b]
|
||||||
|
|
||||||
|
$Projectname es pot estendre per diferents nombre de vies, a través de la personalització del lloc, la teva personalització, ajustos optatius, temes i addons/plugins.
|
||||||
|
|
||||||
|
[b]API[/b]
|
||||||
|
|
||||||
|
Una API està disponible per al seu ús per serveis de terceres part. Està basat originalment en una de les primeres API's de Twitter(de la que existeixen cents d'eines de terceres parts). S'està ampliant actualment per proporcionar accés a les instal·lacions i capacitats que són específiques de $Projectname. L'accés pot ser proporcionada per usuari/contrasenya o OAuth i es proporciona registre de clients d'aplicacions OAuth.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#include doc/macros/main_footer.bb;
|
||||||
3
doc/ca/first-post.bb
Normal file
3
doc/ca/first-post.bb
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
[size=large]La teva primera entrada[/size]
|
||||||
|
|
||||||
|
... pendent de ser escrita ...
|
||||||
20
doc/ca/general.bb
Normal file
20
doc/ca/general.bb
Normal file
@@ -0,0 +1,20 @@
|
|||||||
|
[h2]Informació del Projecte/Lloc[/h2]
|
||||||
|
|
||||||
|
[zrl=[baseurl]/help/Privacy]Politica de Privacitat[/zrl]
|
||||||
|
|
||||||
|
[zrl=[baseurl]/help/history]Història de $Projectname[/zrl]
|
||||||
|
|
||||||
|
[h3]Recursos Externs[/h3]
|
||||||
|
[zrl=[baseurl]/help/external-resource-links]Enllaços a Recursos Externs[/zrl]
|
||||||
|
|
||||||
|
[url=https://github.com/redmatrix/hubzilla]Lloc Web Principal[/url]
|
||||||
|
|
||||||
|
[url=https://github.com/redmatrix/hubzilla-addons]Complements del Lloc Web[/url]
|
||||||
|
|
||||||
|
[url=[baseurl]/help/credits]Credits en $Projectname[/url]
|
||||||
|
|
||||||
|
[h3]Sobre Aquest Node $Projectname[/h3]
|
||||||
|
[zrl=[baseurl]/help/TermsOfService]Termes de Servei per a AQUEST Node[/zrl]
|
||||||
|
[zrl=[baseurl]/siteinfo]Informació del Node[/zrl]
|
||||||
|
[zrl=[baseurl]/siteinfo/json]Informació Tècnica Detallada en format JSON d'aquest Node[/zrl]
|
||||||
|
|
||||||
12
doc/ca/main.bb
Normal file
12
doc/ca/main.bb
Normal file
@@ -0,0 +1,12 @@
|
|||||||
|
[zrl=[baseurl]/help/about][b]Que és $Projectname?[/b][/zrl]
|
||||||
|
$Projectname és una plataforma de comunicació i publicació descentralitzada que et permet mantenir el control de les teves necessitats de comunicació, gràcies a l'encriptació automàtica i control d'accés de gra fi. Éts tu, i només tu qui decideixes qui pot veure les teves coses.
|
||||||
|
|
||||||
|
[zrl=[baseurl]/help/features][b]Característiques de $Projectname[/b][/zrl]
|
||||||
|
|
||||||
|
$Projectname ja s'està executant com una xarxa distribuïda global i demostra la seva versatilitat i escalabilitat des de independent fins a grans llocs.
|
||||||
|
Penseu en plataformes independents de comunicació de la família, de comunitats en línia distribuïdes, fòrums de suport, blocs i pàgines web. O proveïdors de continguts professionals amb canals premium comercials i accés de continguts específics. El que vulguis, $Projectname és allà per atendre la teva creativitat.
|
||||||
|
|
||||||
|
[zrl=[baseurl]/help/what_is_zot][b]Tens Zot? Be, Deuries.[/b][/zrl]
|
||||||
|
Zot és el gran nou protocol de communicació inventat especialment per a $Projectname. Com a membre, ja no estàs lligat a un sol lloc o concentrador (hub) gràcies a les "identitats nòmades". Migra fàcilment a un altre servidor i manté els teus contactes intactes, o clona i executa el mateix canal en diversos servidors. Encara que un d'ells tanqui, no es perd res. A més, una vegada que estàs dins de $Projectname no hi ha necessitat d'autenticar dues vegades, fins i tot quan s'accedeix des d'un altre lloc $Projectname. Zot és el que difèrencia $Projectname de qualsevol altre projecte.
|
||||||
|
|
||||||
|
|
||||||
25
doc/ca/members.bb
Normal file
25
doc/ca/members.bb
Normal file
@@ -0,0 +1,25 @@
|
|||||||
|
[h2]Documentació per a Membres del Concentrador[/h2]
|
||||||
|
|
||||||
|
[h3]Començant[/h3]
|
||||||
|
[zrl=[baseurl]/help/registration]Registrant un Compte[/zrl]
|
||||||
|
[zrl=[baseurl]/help/accounts_profiles_channels_basics]Tu a $Projectname: breument comptes, perfils i canals[/zrl]
|
||||||
|
[zrl=[baseurl]/help/profiles]Perfils[/zrl]
|
||||||
|
[zrl=[baseurl]/help/channels]Canals[/zrl]
|
||||||
|
[zrl=[baseurl]/help/roles]Permisos per roles i tipus de Canals[/zrl]
|
||||||
|
[zrl=[baseurl]/help/first-post]La teva primera entrada[/zrl]
|
||||||
|
[zrl=[baseurl]/help/connecting_to_channels]Connectant Amb Altres Canals[/zrl]
|
||||||
|
[zrl=[baseurl]/help/permissions]Permisos I Encriptació: Tu Tens El Control[/zrl]
|
||||||
|
[zrl=[baseurl]/help/cloud]Emmagatzegament Al Núbol[/zrl]
|
||||||
|
[zrl=[baseurl]/help/remove_account]Esborrar un Canal o un Compte[/zrl]
|
||||||
|
|
||||||
|
[h3]Ajuda per als Membres[/h3]
|
||||||
|
[zrl=[baseurl]/help/tags_and_mentions]Etiquetes i Mencions[/zrl]
|
||||||
|
[zrl=[baseurl]/help/webpages]Pàgines Web[/zrl]
|
||||||
|
[zrl=[baseurl]/help/bbcode]Referència BBcode per a entrades i comentaris[/zrl]
|
||||||
|
[zrl=[baseurl]/help/checking_account_quota_usage]Comprovant la Quota d'Ús del Compte[/zrl]
|
||||||
|
[zrl=[baseurl]/help/cloud_desktop_clients]Clients d'Escriptori al Núbol[/zrl]
|
||||||
|
[zrl=[baseurl]/help/AdvancedSearch]Cerca Avançada al Directori[/zrl]
|
||||||
|
[zrl=[baseurl]/help/addons]Ajuda pels Addons[/zrl]
|
||||||
|
[zrl=[baseurl]/help/diaspora_compat]Compatibilitat de Comunicacions amb Diaspora (Diaspora i Friendica)[/zrl]
|
||||||
|
[zrl=[baseurl]/help/faq_members]FAQ Per Membres[/zrl]
|
||||||
|
[zrl=[baseurl]/help/bugs]Errors, Assumptes, i les coses que arriben de cop a la nit...[/zrl]
|
||||||
37
doc/ca/profiles.bb
Normal file
37
doc/ca/profiles.bb
Normal file
@@ -0,0 +1,37 @@
|
|||||||
|
[b]Profiles[/b]
|
||||||
|
|
||||||
|
$Projectname has unlimited profiles. You may use different profiles to show different "sides of yourself" to different audiences. This is different to having different channels. Different channels allow for completely different sets of information. You may have a channel for yourself, a channel for your sports team, a channel for your website, or whatever else. A profile allows for finely graded "sides" of each channel. For example, your default public profile might say "Hello, I'm Fred, and I like laughing". You may show your close friends a profile that adds "and I also enjoy dwarf tossing".
|
||||||
|
|
||||||
|
You always have a profile known as your "default" or "public" profile. This profile is always available to the general public and cannot be hidden (there may be rare exceptions on privately run or disconnected sites). You may, and probably should restrict the information you make available on your public profile.
|
||||||
|
|
||||||
|
That said, if you want other friends to be able to find you, it helps to have the following information in your public profile...
|
||||||
|
|
||||||
|
[ul][*]Your real name or at least a nickname everybody knows
|
||||||
|
[*]A photo of you
|
||||||
|
[*]Your location on the planet, at least to a country level.[/ul]
|
||||||
|
|
||||||
|
In addition, if you'd like to meet people that share some general interests with you, please take a moment and add some "Keywords" to your profile. Such as "music, linux, photography" or whatever. You can add as many keywords as you like.
|
||||||
|
|
||||||
|
To create an alternate profile, first go to [zrl=[baseurl]/settings/features]Settings > Additional Features[/zrl] and enable "Multiple Profiles" there, otherwise you won't have the ability to use more than just your default profile.
|
||||||
|
|
||||||
|
Then select "Edit Profiles" from the menu of your $Projectname site. You may edit an existing profile, change the profile photo, add things to a profile or create a new profile. You may also create a "clone" of an existing profile if you only wish to change a few items but don't wish to enter all the information again. To do that, click on the profile you want to clone and choose "Clone this profile" there.
|
||||||
|
|
||||||
|
In the list of your profiles, you can also choose the contacts who can see a specific profile. Just click on "Edit visibility" next to the profile in question (only available for the profiles that are not your default profile) and then click on user images to add them to or remove them from the group of people who can see this profile.
|
||||||
|
|
||||||
|
Once a profile has been selected, when the person views your profile, they will see the private profile you have assigned. If they are not authenticated, they will see your public profile.
|
||||||
|
|
||||||
|
There is a setting which allows you to publish your profile to a directory and ensure that it can be found by others. You can change this setting on the "Settings" page.
|
||||||
|
|
||||||
|
If you do not wish to be found be people unless you give them your channel address, you may leave your profile unpublished.
|
||||||
|
|
||||||
|
[b]Keywords and Directory Search[/b]
|
||||||
|
|
||||||
|
On the directory page, you may search for people with published profiles. Currently, only the name field and the keywords are searched. You may also include such keywords in your default profile - which may be used to search for common interests with other members. Keywords are used in the channel suggestion tool and although they aren't visible in the directory, they are shown if people visit your profile page.
|
||||||
|
|
||||||
|
On your Connnections page and in the directory there is a link to "Suggestions" or "Channel Suggestions", respectively. This will find channels who have matching and/or similar keywords. The more keywords you provide, the more relevant the search results that are returned. These are sorted by relevance.
|
||||||
|
|
||||||
|
See Also
|
||||||
|
|
||||||
|
[zrl=[baseurl]/help/AdvancedSearch]Advanced Searching[/zrl]
|
||||||
|
|
||||||
|
#include doc/macros/main_footer.bb;
|
||||||
35
doc/ca/registration.bb
Normal file
35
doc/ca/registration.bb
Normal file
@@ -0,0 +1,35 @@
|
|||||||
|
[size=large][b]Registre[/b][/size]
|
||||||
|
|
||||||
|
No tots els llocs $Projectname permeten la inscripció oberta. Si es permet el registre, veureu un enllaç de " Registre " immediatament sota de l'entrada a la pàgina principal del lloc. Seguint aquest enllaç et portarà a la pàgina de registre del lloc. En alguns llocs es pot redirigir a un altre lloc que permet registres. Com tots els llocs $Projectname estan vinculats, no importa on resideix el teu compte.
|
||||||
|
|
||||||
|
[b]La Teva Adreça de Correu Electrònic[/b]
|
||||||
|
|
||||||
|
Si us plau introdueix la teva adreça de correu electrònic vàlida. La teva adreça de correu electrònic mai es farà pública. Aquesta adreça s'utilitzarà per activar el teu compte, que (opcionalment) enviarà notificacions de correu electrònic per als missatges entrants o articles, [i]i per recuperar contrasenyes perdudes[/i].
|
||||||
|
|
||||||
|
[b]Contrasenya[/b]
|
||||||
|
|
||||||
|
Introdueix una contrasenya de la teva elecció, i repeix-la en la segona casella per assegurar-te que es va escriure correctament. Com $Projectname ofereix una identitat descentralitzada, Es pot accedir al teu compte en molts altres llocs web no només en el que t'has donat d'alta.
|
||||||
|
|
||||||
|
[b]Termes Del Servei[/b]
|
||||||
|
|
||||||
|
Clica a l'enllaç per llegir els [zrl=[baseurl]/help/TermsOfService]Termes de Servei[/zrl] del lloc. Una vegada llegits, marca la casella al formulari de registre per confirmar.
|
||||||
|
|
||||||
|
[b]Registre[/b]
|
||||||
|
|
||||||
|
Una vegada que hagis proporcionat els detalls necessaris, fes clic al botó "Registrar-se". Alguns llocs poden requerir l'aprovació de l'administrador abans de processar el registre, s'avisarà si aquest és el cas. Si us plau, mira el teu correu electrònic (incloent carpetes d'spam) per poder finalitzar la teva aprovació de registre.
|
||||||
|
|
||||||
|
[b]Crear un Canal[/b]
|
||||||
|
|
||||||
|
A continuació, se et presentarà la pantalla " Afegir un canal". Normalment, el primer canal serà un que et representa - pel que l'ús del seu propi nom (o pseudònim) com el nom del canal és una bona idea. El nom de la cadena ha de ser pensat com un títol o descripció breu del teu canal. El " triar un sobrenom curt " és similar a un "nom d'usuari ". Farem servir tot el que entra aquí per crear una adreça de canal, que altres persones utilitzaran per connectar-se amb tu, i que utilitzaràs per iniciar sessió en altres llocs. Això s'assembla a una adreça de correu electrònic, i pren la forma nickname@siteyouregisteredat.xyz
|
||||||
|
|
||||||
|
Quan es crea el teu canal se't portarà directament a la pàgina de configuració on pots definir permisos, habilitar les funcions, etc. Totes aquestes coses es tracten a la secció corresponent dels fitxers d'ajuda.
|
||||||
|
|
||||||
|
Veure Tambè
|
||||||
|
[zrl=[baseurl]/help/accounts_profiles_channels_basics]Lo Basic sobre Identitats dins $Projectname[/zrl]
|
||||||
|
[zrl=[baseurl]/help/accounts]Comptes[/zrl]
|
||||||
|
[zrl=[baseurl]/help/profiles]Perfils[/zrl]
|
||||||
|
[zrl=[baseurl]/help/permissions]Permisos[/zrl]
|
||||||
|
[zrl=[baseurl]/help/remove_account]Eliminar Compte[/zrl]
|
||||||
|
|
||||||
|
#include doc/macros/main_footer.bb;
|
||||||
|
|
||||||
61
doc/ca/what_is_zot.bb
Normal file
61
doc/ca/what_is_zot.bb
Normal file
@@ -0,0 +1,61 @@
|
|||||||
|
[b]Qué és Zot?[/b]
|
||||||
|
|
||||||
|
Zot és el protocol que fa funcionar $Projectname, proveeix tres Característiques esencials: Comunicacions, Identitat, i Control d'Accéss.
|
||||||
|
|
||||||
|
Les funcionalitats que proveeix es poden describir de la següent manera:
|
||||||
|
|
||||||
|
- una relació en línia es només un munt de permisos
|
||||||
|
- internet és només un altre carpeta
|
||||||
|
|
||||||
|
[b][size=20]Comunicacions[/size][/b]
|
||||||
|
|
||||||
|
Zot és un protocol revolucionari que ofereix [i]comunicacions descentralitzades[/i] i [i]gestió d'identitat[/i] en tota la malla (o entrallat de connexions). El resultat es una plataforma que proveeix serveis web comparables amb els que ofereixen les grans companyies, però sense elles ni els seus problemes de privacitat, la seva insaciable necessitat de beneficis, ni la seva idea dels jardins-privats.
|
||||||
|
|
||||||
|
Comunicacions i xarxes socials són una part integral del teixit. Qualsevol canal (i qualsevol servei ofert per aquest canal) por fer ús complert de les grans caracteristiques de comunicació social a escala global. Aquestes comunicacions poden ser públiques o privades - i comunicacions privades no es limiten a encriptar totalment l'enviament, sino que també encripten l'emmagatzegament per tal d'impedir que, administradors de sistemes murris o proveidors de servei, accidental o intencionadament tafanegin o revelin dades personals.
|
||||||
|
|
||||||
|
Zot permet un ampli vental de serveis en segon plà per a la xarxa, des de oferir suggeriments d'amics, a serveis de directori. També pot realitzar altres coses que normalment només són possibles en un proveïdor centralitzat, com missatges "de mur a mur". Perfils particulars/múltiples es poden crear fàcilment i el contingut del web es pot adaptar a l'espectador a través del [i]Control Lliscant d'Afinitat[/i].
|
||||||
|
|
||||||
|
No trobaràs, de cap manera, aquestes característiques en altres serveis de comunicació descentralitzades. A més de proporcionar la descentralització de concentradors (servidors), potser la característica més innovadora i interessant de Zot és el subministrament de serveis [i]d'identitat descentralitzada[/i].
|
||||||
|
|
||||||
|
[b][size=20]Identitat[/size][/b]
|
||||||
|
|
||||||
|
La capa que permet identitat mitjançant Zot es única. Facilita [i]l'identificació única invisible[/i] al llarg de tots els llocs de la malla.
|
||||||
|
|
||||||
|
També ofereix [i]identitat nómada[/i], de tal forma que les teves comunicacions amb amics, familiars , i qualsevol amb el que et comuniquis no s'han de veure afectats per la pérdua (caiguda, desconnexió) temporal/permanent del teu node de comunicació primari.
|
||||||
|
|
||||||
|
Les parts importants de la teva identitat i les relacions es poden copiar a una memòria USB, o el teu ordinador portàtil, i poden aparèixer en qualsevol node de la xarxa en qualsevol moment - amb tots els teus amics i preferències intactes.
|
||||||
|
|
||||||
|
Fonamentalment, aquestes instàncies (identitats) nòmades es mantenen en sincronia per tal que qualsevol instància pugui fer-se càrrec si un altre està en perill o danyada. Això el protegeix contra no només d'una fallada del sistema, sinó també de sobrecàrregues temporals del lloc i/o la manipulació governamental o censura.
|
||||||
|
|
||||||
|
Identitat nòmada, inici de sessió únic, i nodes $Projectname descentralitzats, al nostre parer, introduir un alt grau de grau de [i]resiliència[/i] i [i]persistència[/i] en les comunicacions d'Internet, que són profundament necessàries en direcció contrària de les tendències mundials cap a la centralització corporativa, així com la vigilància governamental indiscriminada i la censura.
|
||||||
|
|
||||||
|
Com naveges per la xarxa, els canals de visualització i el seu contingut únic, que es produeix sobre la marxa, fins i tot a través de centres de servidors completament diferents. No hi ha contrasenyes per entrar. No hi ha res a escriure. No tens que posar teu nom en cada nou lloc que visites.
|
||||||
|
|
||||||
|
Com Zot pot fer això? En diem [i]identificació-màgica[/i], perquè $Projectname oculta els detalls de les complexitats que van a l'inici únic de sessió, les identitats nòmades, i l'experiència de navegació a la xarxa. Aquest és un dels objectius de disseny de $Projectname: per augmentar la privacitat i la llibertat a la xarxa, alhora que redueix la complexitat i el tedi interposat per la necessitat d'introduir noves contrasenyes i noms d'usuari per a cada vista diferent, que pots visitar en línia.
|
||||||
|
|
||||||
|
Entrar com a usuari només una vegada en el teu centre d'origen (o qualsevol centre de recolçament nòmada que hagis triat). Això permet accedir a tots els serveis autenticats en qualsevol lloc de la malla - com ara anar a comprar, blocs, fòrums, i l'accés a la informació privada. Això és igual que els serveis oferts pels grans proveïdors de les empreses amb enormes bases de dades d'usuaris; però, pots ser un membre d'aquesta comunitat, així com un servidor en aquesta xarxa emprant un RasberryPi de 35$. La teva contrasenya no s'emmagatzema en un miler de diferents llocs, o encara pitjor, només en uns pocs llocs com Google i Facebook, fora del teu control directe.
|
||||||
|
|
||||||
|
No pots ser silenciat. No pots ser eliminat de la xarxa, llevat que triïs per sortir, tu mateix.
|
||||||
|
|
||||||
|
[b][size=20]Control d'Accés[/size][/b]
|
||||||
|
|
||||||
|
La capa de identitat de Zot permet proporcionar permisos específics a qualsevol contingut que desitgis publicar - i aquests permisos s'estenen per $ProjectName. Això és com tenir un sol súper gran espai web format per un exèrcit de petits llocs web individuals - i on cada canal a la xarxa pot controlar completament les seves preferències de privacitat i ús compartit dels recursos web que creen.
|
||||||
|
|
||||||
|
Actualment, la xarxa suporta comunicacions, àlbums de fotos, esdeveniments, i arxius. Això s'ampliarà en el futur per proporcionar serveis de gestió de continguts (pàgines web) i instal·lacions d'emmagatzematge en el núvol, com biblioteques WebDAV i multimèdia. Cada objecte i la forma en què es comparteix i amb qui està completament sota el teu control.
|
||||||
|
|
||||||
|
Aquest tipus de control està disponible en grans proveïdors de serveis com Facebook i Google, ja que poseeixen la base de dades d'usuari. Dins de la xarxa, no hi ha necessitat d'un gran usuari de base de dades a la teva màquina - perquè la xarxa [i]és[/i] la teva base de dades d'usuari. Té essencialment infinita capacitat (limitada pel nombre total de nodes en línia a través d'Internet), i s'estén entre centenars, i potencialment milions d'ordinadors.
|
||||||
|
|
||||||
|
L'accés pot ser concedit o negat per a qualsevol recurs, a qualsevol canal, o qualsevol grup de canals; en qualsevol lloc dins de la malla. Altres podràn accedir al teu contingut si els permets fer-ho, i ni tan sols cal tenir un compte al node. Les teves fotos privades no es poden veure, perquè els permissos realment funcionen; no són un complement que s'ha afegit a l'últim moment. Si no ets a la llista d'espectadors permesos per a una foto en particular, tu no la veuràs.
|
||||||
|
|
||||||
|
[b][size=18]Recursos Addicionals i Enllaços[/size][/b]
|
||||||
|
|
||||||
|
Per més detalla, informació tècnica sobre Zot, clica sobre algún dels següents enllaços:
|
||||||
|
|
||||||
|
- [url=https://github.com/friendica/red/wiki/Zot---A-High-Level-Overview]Vista per experts (en anglès)[/url]
|
||||||
|
|
||||||
|
- [url=https://github.com/friendica/red/wiki/zot]Especificació pel desenvolupament de Zot (en anglès)[/url]
|
||||||
|
|
||||||
|
- [url=https://github.com/redmatrix/hubzilla/blob/master/include/zot.php]Referència per la implementació de Zot en PHP (en anglès)[/url]
|
||||||
|
|
||||||
|
|
||||||
|
#include doc/macros/main_footer.bb;
|
||||||
@@ -22,7 +22,7 @@ Once you have created your channel, you will be taken to the settings page, wher
|
|||||||
|
|
||||||
Once you have done this, your channel is ready to use. At [observer=1][observer.url][/observer][observer=0]example.com/channel/username[/observer] you will find your channel "stream". This is where your recent activity will appear, in reverse chronological order. If you post in the box marked "share", the entry will appear at the top of your stream. You will also find links to all the other communication areas for this channel here. The "About" tab contains your "profile", the photos page contain photo albums, and the events page contains events share by both yourself and your contacts.
|
Once you have done this, your channel is ready to use. At [observer=1][observer.url][/observer][observer=0]example.com/channel/username[/observer] you will find your channel "stream". This is where your recent activity will appear, in reverse chronological order. If you post in the box marked "share", the entry will appear at the top of your stream. You will also find links to all the other communication areas for this channel here. The "About" tab contains your "profile", the photos page contain photo albums, and the events page contains events share by both yourself and your contacts.
|
||||||
|
|
||||||
The "Matrix" page contains all recent posts from across the matrix, again in reverse chronologial order. The exact posts that appear here depend largely on your permissions. At their most permissive, you will receive posts from complete strangers. At the other end of the scale, you may see posts from only your friends - or if you're feeling really anti-social, only your own posts.
|
The "Grid" page contains all recent posts from across the $Projectname network, again in reverse chronologial order. The exact posts that appear here depend largely on your permissions. At their most permissive, you will receive posts from complete strangers. At the other end of the scale, you may see posts from only your friends - or if you're feeling really anti-social, only your own posts.
|
||||||
|
|
||||||
As mentioned at the start, many other kinds of channel are possible, however, the creation procedure is the same. The difference between channels lies primarily in the permissions assigned. For example, a channel for sharing documents with colleagues at work would probably want more permissive settings for "Can write to my "public" file storage" than a personal account. For more information, see the permissions section.
|
As mentioned at the start, many other kinds of channel are possible, however, the creation procedure is the same. The difference between channels lies primarily in the permissions assigned. For example, a channel for sharing documents with colleagues at work would probably want more permissive settings for "Can write to my "public" file storage" than a personal account. For more information, see the permissions section.
|
||||||
|
|
||||||
|
|||||||
@@ -22,6 +22,6 @@ See: [zrl=[baseurl]/help/cloud_desktop_clients]Cloud Desktop Clients[/zrl]
|
|||||||
|
|
||||||
[b]Permissions[/b]
|
[b]Permissions[/b]
|
||||||
|
|
||||||
When using WebDAV, the file is created with your channel's default file permissions and this cannot be changed from within the operating system. It also may not be as restrictive as you would like. What we've found is that the preferred method of making files private is to first create folders or directories; then visit "filestorage/{{username}}"; select the directory and change the permissions. Do this before you put anything into the directory. The directory permissions take precedence so you can then put files or other folders into that container and they will be protected from unwanted viewers by the directory permissions. It is common for folks to create a "personal" or "private" folder which is restricted to themselves. You can use this as a personal cloud to store anything from anywhere on the web or any computer and it is protected from others. You might also create folders for "family" and "friends" with permission granted to appropriate collections of channels.
|
When using WebDAV, the file is created with your channel's default file permissions and this cannot be changed from within the operating system. It also may not be as restrictive as you would like. What we've found is that the preferred method of making files private is to first create folders or directories; then visit "filestorage/{{username}}"; select the directory and change the permissions. Do this before you put anything into the directory. The directory permissions take precedence so you can then put files or other folders into that container and they will be protected from unwanted viewers by the directory permissions. It is common for folks to create a "personal" or "private" folder which is restricted to themselves. You can use this as a personal cloud to store anything from anywhere on the web or any computer and it is protected from others. You might also create folders for "family" and "friends" with permission granted to appropriate privacy groups.
|
||||||
|
|
||||||
#include doc/macros/main_footer.bb;
|
#include doc/macros/main_footer.bb;
|
||||||
|
|||||||
@@ -27,8 +27,8 @@ Currently there are five layout templates, unless your site provides additional
|
|||||||
edgesthree - three column layout with fixed side margins
|
edgesthree - three column layout with fixed side margins
|
||||||
full - three column layout with fixed side margins and adds a "header" region beneath the navigation bar
|
full - three column layout with fixed side margins and adds a "header" region beneath the navigation bar
|
||||||
|
|
||||||
[b]redable[/b]
|
[b]redable[/b] (sic)
|
||||||
A template for reading longer texts. Three columns: aside, content and right_aside.
|
A template for reading longer texts full screen (so without navigation bar). Three columns: aside, content and right_aside.
|
||||||
For maximum readability it is advised to only use the middle content column.
|
For maximum readability it is advised to only use the middle content column.
|
||||||
|
|
||||||
[b]zen[/b]
|
[b]zen[/b]
|
||||||
|
|||||||
@@ -1,5 +1,9 @@
|
|||||||
[b]Credits[/b]
|
[b]Credits[/b]
|
||||||
|
|
||||||
|
Thanks to all who have helped and contributed to the project and its predecessors over the years. It is possible we missed in your name but this is unintentional. We also thank the community and its members for providing valuable input and without whom this entire effort would be meaningless.
|
||||||
|
|
||||||
|
It is also worth acknowledging the contributions and solutions to problems which arose from discussions amongst members and developers of other somewhat related and competing projects; even if we have had our occasional disagreements.
|
||||||
|
|
||||||
Mike Macgirvin
|
Mike Macgirvin
|
||||||
Fabio Comuni
|
Fabio Comuni
|
||||||
Simon L'nu
|
Simon L'nu
|
||||||
@@ -10,7 +14,7 @@ tommy tomson
|
|||||||
Simon
|
Simon
|
||||||
zottel
|
zottel
|
||||||
Christian Vogeley
|
Christian Vogeley
|
||||||
jeroenpraat
|
Jeroen van Riet Paap (jeroenpraat)
|
||||||
Michael Vogel
|
Michael Vogel
|
||||||
erik
|
erik
|
||||||
Zach Prezkuta
|
Zach Prezkuta
|
||||||
@@ -62,6 +66,7 @@ tonnerkiller
|
|||||||
Antoine G
|
Antoine G
|
||||||
Christian Drechsler
|
Christian Drechsler
|
||||||
Ludovic Grossard
|
Ludovic Grossard
|
||||||
|
RedmatrixCanada
|
||||||
Stanislav Lechev [0xAF]
|
Stanislav Lechev [0xAF]
|
||||||
aweiher
|
aweiher
|
||||||
bufalo1973
|
bufalo1973
|
||||||
@@ -73,3 +78,5 @@ mycocham
|
|||||||
ndurchx
|
ndurchx
|
||||||
pafcu
|
pafcu
|
||||||
Simó Albert i Beltran
|
Simó Albert i Beltran
|
||||||
|
Manuel Reva
|
||||||
|
Manuel Jiménez Friaza
|
||||||
|
|||||||
@@ -23,18 +23,17 @@
|
|||||||
[tr][td][zrl=[baseurl]/help/database/db_group_member]group_member[/zrl][/td][td]privacy groups (collections), group info[/td][/tr]
|
[tr][td][zrl=[baseurl]/help/database/db_group_member]group_member[/zrl][/td][td]privacy groups (collections), group info[/td][/tr]
|
||||||
[tr][td][zrl=[baseurl]/help/database/db_groups]groups[/zrl][/td][td]privacy groups (collections), member info[/td][/tr]
|
[tr][td][zrl=[baseurl]/help/database/db_groups]groups[/zrl][/td][td]privacy groups (collections), member info[/td][/tr]
|
||||||
[tr][td][zrl=[baseurl]/help/database/db_hook]hook[/zrl][/td][td]plugin hook registry[/td][/tr]
|
[tr][td][zrl=[baseurl]/help/database/db_hook]hook[/zrl][/td][td]plugin hook registry[/td][/tr]
|
||||||
[tr][td][zrl=[baseurl]/help/database/db_hubloc]hubloc[/zrl][/td][td]Red location storage, ties a hub location to an xchan[/td][/tr]
|
[tr][td][zrl=[baseurl]/help/database/db_hubloc]hubloc[/zrl][/td][td]xchan location storage, ties a hub location to an xchan[/td][/tr]
|
||||||
[tr][td][zrl=[baseurl]/help/database/db_issue]issue[/zrl][/td][td]future bug/issue database[/td][/tr]
|
[tr][td][zrl=[baseurl]/help/database/db_issue]issue[/zrl][/td][td]future bug/issue database[/td][/tr]
|
||||||
[tr][td][zrl=[baseurl]/help/database/db_item]item[/zrl][/td][td]all posts and webpages[/td][/tr]
|
[tr][td][zrl=[baseurl]/help/database/db_item]item[/zrl][/td][td]all posts and webpages[/td][/tr]
|
||||||
[tr][td][zrl=[baseurl]/help/database/db_item_id]item_id[/zrl][/td][td]other identifiers on other services for posts[/td][/tr]
|
[tr][td][zrl=[baseurl]/help/database/db_item_id]item_id[/zrl][/td][td]other identifiers on other services for posts[/td][/tr]
|
||||||
[tr][td][zrl=[baseurl]/help/database/db_likes]likes[/zrl][/td][td]likes of 'things'[/td][/tr]
|
[tr][td][zrl=[baseurl]/help/database/db_likes]likes[/zrl][/td][td]likes of 'things'[/td][/tr]
|
||||||
[tr][td][zrl=[baseurl]/help/database/db_mail]mail[/zrl][/td][td]private messages[/td][/tr]
|
[tr][td][zrl=[baseurl]/help/database/db_mail]mail[/zrl][/td][td]private messages[/td][/tr]
|
||||||
[tr][td][zrl=[baseurl]/help/database/db_manage]manage[/zrl][/td][td]may be unused in Red, table of accounts that can "su" each other[/td][/tr]
|
|
||||||
[tr][td][zrl=[baseurl]/help/database/db_menu]menu[/zrl][/td][td]webpage menu data[/td][/tr]
|
[tr][td][zrl=[baseurl]/help/database/db_menu]menu[/zrl][/td][td]webpage menu data[/td][/tr]
|
||||||
[tr][td][zrl=[baseurl]/help/database/db_menu_item]menu_item[/zrl][/td][td]entries for webpage menus[/td][/tr]
|
[tr][td][zrl=[baseurl]/help/database/db_menu_item]menu_item[/zrl][/td][td]entries for webpage menus[/td][/tr]
|
||||||
[tr][td][zrl=[baseurl]/help/database/db_notify]notify[/zrl][/td][td]notifications[/td][/tr]
|
[tr][td][zrl=[baseurl]/help/database/db_notify]notify[/zrl][/td][td]notifications[/td][/tr]
|
||||||
[tr][td][zrl=[baseurl]/help/database/db_obj]obj[/zrl][/td][td]object data for things (x has y)[/td][/tr]
|
[tr][td][zrl=[baseurl]/help/database/db_obj]obj[/zrl][/td][td]object data for things (x has y)[/td][/tr]
|
||||||
[tr][td][zrl=[baseurl]/help/database/db_outq]outq[/zrl][/td][td]Red output queue[/td][/tr]
|
[tr][td][zrl=[baseurl]/help/database/db_outq]outq[/zrl][/td][td]output queue[/td][/tr]
|
||||||
[tr][td][zrl=[baseurl]/help/database/db_pconfig]pconfig[/zrl][/td][td]personal (per channel) configuration storage[/td][/tr]
|
[tr][td][zrl=[baseurl]/help/database/db_pconfig]pconfig[/zrl][/td][td]personal (per channel) configuration storage[/td][/tr]
|
||||||
[tr][td][zrl=[baseurl]/help/database/db_photo]photo[/zrl][/td][td]photo storage[/td][/tr]
|
[tr][td][zrl=[baseurl]/help/database/db_photo]photo[/zrl][/td][td]photo storage[/td][/tr]
|
||||||
[tr][td][zrl=[baseurl]/help/database/db_poll]poll[/zrl][/td][td]data for polls[/td][/tr]
|
[tr][td][zrl=[baseurl]/help/database/db_poll]poll[/zrl][/td][td]data for polls[/td][/tr]
|
||||||
|
|||||||
@@ -27,29 +27,22 @@
|
|||||||
[/td][/tr]
|
[/td][/tr]
|
||||||
[tr][td]abook_dob[/td][td]Datetime of connection's birthday converted from *their* timezone to UTC[/td][td]datetime[/td][td]NO[/td][td]MUL[/td][td]0000-00-00 00:00:00[/td][td]
|
[tr][td]abook_dob[/td][td]Datetime of connection's birthday converted from *their* timezone to UTC[/td][td]datetime[/td][td]NO[/td][td]MUL[/td][td]0000-00-00 00:00:00[/td][td]
|
||||||
[/td][/tr]
|
[/td][/tr]
|
||||||
[tr][td]abook_flags[/td][td]Bitfield containing blocked(0x1), ignored(0x2), hidden(0x4), archived(0x8), pending(0x10), unconnected(0x20), self(0x80), feed(0x100)[/td][td]int(11)[/td][td]NO[/td][td]MUL[/td][td]0[/td][td]
|
[tr][td]abook_flags[/td][td]No longer used[/td][td]int(11)[/td][td]NO[/td][td]MUL[/td][td]0[/td][td]
|
||||||
[/td][/tr]
|
[/td][/tr]
|
||||||
[tr][td]abook_profile[/td][td]profile.guid of profile to display to this connection if authenticated[/td][td]char(64)[/td][td]NO[/td][td]MUL[/td][td][/td][td]
|
[tr][td]abook_profile[/td][td]profile.guid of profile to display to this connection if authenticated[/td][td]char(64)[/td][td]NO[/td][td]MUL[/td][td][/td][td]
|
||||||
[/td][/tr]
|
[/td][/tr]
|
||||||
|
[tr][td]abook_blocked[/td][td]Bi-directional communications with this channel are blocked, regardless of other permissions. [/td][td]int(11)[/td][td]NO[/td][td]MUL[/td][td]0[/td][td]
|
||||||
|
[tr][td]abook_ignored[/td][td]Incoming communications from this channel are blocked, regardless of other permissions. [/td][td]int(11)[/td][td]NO[/td][td]MUL[/td][td]0[/td][td]
|
||||||
|
[tr][td]abook_hidden[/td][td]This connection will not be shown as a connection to anybody but the channel owner[/td][td]int(11)[/td][td]NO[/td][td]MUL[/td][td]0[/td][td]
|
||||||
|
[tr][td]abook_archived[/td][td]This connection is likely non-functioning and the entry and conversations are preserved, but further polled communications will not be attempted. [/td][td]int(11)[/td][td]NO[/td][td]MUL[/td][td]0[/td][td]
|
||||||
|
[tr][td]abook_pending[/td][td]A connection request was received from this channel but has not been approved by the channel owner, public communications may still be visible but no additional permissions have been granted. [/td][td]int(11)[/td][td]NO[/td][td]MUL[/td][td]0[/td][td]
|
||||||
|
[tr][td]abook_unconnected[/td][td]currently unused. Projected usage is to indicate "one-way" connections which were insitgated on this end but are still pending on the remote end. [/td][td]int(11)[/td][td]NO[/td][td]MUL[/td][td]0[/td][td]
|
||||||
|
[tr][td]abook_self[/td][td]is a special case where the owner is the target. Every channel has one abook entry with abook_self and with a target abook_xchan set to channel.channel_hash . When this flag is present, abook_my_perms is the default permissions granted to all new connections and several other fields are unused.[/td][td]int(11)[/td][td]NO[/td][td]MUL[/td][td]0[/td][td]
|
||||||
|
[tr][td]abook_feed[/td][td]indicates this connection is an RSS/Atom feed and may trigger special handling.[/td][td]int(11)[/td][td]NO[/td][td]MUL[/td][td]0[/td][td]
|
||||||
|
[tr][td]abook_incl[/td][td]connection filter allow rules separated by LF[/td][td]text[/td][td]NO[/td][td]MUL[/td][td]0[/td][td]
|
||||||
|
[tr][td]abook_excl[/td][td]connection filter deny rules separated by LF[/td][td]text[/td][td]NO[/td][td]MUL[/td][td]0[/td][td]
|
||||||
|
[tr][td]abook_instance[/td][td]comma separated list of site urls of all channel clones that this connection is connected with (used only for singleton networks which don't support cloning)[/td][td]text[/td][td]NO[/td][td]MUL[/td][td]0[/td][td]
|
||||||
[/table]
|
[/table]
|
||||||
|
|
||||||
|
|
||||||
Notes:
|
|
||||||
|
|
||||||
ABOOK_FLAGS_BLOCKED - Bi-directional communications with this channel are blocked, regardless of other permissions.
|
|
||||||
|
|
||||||
ABOOK_FLAGS_IGNORED - Incoming communications from this channel are blocked, regardless of other permissions.
|
|
||||||
|
|
||||||
ABOOK_FLAGS_HIDDEN - This connection will not be shown as a connection to anybody but the channel owner
|
|
||||||
|
|
||||||
ABOOK_FLAGS_ARCHIVED - This connection is likely non-functioning and the entry and conversations are preserved, but further polled communications will not be attempted.
|
|
||||||
|
|
||||||
ABOOK_FLAGS_PENDING - A connection request was received from this channel but has not been approved by the channel owner, public communications may still be visible but no additional permissions have been granted.
|
|
||||||
|
|
||||||
ABOOK_FLAGS_UNCONNECTED - currently unused. Projected usage is to indicate "one-way" connections which were insitgated on this end but are still pending on the remote end.
|
|
||||||
|
|
||||||
ABOOK_FLAGS_SELF is a special case where the owner is the target. Every channel has one abook entry with ABOOK_FLAGS_SELF with a target abook_xchan set to channel.channel_hash . When this flag is present, abook_my_perms is the default permissions granted to all new connections and several other fields are unused.
|
|
||||||
|
|
||||||
ABOOK_FLAGS_FEED - indicates this connection is an RSS/Atom feed and may trigger special handling.
|
|
||||||
|
|
||||||
Return to [zrl=[baseurl]/help/database]database documentation[/zrl]
|
Return to [zrl=[baseurl]/help/database]database documentation[/zrl]
|
||||||
@@ -21,7 +21,15 @@
|
|||||||
[/td][/tr]
|
[/td][/tr]
|
||||||
[tr][td]folder[/td][td]attach.hash of parent folder[/td][td]char(64)[/td][td]NO[/td][td]MUL[/td][td][/td][td]
|
[tr][td]folder[/td][td]attach.hash of parent folder[/td][td]char(64)[/td][td]NO[/td][td]MUL[/td][td][/td][td]
|
||||||
[/td][/tr]
|
[/td][/tr]
|
||||||
[tr][td]flags[/td][td]see notes[/td][td]int(10) unsigned[/td][td]NO[/td][td]MUL[/td][td]0[/td][td]
|
[tr][td]flags[/td][td]no longer used[/td][td]int(10) unsigned[/td][td]NO[/td][td]MUL[/td][td]0[/td][td]
|
||||||
|
[/td][/tr]
|
||||||
|
[tr][td]is_dir[/td][td]0 (file) or 1 to indicate a directory[/td][td]tinyint[/td][td]NO[/td][td]MUL[/td][td]0[/td][td]
|
||||||
|
[/td][/tr]
|
||||||
|
[tr][td]is_photo[/td][td]if 1, a photo is linked to this resource[/td][td]tinyint[/td][td]NO[/td][td]MUL[/td][td]0[/td][td]
|
||||||
|
[/td][/tr]
|
||||||
|
[tr][td]os_storage[/td][td]if 0, data contains content; if 1 data contains path to content (always 1 in hubzilla)[/td][td]tinyint[/td][td]NO[/td][td]MUL[/td][td]0[/td][td]
|
||||||
|
[/td][/tr]
|
||||||
|
[tr][td]display_path[/td][td]under construction, store the human readable path[/td][td]mediumtext[/td][td]NO[/td][td]MUL[/td][td]0[/td][td]
|
||||||
[/td][/tr]
|
[/td][/tr]
|
||||||
[tr][td]data[/td][td]file data or pathname to stored data if ATTACH_FLAG_OS[/td][td]longblob[/td][td]NO[/td][td][/td][td]NULL[/td][td]
|
[tr][td]data[/td][td]file data or pathname to stored data if ATTACH_FLAG_OS[/td][td]longblob[/td][td]NO[/td][td][/td][td]NULL[/td][td]
|
||||||
[/td][/tr]
|
[/td][/tr]
|
||||||
@@ -39,12 +47,6 @@
|
|||||||
[/td][/tr]
|
[/td][/tr]
|
||||||
[/table]
|
[/table]
|
||||||
|
|
||||||
|
|
||||||
Bitmasks
|
|
||||||
|
|
||||||
define ( 'ATTACH_FLAG_DIR', 0x0001); This is a directory
|
|
||||||
define ( 'ATTACH_FLAG_OS', 0x0002); Data content is link to OS file containing data, if unset the data filed contains the file data
|
|
||||||
|
|
||||||
permissions are xchan_hash or group_hash surrounded by angle chars. e.g. '<abc123><xyz789>'
|
permissions are xchan_hash or group_hash surrounded by angle chars. e.g. '<abc123><xyz789>'
|
||||||
|
|
||||||
Return to [zrl=[baseurl]/help/database]database documentation[/zrl]
|
Return to [zrl=[baseurl]/help/database]database documentation[/zrl]
|
||||||
@@ -1,95 +1,99 @@
|
|||||||
[table]
|
[table]
|
||||||
[tr][th]Field[/th][th]Description[/th][th]Type[/th][th]Null[/th][th]Key[/th][th]Default[/th][th]Extra
|
[tr][th]Field[/th][th]Description[/th][th]Type[/th][th]Null[/th][th]Key[/th][th]Default[/th][th]Extra
|
||||||
[/th][/tr]
|
[/th][/tr]
|
||||||
[tr][td]channel_id[/td][td][/td][td]int(10) unsigned[/td][td]NO[/td][td]PRI[/td][td]NULL[/td][td]auto_increment
|
[tr][td]channel_id[/td][td]sequential ID[/td][td]int(10) unsigned[/td][td]NO[/td][td]PRI[/td][td]NULL[/td][td]auto_increment
|
||||||
[/td][/tr]
|
[/td][/tr]
|
||||||
[tr][td]channel_account_id[/td][td][/td][td]int(10) unsigned[/td][td]NO[/td][td]MUL[/td][td]0[/td][td]
|
[tr][td]channel_account_id[/td][td]account.id of the account owning this channel[/td][td]int(10) unsigned[/td][td]NO[/td][td]MUL[/td][td]0[/td][td]
|
||||||
[/td][/tr]
|
[/td][/tr]
|
||||||
[tr][td]channel_primary[/td][td][/td][td]tinyint(1) unsigned[/td][td]NO[/td][td]MUL[/td][td]0[/td][td]
|
[tr][td]channel_primary[/td][td]1 = this is the primary instance of this channel[/td][td]tinyint(1) unsigned[/td][td]NO[/td][td]MUL[/td][td]0[/td][td]
|
||||||
[/td][/tr]
|
[/td][/tr]
|
||||||
[tr][td]channel_name[/td][td][/td][td]char(255)[/td][td]NO[/td][td]MUL[/td][td][/td][td]
|
[tr][td]channel_name[/td][td]Name that this channel is known by[/td][td]char(255)[/td][td]NO[/td][td]MUL[/td][td][/td][td]
|
||||||
[/td][/tr]
|
[/td][/tr]
|
||||||
[tr][td]channel_address[/td][td][/td][td]char(255)[/td][td]NO[/td][td]UNI[/td][td][/td][td]
|
[tr][td]channel_address[/td][td]"username" or URL-and-email safe nickname[/td][td]char(255)[/td][td]NO[/td][td]UNI[/td][td][/td][td]
|
||||||
[/td][/tr]
|
[/td][/tr]
|
||||||
[tr][td]channel_guid[/td][td][/td][td]char(255)[/td][td]NO[/td][td]MUL[/td][td][/td][td]
|
[tr][td]channel_guid[/td][td]Long hash representing a psuedo-unique ID, does not have ot be globally unique[/td][td]char(255)[/td][td]NO[/td][td]MUL[/td][td][/td][td]
|
||||||
[/td][/tr]
|
[/td][/tr]
|
||||||
[tr][td]channel_guid_sig[/td][td][/td][td]text[/td][td]NO[/td][td][/td][td]NULL[/td][td]
|
[tr][td]channel_guid_sig[/td][td]channel.gui signed with channel.prvkey and base64url_encoded[/td][td]text[/td][td]NO[/td][td][/td][td]NULL[/td][td]
|
||||||
[/td][/tr]
|
[/td][/tr]
|
||||||
[tr][td]channel_hash[/td][td][/td][td]char(255)[/td][td]NO[/td][td]MUL[/td][td][/td][td]
|
[tr][td]channel_hash[/td][td]base64url_encode of a 64-char whirlpool hash of channel.guid and channel_guid_sig concatenated, synonymous with xchan_hash.[/td][td]char(255)[/td][td]NO[/td][td]MUL[/td][td][/td][td]
|
||||||
[/td][/tr]
|
[/td][/tr]
|
||||||
[tr][td]channel_timezone[/td][td][/td][td]char(128)[/td][td]NO[/td][td]MUL[/td][td]UTC[/td][td]
|
[tr][td]channel_timezone[/td][td]PHP-legal timezone[/td][td]char(128)[/td][td]NO[/td][td]MUL[/td][td]UTC[/td][td]
|
||||||
[/td][/tr]
|
[/td][/tr]
|
||||||
[tr][td]channel_location[/td][td][/td][td]char(255)[/td][td]NO[/td][td]MUL[/td][td][/td][td]
|
[tr][td]channel_location[/td][td]Default for item.location[/td][td]char(255)[/td][td]NO[/td][td]MUL[/td][td][/td][td]
|
||||||
[/td][/tr]
|
[/td][/tr]
|
||||||
[tr][td]channel_theme[/td][td][/td][td]char(255)[/td][td]NO[/td][td]MUL[/td][td][/td][td]
|
[tr][td]channel_theme[/td][td]channel theme preference[/td][td]char(255)[/td][td]NO[/td][td]MUL[/td][td][/td][td]
|
||||||
[/td][/tr]
|
[/td][/tr]
|
||||||
[tr][td]channel_startpage[/td][td][/td][td]char(255)[/td][td]NO[/td][td][/td][td][/td][td]
|
[tr][td]channel_startpage[/td]relative site URL to visit after logging in[td][/td][td]char(255)[/td][td]NO[/td][td][/td][td][/td][td]
|
||||||
[/td][/tr]
|
[/td][/tr]
|
||||||
[tr][td]channel_pubkey[/td][td][/td][td]text[/td][td]NO[/td][td][/td][td]NULL[/td][td]
|
[tr][td]channel_pubkey[/td][td]RSA public key 4096 bit[/td][td]text[/td][td]NO[/td][td][/td][td]NULL[/td][td]
|
||||||
[/td][/tr]
|
[/td][/tr]
|
||||||
[tr][td]channel_prvkey[/td][td][/td][td]text[/td][td]NO[/td][td][/td][td]NULL[/td][td]
|
[tr][td]channel_prvkey[/td][td]RSA private key 4096 bit[/td][td]text[/td][td]NO[/td][td][/td][td]NULL[/td][td]
|
||||||
[/td][/tr]
|
[/td][/tr]
|
||||||
[tr][td]channel_notifyflags[/td][td][/td][td]int(10) unsigned[/td][td]NO[/td][td]MUL[/td][td]65535[/td][td]
|
[tr][td]channel_notifyflags[/td][td]bifield representing what notification types are active[/td][td]int(10) unsigned[/td][td]NO[/td][td]MUL[/td][td]65535[/td][td]
|
||||||
[/td][/tr]
|
[/td][/tr]
|
||||||
[tr][td]channel_pageflags[/td][td][/td][td]int(10) unsigned[/td][td]NO[/td][td]MUL[/td][td]0[/td][td]
|
[tr][td]channel_pageflags[/td][td]bitfield of special channel uses[/td][td]int(10) unsigned[/td][td]NO[/td][td]MUL[/td][td]0[/td][td]
|
||||||
[/td][/tr]
|
[/td][/tr]
|
||||||
[tr][td]channel_dirdate[/td][td][/td][td]datetime[/td][td]NO[/td][td]MUL[/td][td]0000-00-00 00:00:00[/td][td]
|
[tr][td]channel_dirdate[/td][td]time when directory was last pinged. Must do this once a month[/td][td]datetime[/td][td]NO[/td][td]MUL[/td][td]0000-00-00 00:00:00[/td][td]
|
||||||
[/td][/tr]
|
[/td][/tr]
|
||||||
[tr][td]channel_deleted[/td][td][/td][td]datetime[/td][td]NO[/td][td]MUL[/td][td]0000-00-00 00:00:00[/td][td]
|
[tr][td]channel_deleted[/td][td]time when channel was deleted[/td][td]datetime[/td][td]NO[/td][td]MUL[/td][td]0000-00-00 00:00:00[/td][td]
|
||||||
[/td][/tr]
|
[/td][/tr]
|
||||||
[tr][td]channel_max_anon_mail[/td][td][/td][td]int(10) unsigned[/td][td]NO[/td][td]MUL[/td][td]10[/td][td]
|
[tr][td]channel_max_anon_mail[/td][td]unused[/td][td]int(10) unsigned[/td][td]NO[/td][td]MUL[/td][td]10[/td][td]
|
||||||
[/td][/tr]
|
[/td][/tr]
|
||||||
[tr][td]channel_max_friend_req[/td][td][/td][td]int(10) unsigned[/td][td]NO[/td][td]MUL[/td][td]10[/td][td]
|
[tr][td]channel_max_friend_req[/td][td]unused[/td][td]int(10) unsigned[/td][td]NO[/td][td]MUL[/td][td]10[/td][td]
|
||||||
[/td][/tr]
|
[/td][/tr]
|
||||||
[tr][td]channel_expire_days[/td][td][/td][td]int(11)[/td][td]NO[/td][td]MUL[/td][td]0[/td][td]
|
[tr][td]channel_expire_days[/td][td]expire imported content that hasn't been otherwise protected after this many days, 0 is no expiration[/td][td]int(11)[/td][td]NO[/td][td]MUL[/td][td]0[/td][td]
|
||||||
[/td][/tr]
|
[/td][/tr]
|
||||||
[tr][td]channel_passwd_reset[/td][td][/td][td]char(255)[/td][td]NO[/td][td][/td][td][/td][td]
|
[tr][td]channel_passwd_reset[/td][td]password reset token[/td][td]char(255)[/td][td]NO[/td][td][/td][td][/td][td]
|
||||||
[/td][/tr]
|
[/td][/tr]
|
||||||
[tr][td]channel_default_group[/td][td][/td][td]char(255)[/td][td]NO[/td][td]MUL[/td][td][/td][td]
|
[tr][td]channel_default_group[/td][td]put all new connections into the group with this name[/td][td]char(255)[/td][td]NO[/td][td]MUL[/td][td][/td][td]
|
||||||
[/td][/tr]
|
[/td][/tr]
|
||||||
[tr][td]channel_allow_cid[/td][td][/td][td]mediumtext[/td][td]NO[/td][td][/td][td]NULL[/td][td]
|
[tr][td]channel_allow_cid[/td][td]Default permissions for this channel[/td][td]mediumtext[/td][td]NO[/td][td][/td][td]NULL[/td][td]
|
||||||
[/td][/tr]
|
[/td][/tr]
|
||||||
[tr][td]channel_allow_gid[/td][td][/td][td]mediumtext[/td][td]NO[/td][td][/td][td]NULL[/td][td]
|
[tr][td]channel_allow_gid[/td][td]Default permissions for this channel[/td][td]mediumtext[/td][td]NO[/td][td][/td][td]NULL[/td][td]
|
||||||
[/td][/tr]
|
[/td][/tr]
|
||||||
[tr][td]channel_deny_cid[/td][td][/td][td]mediumtext[/td][td]NO[/td][td][/td][td]NULL[/td][td]
|
[tr][td]channel_deny_cid[/td][td]Default permissions for this channel[/td][td]mediumtext[/td][td]NO[/td][td][/td][td]NULL[/td][td]
|
||||||
[/td][/tr]
|
[/td][/tr]
|
||||||
[tr][td]channel_deny_gid[/td][td][/td][td]mediumtext[/td][td]NO[/td][td][/td][td]NULL[/td][td]
|
[tr][td]channel_deny_gid[/td][td]Default permissions for this channel[/td][td]mediumtext[/td][td]NO[/td][td][/td][td]NULL[/td][td]
|
||||||
[/td][/tr]
|
[/td][/tr]
|
||||||
[tr][td]channel_r_stream[/td][td][/td][td]int(10) unsigned[/td][td]NO[/td][td]MUL[/td][td]128[/td][td]
|
[tr][td]channel_r_stream[/td][td]specific permission bitfield[/td][td]int(10) unsigned[/td][td]NO[/td][td]MUL[/td][td]128[/td][td]
|
||||||
[/td][/tr]
|
[/td][/tr]
|
||||||
[tr][td]channel_r_profile[/td][td][/td][td]int(10) unsigned[/td][td]NO[/td][td]MUL[/td][td]128[/td][td]
|
[tr][td]channel_r_profile[/td][td]specific permission bitfield[/td][td]int(10) unsigned[/td][td]NO[/td][td]MUL[/td][td]128[/td][td]
|
||||||
[/td][/tr]
|
[/td][/tr]
|
||||||
[tr][td]channel_r_photos[/td][td][/td][td]int(10) unsigned[/td][td]NO[/td][td]MUL[/td][td]128[/td][td]
|
[tr][td]channel_r_photos[/td][td]specific permission bitfield[/td][td]int(10) unsigned[/td][td]NO[/td][td]MUL[/td][td]128[/td][td]
|
||||||
[/td][/tr]
|
[/td][/tr]
|
||||||
[tr][td]channel_r_abook[/td][td][/td][td]int(10) unsigned[/td][td]NO[/td][td]MUL[/td][td]128[/td][td]
|
[tr][td]channel_r_abook[/td][td]specific permission bitfield[/td][td]int(10) unsigned[/td][td]NO[/td][td]MUL[/td][td]128[/td][td]
|
||||||
[/td][/tr]
|
[/td][/tr]
|
||||||
[tr][td]channel_w_stream[/td][td][/td][td]int(10) unsigned[/td][td]NO[/td][td]MUL[/td][td]128[/td][td]
|
[tr][td]channel_w_stream[/td][td]specific permission bitfield[/td][td]int(10) unsigned[/td][td]NO[/td][td]MUL[/td][td]128[/td][td]
|
||||||
[/td][/tr]
|
[/td][/tr]
|
||||||
[tr][td]channel_w_wall[/td][td][/td][td]int(10) unsigned[/td][td]NO[/td][td]MUL[/td][td]128[/td][td]
|
[tr][td]channel_w_wall[/td][td]specific permission bitfield[/td][td]int(10) unsigned[/td][td]NO[/td][td]MUL[/td][td]128[/td][td]
|
||||||
[/td][/tr]
|
[/td][/tr]
|
||||||
[tr][td]channel_w_tagwall[/td][td][/td][td]int(10) unsigned[/td][td]NO[/td][td]MUL[/td][td]128[/td][td]
|
[tr][td]channel_w_tagwall[/td][td]specific permission bitfield[/td][td]int(10) unsigned[/td][td]NO[/td][td]MUL[/td][td]128[/td][td]
|
||||||
[/td][/tr]
|
[/td][/tr]
|
||||||
[tr][td]channel_w_comment[/td][td][/td][td]int(10) unsigned[/td][td]NO[/td][td]MUL[/td][td]128[/td][td]
|
[tr][td]channel_w_comment[/td][td]specific permission bitfield[/td][td]int(10) unsigned[/td][td]NO[/td][td]MUL[/td][td]128[/td][td]
|
||||||
[/td][/tr]
|
[/td][/tr]
|
||||||
[tr][td]channel_w_mail[/td][td][/td][td]int(10) unsigned[/td][td]NO[/td][td]MUL[/td][td]128[/td][td]
|
[tr][td]channel_w_mail[/td][td]specific permission bitfield[/td][td]int(10) unsigned[/td][td]NO[/td][td]MUL[/td][td]128[/td][td]
|
||||||
[/td][/tr]
|
[/td][/tr]
|
||||||
[tr][td]channel_w_photos[/td][td][/td][td]int(10) unsigned[/td][td]NO[/td][td]MUL[/td][td]128[/td][td]
|
[tr][td]channel_w_photos[/td][td]specific permission bitfield[/td][td]int(10) unsigned[/td][td]NO[/td][td]MUL[/td][td]128[/td][td]
|
||||||
[/td][/tr]
|
[/td][/tr]
|
||||||
[tr][td]channel_w_chat[/td][td][/td][td]int(10) unsigned[/td][td]NO[/td][td]MUL[/td][td]128[/td][td]
|
[tr][td]channel_w_chat[/td][td]specific permission bitfield[/td][td]int(10) unsigned[/td][td]NO[/td][td]MUL[/td][td]128[/td][td]
|
||||||
[/td][/tr]
|
[/td][/tr]
|
||||||
[tr][td]channel_a_delegate[/td][td][/td][td]int(10) unsigned[/td][td]NO[/td][td]MUL[/td][td]0[/td][td]
|
[tr][td]channel_a_delegate[/td][td]specific permission bitfield[/td][td]int(10) unsigned[/td][td]NO[/td][td]MUL[/td][td]0[/td][td]
|
||||||
[/td][/tr]
|
[/td][/tr]
|
||||||
[tr][td]channel_r_storage[/td][td][/td][td]int(10) unsigned[/td][td]NO[/td][td]MUL[/td][td]128[/td][td]
|
[tr][td]channel_r_storage[/td][td]specific permission bitfield[/td][td]int(10) unsigned[/td][td]NO[/td][td]MUL[/td][td]128[/td][td]
|
||||||
[/td][/tr]
|
[/td][/tr]
|
||||||
[tr][td]channel_w_storage[/td][td][/td][td]int(10) unsigned[/td][td]NO[/td][td]MUL[/td][td]128[/td][td]
|
[tr][td]channel_w_storage[/td][td]specific permission bitfield[/td][td]int(10) unsigned[/td][td]NO[/td][td]MUL[/td][td]128[/td][td]
|
||||||
[/td][/tr]
|
[/td][/tr]
|
||||||
[tr][td]channel_r_pages[/td][td][/td][td]int(10) unsigned[/td][td]NO[/td][td]MUL[/td][td]128[/td][td]
|
[tr][td]channel_r_pages[/td][td]specific permission bitfield[/td][td]int(10) unsigned[/td][td]NO[/td][td]MUL[/td][td]128[/td][td]
|
||||||
[/td][/tr]
|
[/td][/tr]
|
||||||
[tr][td]channel_w_pages[/td][td][/td][td]int(10) unsigned[/td][td]NO[/td][td]MUL[/td][td]128[/td][td]
|
[tr][td]channel_w_pages[/td][td]specific permission bitfield[/td][td]int(10) unsigned[/td][td]NO[/td][td]MUL[/td][td]128[/td][td]
|
||||||
[/td][/tr]
|
[/td][/tr]
|
||||||
[tr][td]channel_a_republish[/td][td][/td][td]int(10) unsigned[/td][td]NO[/td][td]MUL[/td][td]128[/td][td]
|
[tr][td]channel_a_republish[/td][td]specific permission bitfield[/td][td]int(10) unsigned[/td][td]NO[/td][td]MUL[/td][td]128[/td][td]
|
||||||
[/td][/tr]
|
[/td][/tr]
|
||||||
[tr][td]channel_w_like[/td][td][/td][td]int(10) unsigned[/td][td]NO[/td][td]MUL[/td][td]128[/td][td]
|
[tr][td]channel_w_like[/td][td]specific permission bitfield[/td][td]int(10) unsigned[/td][td]NO[/td][td]MUL[/td][td]128[/td][td]
|
||||||
|
[/td][/tr]
|
||||||
|
[tr][td]channel_removed[/td][td]if 1, this channel has been deleted[/td][td]int(10) unsigned[/td][td]NO[/td][td]MUL[/td][td]128[/td][td]
|
||||||
|
[/td][/tr]
|
||||||
|
[tr][td]channel_system[/td][td]if 1, this is the special system channel on this site[/td][td]int(10) unsigned[/td][td]NO[/td][td]MUL[/td][td]128[/td][td]
|
||||||
[/td][/tr]
|
[/td][/tr]
|
||||||
[/table]
|
[/table]
|
||||||
|
|
||||||
|
|||||||
@@ -1,15 +1,15 @@
|
|||||||
[table]
|
[table]
|
||||||
[tr][th]Field[/th][th]Description[/th][th]Type[/th][th]Null[/th][th]Key[/th][th]Default[/th][th]Extra
|
[tr][th]Field[/th][th]Description[/th][th]Type[/th][th]Null[/th][th]Key[/th][th]Default[/th][th]Extra
|
||||||
[/th][/tr]
|
[/th][/tr]
|
||||||
[tr][td]chat_id[/td][td][/td][td]int(10) unsigned[/td][td]NO[/td][td]PRI[/td][td]NULL[/td][td]auto_increment
|
[tr][td]chat_id[/td][td]sequential ID[/td][td]int(10) unsigned[/td][td]NO[/td][td]PRI[/td][td]NULL[/td][td]auto_increment
|
||||||
[/td][/tr]
|
[/td][/tr]
|
||||||
[tr][td]chat_room[/td][td][/td][td]int(10) unsigned[/td][td]NO[/td][td]MUL[/td][td]0[/td][td]
|
[tr][td]chat_room[/td][td]chatroom.cr_id for this chat[/td][td]int(10) unsigned[/td][td]NO[/td][td]MUL[/td][td]0[/td][td]
|
||||||
[/td][/tr]
|
[/td][/tr]
|
||||||
[tr][td]chat_xchan[/td][td][/td][td]char(255)[/td][td]NO[/td][td]MUL[/td][td][/td][td]
|
[tr][td]chat_xchan[/td][td]author xchan_hash[/td][td]char(255)[/td][td]NO[/td][td]MUL[/td][td][/td][td]
|
||||||
[/td][/tr]
|
[/td][/tr]
|
||||||
[tr][td]chat_text[/td][td][/td][td]mediumtext[/td][td]NO[/td][td][/td][td]NULL[/td][td]
|
[tr][td]chat_text[/td][td]the text of the chat message[/td][td]mediumtext[/td][td]NO[/td][td][/td][td]NULL[/td][td]
|
||||||
[/td][/tr]
|
[/td][/tr]
|
||||||
[tr][td]created[/td][td][/td][td]datetime[/td][td]NO[/td][td]MUL[/td][td]0000-00-00 00:00:00[/td][td]
|
[tr][td]created[/td][td]timestamp of this message[/td][td]datetime[/td][td]NO[/td][td]MUL[/td][td]0000-00-00 00:00:00[/td][td]
|
||||||
[/td][/tr]
|
[/td][/tr]
|
||||||
[/table]
|
[/table]
|
||||||
|
|
||||||
|
|||||||
@@ -1,17 +1,17 @@
|
|||||||
[table]
|
[table]
|
||||||
[tr][th]Field[/th][th]Description[/th][th]Type[/th][th]Null[/th][th]Key[/th][th]Default[/th][th]Extra
|
[tr][th]Field[/th][th]Description[/th][th]Type[/th][th]Null[/th][th]Key[/th][th]Default[/th][th]Extra
|
||||||
[/th][/tr]
|
[/th][/tr]
|
||||||
[tr][td]cp_id[/td][td][/td][td]int(10) unsigned[/td][td]NO[/td][td]PRI[/td][td]NULL[/td][td]auto_increment
|
[tr][td]cp_id[/td][td]sequential ID[/td][td]int(10) unsigned[/td][td]NO[/td][td]PRI[/td][td]NULL[/td][td]auto_increment
|
||||||
[/td][/tr]
|
[/td][/tr]
|
||||||
[tr][td]cp_room[/td][td][/td][td]int(10) unsigned[/td][td]NO[/td][td]MUL[/td][td]0[/td][td]
|
[tr][td]cp_room[/td][td]chatroom.cr_id of the chatroom[/td][td]int(10) unsigned[/td][td]NO[/td][td]MUL[/td][td]0[/td][td]
|
||||||
[/td][/tr]
|
[/td][/tr]
|
||||||
[tr][td]cp_xchan[/td][td][/td][td]char(255)[/td][td]NO[/td][td]MUL[/td][td][/td][td]
|
[tr][td]cp_xchan[/td][td]xchan_hash of the chatroom participant[/td][td]char(255)[/td][td]NO[/td][td]MUL[/td][td][/td][td]
|
||||||
[/td][/tr]
|
[/td][/tr]
|
||||||
[tr][td]cp_last[/td][td][/td][td]datetime[/td][td]NO[/td][td]MUL[/td][td]0000-00-00 00:00:00[/td][td]
|
[tr][td]cp_last[/td][td]datetime last ping[/td][td]datetime[/td][td]NO[/td][td]MUL[/td][td]0000-00-00 00:00:00[/td][td]
|
||||||
[/td][/tr]
|
[/td][/tr]
|
||||||
[tr][td]cp_status[/td][td][/td][td]char(255)[/td][td]NO[/td][td]MUL[/td][td]NULL[/td][td]
|
[tr][td]cp_status[/td][td]text status description e.g. "online"[/td][td]char(255)[/td][td]NO[/td][td]MUL[/td][td]NULL[/td][td]
|
||||||
[/td][/tr]
|
[/td][/tr]
|
||||||
[tr][td]cp_client[/td][td][/td][td]char(128)[/td][td]NO[/td][td][/td][td][/td][td]
|
[tr][td]cp_client[/td][td][/td]IP address of this client[td]char(128)[/td][td]NO[/td][td][/td][td][/td][td]
|
||||||
[/td][/tr]
|
[/td][/tr]
|
||||||
[/table]
|
[/table]
|
||||||
|
|
||||||
|
|||||||
@@ -1,27 +1,27 @@
|
|||||||
[table]
|
[table]
|
||||||
[tr][th]Field[/th][th]Description[/th][th]Type[/th][th]Null[/th][th]Key[/th][th]Default[/th][th]Extra
|
[tr][th]Field[/th][th]Description[/th][th]Type[/th][th]Null[/th][th]Key[/th][th]Default[/th][th]Extra
|
||||||
[/th][/tr]
|
[/th][/tr]
|
||||||
[tr][td]cr_id[/td][td][/td][td]int(10) unsigned[/td][td]NO[/td][td]PRI[/td][td]NULL[/td][td]auto_increment
|
[tr][td]cr_id[/td][td]sequential ID[/td][td]int(10) unsigned[/td][td]NO[/td][td]PRI[/td][td]NULL[/td][td]auto_increment
|
||||||
[/td][/tr]
|
[/td][/tr]
|
||||||
[tr][td]cr_aid[/td][td][/td][td]int(10) unsigned[/td][td]NO[/td][td]MUL[/td][td]0[/td][td]
|
[tr][td]cr_aid[/td][td]account.id of chatroom owner[/td][td]int(10) unsigned[/td][td]NO[/td][td]MUL[/td][td]0[/td][td]
|
||||||
[/td][/tr]
|
[/td][/tr]
|
||||||
[tr][td]cr_uid[/td][td][/td][td]int(10) unsigned[/td][td]NO[/td][td]MUL[/td][td]0[/td][td]
|
[tr][td]cr_uid[/td][td]channel.channel_id of chatroom owner[/td][td]int(10) unsigned[/td][td]NO[/td][td]MUL[/td][td]0[/td][td]
|
||||||
[/td][/tr]
|
[/td][/tr]
|
||||||
[tr][td]cr_name[/td][td][/td][td]char(255)[/td][td]NO[/td][td]MUL[/td][td][/td][td]
|
[tr][td]cr_name[/td][td]visible name of chatroom[/td][td]char(255)[/td][td]NO[/td][td]MUL[/td][td][/td][td]
|
||||||
[/td][/tr]
|
[/td][/tr]
|
||||||
[tr][td]cr_created[/td][td][/td][td]datetime[/td][td]NO[/td][td]MUL[/td][td]0000-00-00 00:00:00[/td][td]
|
[tr][td]cr_created[/td][td]creation timestampe[/td][td]datetime[/td][td]NO[/td][td]MUL[/td][td]0000-00-00 00:00:00[/td][td]
|
||||||
[/td][/tr]
|
[/td][/tr]
|
||||||
[tr][td]cr_edited[/td][td][/td][td]datetime[/td][td]NO[/td][td]MUL[/td][td]0000-00-00 00:00:00[/td][td]
|
[tr][td]cr_edited[/td][td]edited timestamp[/td][td]datetime[/td][td]NO[/td][td]MUL[/td][td]0000-00-00 00:00:00[/td][td]
|
||||||
[/td][/tr]
|
[/td][/tr]
|
||||||
[tr][td]cr_expire[/td][td][/td][td]int(10) unsigned[/td][td]NO[/td][td]MUL[/td][td]0[/td][td]
|
[tr][td]cr_expire[/td][td]expiration period for chats in this chatroom in minutes, 0 is no expiration[/td][td]int(10) unsigned[/td][td]NO[/td][td]MUL[/td][td]0[/td][td]
|
||||||
[/td][/tr]
|
[/td][/tr]
|
||||||
[tr][td]allow_cid[/td][td][/td][td]mediumtext[/td][td]NO[/td][td][/td][td]NULL[/td][td]
|
[tr][td]allow_cid[/td][td]permissions for this room[/td][td]mediumtext[/td][td]NO[/td][td][/td][td]NULL[/td][td]
|
||||||
[/td][/tr]
|
[/td][/tr]
|
||||||
[tr][td]allow_gid[/td][td][/td][td]mediumtext[/td][td]NO[/td][td][/td][td]NULL[/td][td]
|
[tr][td]allow_gid[/td][td]permissions for this room[/td][td]mediumtext[/td][td]NO[/td][td][/td][td]NULL[/td][td]
|
||||||
[/td][/tr]
|
[/td][/tr]
|
||||||
[tr][td]deny_cid[/td][td][/td][td]mediumtext[/td][td]NO[/td][td][/td][td]NULL[/td][td]
|
[tr][td]deny_cid[/td][td]permissions for this room[/td][td]mediumtext[/td][td]NO[/td][td][/td][td]NULL[/td][td]
|
||||||
[/td][/tr]
|
[/td][/tr]
|
||||||
[tr][td]deny_gid[/td][td][/td][td]mediumtext[/td][td]NO[/td][td][/td][td]NULL[/td][td]
|
[tr][td]deny_gid[/td][td]permissions for this room[/td][td]mediumtext[/td][td]NO[/td][td][/td][td]NULL[/td][td]
|
||||||
[/td][/tr]
|
[/td][/tr]
|
||||||
[/table]
|
[/table]
|
||||||
|
|
||||||
|
|||||||
@@ -1,21 +1,24 @@
|
|||||||
|
|
||||||
|
Used in Diaspora private mails
|
||||||
|
|
||||||
[table]
|
[table]
|
||||||
[tr][th]Field[/th][th]Description[/th][th]Type[/th][th]Null[/th][th]Key[/th][th]Default[/th][th]Extra
|
[tr][th]Field[/th][th]Description[/th][th]Type[/th][th]Null[/th][th]Key[/th][th]Default[/th][th]Extra
|
||||||
[/th][/tr]
|
[/th][/tr]
|
||||||
[tr][td]id[/td][td][/td][td]int(10) unsigned[/td][td]NO[/td][td]PRI[/td][td]NULL[/td][td]auto_increment
|
[tr][td]id[/td][td]sequential ID[/td][td]int(10) unsigned[/td][td]NO[/td][td]PRI[/td][td]NULL[/td][td]auto_increment
|
||||||
[/td][/tr]
|
[/td][/tr]
|
||||||
[tr][td]guid[/td][td][/td][td]char(255)[/td][td]NO[/td][td][/td][td]NULL[/td][td]
|
[tr][td]guid[/td][td]A unique identifier for this conversation[/td][td]char(255)[/td][td]NO[/td][td][/td][td]NULL[/td][td]
|
||||||
[/td][/tr]
|
[/td][/tr]
|
||||||
[tr][td]recips[/td][td][/td][td]mediumtext[/td][td]NO[/td][td][/td][td]NULL[/td][td]
|
[tr][td]recips[/td][td]sender_handle;recipient_handle[/td][td]mediumtext[/td][td]NO[/td][td][/td][td]NULL[/td][td]
|
||||||
[/td][/tr]
|
[/td][/tr]
|
||||||
[tr][td]uid[/td][td][/td][td]int(11)[/td][td]NO[/td][td][/td][td]NULL[/td][td]
|
[tr][td]uid[/td][td]channel.channel_id of the owner of this data[/td][td]int(11)[/td][td]NO[/td][td][/td][td]NULL[/td][td]
|
||||||
[/td][/tr]
|
[/td][/tr]
|
||||||
[tr][td]creator[/td][td][/td][td]char(255)[/td][td]NO[/td][td][/td][td]NULL[/td][td]
|
[tr][td]creator[/td][td]handle of creator[/td][td]char(255)[/td][td]NO[/td][td][/td][td]NULL[/td][td]
|
||||||
[/td][/tr]
|
[/td][/tr]
|
||||||
[tr][td]created[/td][td][/td][td]datetime[/td][td]NO[/td][td]MUL[/td][td]0000-00-00 00:00:00[/td][td]
|
[tr][td]created[/td][td]creation timestamp[/td][td]datetime[/td][td]NO[/td][td]MUL[/td][td]0000-00-00 00:00:00[/td][td]
|
||||||
[/td][/tr]
|
[/td][/tr]
|
||||||
[tr][td]updated[/td][td][/td][td]datetime[/td][td]NO[/td][td]MUL[/td][td]0000-00-00 00:00:00[/td][td]
|
[tr][td]updated[/td][td]edited timestamp[/td][td]datetime[/td][td]NO[/td][td]MUL[/td][td]0000-00-00 00:00:00[/td][td]
|
||||||
[/td][/tr]
|
[/td][/tr]
|
||||||
[tr][td]subject[/td][td][/td][td]mediumtext[/td][td]NO[/td][td][/td][td]NULL[/td][td]
|
[tr][td]subject[/td][td]subject of initial message (obscured for privacy)[/td][td]mediumtext[/td][td]NO[/td][td][/td][td]NULL[/td][td]
|
||||||
[/td][/tr]
|
[/td][/tr]
|
||||||
[/table]
|
[/table]
|
||||||
|
|
||||||
|
|||||||
@@ -1,13 +1,13 @@
|
|||||||
[table]
|
[table]
|
||||||
[tr][th]Field[/th][th]Description[/th][th]Type[/th][th]Null[/th][th]Key[/th][th]Default[/th][th]Extra
|
[tr][th]Field[/th][th]Description[/th][th]Type[/th][th]Null[/th][th]Key[/th][th]Default[/th][th]Extra
|
||||||
[/th][/tr]
|
[/th][/tr]
|
||||||
[tr][td]id[/td][td][/td][td]int(10) unsigned[/td][td]NO[/td][td]PRI[/td][td]NULL[/td][td]auto_increment
|
[tr][td]id[/td][td]sequential ID[/td][td]int(10) unsigned[/td][td]NO[/td][td]PRI[/td][td]NULL[/td][td]auto_increment
|
||||||
[/td][/tr]
|
[/td][/tr]
|
||||||
[tr][td]uid[/td][td][/td][td]int(10) unsigned[/td][td]NO[/td][td]MUL[/td][td]NULL[/td][td]
|
[tr][td]uid[/td][td]channel.channel_id of the owner of this data[/td][td]int(10) unsigned[/td][td]NO[/td][td]MUL[/td][td]NULL[/td][td]
|
||||||
[/td][/tr]
|
[/td][/tr]
|
||||||
[tr][td]gid[/td][td][/td][td]int(10) unsigned[/td][td]NO[/td][td]MUL[/td][td]NULL[/td][td]
|
[tr][td]gid[/td][td]groups.id of the associated group[/td][td]int(10) unsigned[/td][td]NO[/td][td]MUL[/td][td]NULL[/td][td]
|
||||||
[/td][/tr]
|
[/td][/tr]
|
||||||
[tr][td]xchan[/td][td][/td][td]char(255)[/td][td]NO[/td][td]MUL[/td][td][/td][td]
|
[tr][td]xchan[/td][td]xchan.xchan_hash of the member assigned to the associated group[/td][td]char(255)[/td][td]NO[/td][td]MUL[/td][td][/td][td]
|
||||||
[/td][/tr]
|
[/td][/tr]
|
||||||
[/table]
|
[/table]
|
||||||
|
|
||||||
|
|||||||
@@ -1,17 +1,17 @@
|
|||||||
[table]
|
[table]
|
||||||
[tr][th]Field[/th][th]Description[/th][th]Type[/th][th]Null[/th][th]Key[/th][th]Default[/th][th]Extra
|
[tr][th]Field[/th][th]Description[/th][th]Type[/th][th]Null[/th][th]Key[/th][th]Default[/th][th]Extra
|
||||||
[/th][/tr]
|
[/th][/tr]
|
||||||
[tr][td]id[/td][td][/td][td]int(10) unsigned[/td][td]NO[/td][td]PRI[/td][td]NULL[/td][td]auto_increment
|
[tr][td]id[/td][td]sequential ID[/td][td]int(10) unsigned[/td][td]NO[/td][td]PRI[/td][td]NULL[/td][td]auto_increment
|
||||||
[/td][/tr]
|
[/td][/tr]
|
||||||
[tr][td]hash[/td][td][/td][td]char(255)[/td][td]NO[/td][td]MUL[/td][td][/td][td]
|
[tr][td]hash[/td][td]unique hash representing this group with the group name appended[/td][td]char(255)[/td][td]NO[/td][td]MUL[/td][td][/td][td]
|
||||||
[/td][/tr]
|
[/td][/tr]
|
||||||
[tr][td]uid[/td][td][/td][td]int(10) unsigned[/td][td]NO[/td][td]MUL[/td][td]NULL[/td][td]
|
[tr][td]uid[/td][td]channel.channel_id owning this data[/td][td]int(10) unsigned[/td][td]NO[/td][td]MUL[/td][td]NULL[/td][td]
|
||||||
[/td][/tr]
|
[/td][/tr]
|
||||||
[tr][td]visible[/td][td][/td][td]tinyint(1)[/td][td]NO[/td][td]MUL[/td][td]0[/td][td]
|
[tr][td]visible[/td][td]1 indicates the member list is not private[/td][td]tinyint(1)[/td][td]NO[/td][td]MUL[/td][td]0[/td][td]
|
||||||
[/td][/tr]
|
[/td][/tr]
|
||||||
[tr][td]deleted[/td][td][/td][td]tinyint(1)[/td][td]NO[/td][td]MUL[/td][td]0[/td][td]
|
[tr][td]deleted[/td][td]1 indicates the group has been deleted[/td][td]tinyint(1)[/td][td]NO[/td][td]MUL[/td][td]0[/td][td]
|
||||||
[/td][/tr]
|
[/td][/tr]
|
||||||
[tr][td]name[/td][td][/td][td]char(255)[/td][td]NO[/td][td][/td][td]NULL[/td][td]
|
[tr][td]name[/td][td]human readable name of group[/td][td]char(255)[/td][td]NO[/td][td][/td][td]NULL[/td][td]
|
||||||
[/td][/tr]
|
[/td][/tr]
|
||||||
[/table]
|
[/table]
|
||||||
|
|
||||||
|
|||||||
@@ -1,15 +1,15 @@
|
|||||||
[table]
|
[table]
|
||||||
[tr][th]Field[/th][th]Description[/th][th]Type[/th][th]Null[/th][th]Key[/th][th]Default[/th][th]Extra
|
[tr][th]Field[/th][th]Description[/th][th]Type[/th][th]Null[/th][th]Key[/th][th]Default[/th][th]Extra
|
||||||
[/th][/tr]
|
[/th][/tr]
|
||||||
[tr][td]id[/td][td][/td][td]int(11)[/td][td]NO[/td][td]PRI[/td][td]NULL[/td][td]auto_increment
|
[tr][td]id[/td][td]sequential ID[/td][td]int(11)[/td][td]NO[/td][td]PRI[/td][td]NULL[/td][td]auto_increment
|
||||||
[/td][/tr]
|
[/td][/tr]
|
||||||
[tr][td]hook[/td][td][/td][td]char(255)[/td][td]NO[/td][td]MUL[/td][td]NULL[/td][td]
|
[tr][td]hook[/td][td]name of hook[/td][td]char(255)[/td][td]NO[/td][td]MUL[/td][td]NULL[/td][td]
|
||||||
[/td][/tr]
|
[/td][/tr]
|
||||||
[tr][td]file[/td][td][/td][td]char(255)[/td][td]NO[/td][td][/td][td]NULL[/td][td]
|
[tr][td]file[/td][td]relative filename of hook handler[/td][td]char(255)[/td][td]NO[/td][td][/td][td]NULL[/td][td]
|
||||||
[/td][/tr]
|
[/td][/tr]
|
||||||
[tr][td]function[/td][td][/td][td]char(255)[/td][td]NO[/td][td][/td][td]NULL[/td][td]
|
[tr][td]function[/td][td]function name of hook handler[/td][td]char(255)[/td][td]NO[/td][td][/td][td]NULL[/td][td]
|
||||||
[/td][/tr]
|
[/td][/tr]
|
||||||
[tr][td]priority[/td][td][/td][td]int(11) unsigned[/td][td]NO[/td][td][/td][td]0[/td][td]
|
[tr][td]priority[/td][td]not yet implemented - can be used to sort conflicts in hook handling by calling handlers in priority order[/td][td]int(11) unsigned[/td][td]NO[/td][td][/td][td]0[/td][td]
|
||||||
[/td][/tr]
|
[/td][/tr]
|
||||||
[/table]
|
[/table]
|
||||||
|
|
||||||
|
|||||||
@@ -1,104 +1,151 @@
|
|||||||
[table]
|
[table]
|
||||||
[tr][th]Field[/th][th]Description[/th][th]Type[/th][th]Null[/th][th]Key[/th][th]Default[/th][th]Extra
|
[tr][th]Field[/th][th]Description[/th][th]Type[/th][th]Null[/th][th]Key[/th][th]Default[/th][th]Extra
|
||||||
[/th][/tr]
|
[/th][/tr]
|
||||||
[tr][td]id[/td][td][/td][td]int(10) unsigned[/td][td]NO[/td][td]PRI[/td][td]NULL[/td][td]auto_increment
|
[tr][td]id[/td][td]Sequential ID[/td][td]int(10) unsigned[/td][td]NO[/td][td]PRI[/td][td]NULL[/td][td]auto_increment
|
||||||
[/td][/tr]
|
[/td][/tr]
|
||||||
[tr][td]mid[/td][td][/td][td]char(255)[/td][td]NO[/td][td]MUL[/td][td][/td][td]
|
[tr][td]mid[/td][td]Message-id - globally unique, there can be several items with the same message-ID in the table as they may have different uid owners[/td][td]char(255)[/td][td]NO[/td][td]MUL[/td][td][/td][td]
|
||||||
[/td][/tr]
|
[/td][/tr]
|
||||||
[tr][td]aid[/td][td][/td][td]int(10) unsigned[/td][td]NO[/td][td]MUL[/td][td]0[/td][td]
|
[tr][td]aid[/td][td]channel_account_id of the channel_id (uid) which owns this copy of the item[/td][td]int(10) unsigned[/td][td]NO[/td][td]MUL[/td][td]0[/td][td]
|
||||||
[/td][/tr]
|
[/td][/tr]
|
||||||
[tr][td]uid[/td][td][/td][td]int(10) unsigned[/td][td]NO[/td][td]MUL[/td][td]0[/td][td]
|
[tr][td]uid[/td][td]channel_id (uid) which owns this copy of the item[/td][td]int(10) unsigned[/td][td]NO[/td][td]MUL[/td][td]0[/td][td]
|
||||||
[/td][/tr]
|
[/td][/tr]
|
||||||
[tr][td]parent[/td][td][/td][td]int(10) unsigned[/td][td]NO[/td][td]MUL[/td][td]0[/td][td]
|
[tr][td]parent[/td][td]item.id of the parent to this item if it is a reply of some form; otherwise this must be set to the id of this item[/td][td]int(10) unsigned[/td][td]NO[/td][td]MUL[/td][td]0[/td][td]
|
||||||
[/td][/tr]
|
[/td][/tr]
|
||||||
[tr][td]parent_mid[/td][td][/td][td]char(255)[/td][td]NO[/td][td]MUL[/td][td][/td][td]
|
[tr][td]parent_mid[/td][td]Globally unique message-id of the parent to this item[/td][td]char(255)[/td][td]NO[/td][td]MUL[/td][td][/td][td]
|
||||||
[/td][/tr]
|
[/td][/tr]
|
||||||
[tr][td]thr_parent[/td][td][/td][td]char(255)[/td][td]NO[/td][td][/td][td][/td][td]
|
[tr][td]thr_parent[/td][td]If the parent of this item is not the top-level item in the conversation, the message-id of the immediate parent; otherwise set to parent_mid[/td][td]char(255)[/td][td]NO[/td][td][/td][td][/td][td]
|
||||||
[/td][/tr]
|
[/td][/tr]
|
||||||
[tr][td]created[/td][td][/td][td]datetime[/td][td]NO[/td][td]MUL[/td][td]0000-00-00 00:00:00[/td][td]
|
[tr][td]created[/td][td]Creation timestamp. If creation is more than ten minutes into the future, set item_delayed to 1; it will automatically be delivered by the poller once the created time has passed[/td][td]datetime[/td][td]NO[/td][td]MUL[/td][td]0000-00-00 00:00:00[/td][td]
|
||||||
[/td][/tr]
|
[/td][/tr]
|
||||||
[tr][td]edited[/td][td][/td][td]datetime[/td][td]NO[/td][td]MUL[/td][td]0000-00-00 00:00:00[/td][td]
|
[tr][td]edited[/td][td]Date of last edit (default is created)[/td][td]datetime[/td][td]NO[/td][td]MUL[/td][td]0000-00-00 00:00:00[/td][td]
|
||||||
[/td][/tr]
|
[/td][/tr]
|
||||||
[tr][td]expires[/td][td][/td][td]datetime[/td][td]NO[/td][td]MUL[/td][td]0000-00-00 00:00:00[/td][td]
|
[tr][td]expires[/td][td]Date this item expires and will be removed[/td][td]datetime[/td][td]NO[/td][td]MUL[/td][td]0000-00-00 00:00:00[/td][td]
|
||||||
[/td][/tr]
|
[/td][/tr]
|
||||||
[tr][td]commented[/td][td][/td][td]datetime[/td][td]NO[/td][td]MUL[/td][td]0000-00-00 00:00:00[/td][td]
|
[tr][td]commented[/td][td]Date of last comment/reply to this item[/td][td]datetime[/td][td]NO[/td][td]MUL[/td][td]0000-00-00 00:00:00[/td][td]
|
||||||
[/td][/tr]
|
[/td][/tr]
|
||||||
[tr][td]received[/td][td][/td][td]datetime[/td][td]NO[/td][td]MUL[/td][td]0000-00-00 00:00:00[/td][td]
|
[tr][td]received[/td][Date the item was received at this sitetd][/td][td]datetime[/td][td]NO[/td][td]MUL[/td][td]0000-00-00 00:00:00[/td][td]
|
||||||
[/td][/tr]
|
[/td][/tr]
|
||||||
[tr][td]changed[/td][td][/td][td]datetime[/td][td]NO[/td][td]MUL[/td][td]0000-00-00 00:00:00[/td][td]
|
[tr][td]changed[/td][td]Date that something in the conversation changed, indicating clients should fetch the conversation again[/td][td]datetime[/td][td]NO[/td][td]MUL[/td][td]0000-00-00 00:00:00[/td][td]
|
||||||
[/td][/tr]
|
[/td][/tr]
|
||||||
[tr][td]comments_closed[/td][td][/td][td]datetime[/td][td]NO[/td][td]MUL[/td][td]0000-00-00 00:00:00[/td][td]
|
[tr][td]comments_closed[/td][td]Date after which no more comments will be accepted[/td][td]datetime[/td][td]NO[/td][td]MUL[/td][td]0000-00-00 00:00:00[/td][td]
|
||||||
[/td][/tr]
|
[/td][/tr]
|
||||||
[tr][td]owner_xchan[/td][td][/td][td]char(255)[/td][td]NO[/td][td]MUL[/td][td][/td][td]
|
[tr][td]owner_xchan[/td][td]xchan_hash of the owner of this conversation (this is who replies are sent to)[/td][td]char(255)[/td][td]NO[/td][td]MUL[/td][td][/td][td]
|
||||||
[/td][/tr]
|
[/td][/tr]
|
||||||
[tr][td]author_xchan[/td][td][/td][td]char(255)[/td][td]NO[/td][td]MUL[/td][td][/td][td]
|
[tr][td]author_xchan[/td][td]xchan_hash of the author of this item[/td][td]char(255)[/td][td]NO[/td][td]MUL[/td][td][/td][td]
|
||||||
[/td][/tr]
|
[/td][/tr]
|
||||||
[tr][td]source_xchan[/td][td][/td][td]char(255)[/td][td]NO[/td][td][/td][td][/td][td]
|
[tr][td]source_xchan[/td][td]xchan_hash of the external source of this item belongs to multiple delivery chains and comments need to be uplinked[/td][td]char(255)[/td][td]NO[/td][td][/td][td][/td][td]
|
||||||
[/td][/tr]
|
[/td][/tr]
|
||||||
[tr][td]mimetype[/td][td][/td][td]char(255)[/td][td]NO[/td][td]MUL[/td][td][/td][td]
|
[tr][td]mimetype[/td][td]mime type of the content body[/td][td]char(255)[/td][td]NO[/td][td]MUL[/td][td][/td][td]
|
||||||
[/td][/tr]
|
[/td][/tr]
|
||||||
[tr][td]title[/td][td][/td][td]text[/td][td]NO[/td][td]MUL[/td][td]NULL[/td][td]
|
[tr][td]title[/td][td]item title[/td][td]text[/td][td]NO[/td][td]MUL[/td][td]NULL[/td][td]
|
||||||
[/td][/tr]
|
[/td][/tr]
|
||||||
[tr][td]body[/td][td][/td][td]mediumtext[/td][td]NO[/td][td]MUL[/td][td]NULL[/td][td]
|
[tr][td]body[/td][td]item body content[/td][td]mediumtext[/td][td]NO[/td][td]MUL[/td][td]NULL[/td][td]
|
||||||
[/td][/tr]
|
[/td][/tr]
|
||||||
[tr][td]app[/td][td][/td][td]char(255)[/td][td]NO[/td][td][/td][td][/td][td]
|
[tr][td]app[/td][td]application which generated this item[/td][td]char(255)[/td][td]NO[/td][td][/td][td][/td][td]
|
||||||
[/td][/tr]
|
[/td][/tr]
|
||||||
[tr][td]lang[/td][td][/td][td]char(64)[/td][td]NO[/td][td][/td][td][/td][td]
|
[tr][td]lang[/td][td]auto-detected language[/td][td]char(64)[/td][td]NO[/td][td][/td][td][/td][td]
|
||||||
[/td][/tr]
|
[/td][/tr]
|
||||||
[tr][td]revision[/td][td][/td][td]int(10) unsigned[/td][td]NO[/td][td]MUL[/td][td]0[/td][td]
|
[tr][td]revision[/td][td]future use, version control[/td][td]int(10) unsigned[/td][td]NO[/td][td]MUL[/td][td]0[/td][td]
|
||||||
[/td][/tr]
|
[/td][/tr]
|
||||||
[tr][td]verb[/td][td][/td][td]char(255)[/td][td]NO[/td][td]MUL[/td][td][/td][td]
|
[tr][td]verb[/td][td]ActivityStreams verb (old style URI)[/td][td]char(255)[/td][td]NO[/td][td]MUL[/td][td][/td][td]
|
||||||
[/td][/tr]
|
[/td][/tr]
|
||||||
[tr][td]obj_type[/td][td][/td][td]char(255)[/td][td]NO[/td][td][/td][td][/td][td]
|
[tr][td]obj_type[/td][td]ActivityStreams object type (old style URI)[/td][td]char(255)[/td][td]NO[/td][td][/td][td][/td][td]
|
||||||
[/td][/tr]
|
[/td][/tr]
|
||||||
[tr][td]object[/td][td][/td][td]text[/td][td]NO[/td][td][/td][td]NULL[/td][td]
|
[tr][td]object[/td][td]JSON encoded object structure unless it is an implied object (normal post)[/td][td]text[/td][td]NO[/td][td][/td][td]NULL[/td][td]
|
||||||
[/td][/tr]
|
[/td][/tr]
|
||||||
[tr][td]tgt_type[/td][td][/td][td]char(255)[/td][td]NO[/td][td][/td][td][/td][td]
|
[tr][td]tgt_type[/td][td]ActivityStreams target type if applicable (URI)[/td][td]char(255)[/td][td]NO[/td][td][/td][td][/td][td]
|
||||||
[/td][/tr]
|
[/td][/tr]
|
||||||
[tr][td]target[/td][td][/td][td]text[/td][td]NO[/td][td][/td][td]NULL[/td][td]
|
[tr][td]target[/td][td]JSON encoded target structure if used[/td][td]text[/td][td]NO[/td][td][/td][td]NULL[/td][td]
|
||||||
[/td][/tr]
|
[/td][/tr]
|
||||||
[tr][td]layout_mid[/td][td][/td][td]char(255)[/td][td]NO[/td][td]MUL[/td][td][/td][td]
|
[tr][td]layout_mid[/td][td]For webpages, which layout (mid or message_id) to use when displaying this page[/td][td]char(255)[/td][td]NO[/td][td]MUL[/td][td][/td][td]
|
||||||
[/td][/tr]
|
[/td][/tr]
|
||||||
[tr][td]postopts[/td][td][/td][td]text[/td][td]NO[/td][td][/td][td]NULL[/td][td]
|
[tr][td]postopts[/td][td]External post connectors add their network name to this comma-separated string to identify that they should be delivered to these networks during delivery[/td][td]text[/td][td]NO[/td][td][/td][td]NULL[/td][td]
|
||||||
[/td][/tr]
|
[/td][/tr]
|
||||||
[tr][td]route[/td][td][/td][td]text[/td][td]NO[/td][td][/td][td]NULL[/td][td]
|
[tr][td]route[/td][td]comma separated xchan list of xchans where this message was routed on its way to this destination, used for route loop discovery and rejection of comments which arrived by alternate routes and may have different permissions[/td][td]text[/td][td]NO[/td][td][/td][td]NULL[/td][td]
|
||||||
[/td][/tr]
|
[/td][/tr]
|
||||||
[tr][td]llink[/td][td][/td][td]char(255)[/td][td]NO[/td][td]MUL[/td][td][/td][td]
|
[tr][td]llink[/td][td]URL of a displayable copy of this post/conversation on this site[/td][td]char(255)[/td][td]NO[/td][td]MUL[/td][td][/td][td]
|
||||||
[/td][/tr]
|
[/td][/tr]
|
||||||
[tr][td]plink[/td][td][/td][td]char(255)[/td][td]NO[/td][td][/td][td][/td][td]
|
[tr][td]plink[/td][td]permalink or URL toa displayable copy of the message at its source[/td][td]char(255)[/td][td]NO[/td][td][/td][td][/td][td]
|
||||||
[/td][/tr]
|
[/td][/tr]
|
||||||
[tr][td]resource_id[/td][td][/td][td]char(255)[/td][td]NO[/td][td][/td][td][/td][td]
|
[tr][td]resource_id[/td][td]Used to link other tables to items, it identifies the linked resource and if set must also set resource_type[/td][td]char(255)[/td][td]NO[/td][td][/td][td][/td][td]
|
||||||
[/td][/tr]
|
[/td][/tr]
|
||||||
[tr][td]resource_type[/td][td][/td][td]char(16)[/td][td]NO[/td][td]MUL[/td][td][/td][td]
|
[tr][td]resource_type[/td][td]default none, if a linked resource this should be the name of the resource type such as "photo" or "event"[/td][td]char(16)[/td][td]NO[/td][td]MUL[/td][td][/td][td]
|
||||||
[/td][/tr]
|
[/td][/tr]
|
||||||
[tr][td]attach[/td][td][/td][td]mediumtext[/td][td]NO[/td][td][/td][td]NULL[/td][td]
|
[tr][td]attach[/td][td]JSON structure representing attachments to this item[/td][td]mediumtext[/td][td]NO[/td][td][/td][td]NULL[/td][td]
|
||||||
[/td][/tr]
|
[/td][/tr]
|
||||||
[tr][td]sig[/td][td][/td][td]text[/td][td]NO[/td][td][/td][td]NULL[/td][td]
|
[tr][td]sig[/td][td]RSA signature of the item body by the original author if the private key is available[/td][td]text[/td][td]NO[/td][td][/td][td]NULL[/td][td]
|
||||||
[/td][/tr]
|
[/td][/tr]
|
||||||
[tr][td]diaspora_meta[/td][td][/td][td]mediumtext[/td][td]NO[/td][td][/td][td]NULL[/td][td]
|
[tr][td]diaspora_meta[/td][td]Used to store Diaspora comment signatures with their weird requirements[/td][td]mediumtext[/td][td]NO[/td][td][/td][td]NULL[/td][td]
|
||||||
[/td][/tr]
|
[/td][/tr]
|
||||||
[tr][td]location[/td][td][/td][td]char(255)[/td][td]NO[/td][td][/td][td][/td][td]
|
[tr][td]location[/td][td]text location where this item originated[/td][td]char(255)[/td][td]NO[/td][td][/td][td][/td][td]
|
||||||
[/td][/tr]
|
[/td][/tr]
|
||||||
[tr][td]coord[/td][td][/td][td]char(255)[/td][td]NO[/td][td][/td][td][/td][td]
|
[tr][td]coord[/td][td] longitude/latitude pair representing location where this item originated[/td][td]char(255)[/td][td]NO[/td][td][/td][td][/td][td]
|
||||||
[/td][/tr]
|
[/td][/tr]
|
||||||
[tr][td]public_policy[/td][td][/td][td]char(255)[/td][td]NO[/td][td]MUL[/td][td][/td][td]
|
[tr][td]public_policy[/td][td]If the author has specified restrictions (this network, this site) etc. for distribution, the corresponding policy text is present here and item_private = 1[/td][td]char(255)[/td][td]NO[/td][td]MUL[/td][td][/td][td]
|
||||||
[/td][/tr]
|
[/td][/tr]
|
||||||
[tr][td]comment_policy[/td][td][/td][td]char(255)[/td][td]NO[/td][td]MUL[/td][td][/td][td]
|
[tr][td]comment_policy[/td][td]If the author has specified comment restrictions (thei network, this site, etc.) the corresponding policy text is present here[/td][td]char(255)[/td][td]NO[/td][td]MUL[/td][td][/td][td]
|
||||||
[/td][/tr]
|
[/td][/tr]
|
||||||
[tr][td]allow_cid[/td][td][/td][td]mediumtext[/td][td]NO[/td][td]MUL[/td][td]NULL[/td][td]
|
[tr][td]allow_cid[/td][td]Access Control - list of allowed xchans '<xchan1><xchan2>...'[/td][td]mediumtext[/td][td]NO[/td][td]MUL[/td][td]NULL[/td][td]
|
||||||
[/td][/tr]
|
[/td][/tr]
|
||||||
[tr][td]allow_gid[/td][td][/td][td]mediumtext[/td][td]NO[/td][td]MUL[/td][td]NULL[/td][td]
|
[tr][td]allow_gid[/td]Access Control - list of allowed group hashes, see allow_cid[td][/td][td]mediumtext[/td][td]NO[/td][td]MUL[/td][td]NULL[/td][td]
|
||||||
[/td][/tr]
|
[/td][/tr]
|
||||||
[tr][td]deny_cid[/td][td][/td][td]mediumtext[/td][td]NO[/td][td]MUL[/td][td]NULL[/td][td]
|
[tr][td]deny_cid[/td][td]Access Control - list of denied xchans[/td][td]mediumtext[/td][td]NO[/td][td]MUL[/td][td]NULL[/td][td]
|
||||||
[/td][/tr]
|
[/td][/tr]
|
||||||
[tr][td]deny_gid[/td][td][/td][td]mediumtext[/td][td]NO[/td][td]MUL[/td][td]NULL[/td][td]
|
[tr][td]deny_gid[/td][td]Access Control - list of denied groups[/td][td]mediumtext[/td][td]NO[/td][td]MUL[/td][td]NULL[/td][td]
|
||||||
[/td][/tr]
|
[/td][/tr]
|
||||||
[tr][td]item_restrict[/td][td][/td][td]int(11)[/td][td]NO[/td][td]MUL[/td][td]0[/td][td]
|
[tr][td]item_restrict[/td]no longer used[td][/td][td]int(11)[/td][td]NO[/td][td]MUL[/td][td]0[/td][td]
|
||||||
[/td][/tr]
|
[/td][/tr]
|
||||||
[tr][td]item_flags[/td][td][/td][td]int(11)[/td][td]NO[/td][td]MUL[/td][td]0[/td][td]
|
[tr][td]item_flags[/td][td]no longer used[/td][td]int(11)[/td][td]NO[/td][td]MUL[/td][td]0[/td][td]
|
||||||
[/td][/tr]
|
[/td][/tr]
|
||||||
[tr][td]item_private[/td][td][/td][td]tinyint(4)[/td][td]NO[/td][td]MUL[/td][td]0[/td][td]
|
[tr][td]item_private[/td][td]distribution is restricted[/td][td]tinyint(4)[/td][td]NO[/td][td]MUL[/td][td]0[/td][td]
|
||||||
[/td][/tr]
|
[/td][/tr]
|
||||||
|
[tr][td]item_origin[/td][td]item originated at this site[/td][td]tinyint(4)[/td][td]NO[/td][td]MUL[/td][td]0[/td][td]
|
||||||
|
[/td][/tr]
|
||||||
|
[tr][td]item_unseen[/td][td]item has not been seen[/td][td]tinyint(4)[/td][td]NO[/td][td]MUL[/td][td]0[/td][td]
|
||||||
|
[/td][/tr]
|
||||||
|
[tr][td]item_starred[/td][td]item has been favourited[/td][td]tinyint(4)[/td][td]NO[/td][td]MUL[/td][td]0[/td][td]
|
||||||
|
[/td][/tr]
|
||||||
|
[tr][td]item_uplink[/td][td]This item is part of a multiple delivery chain and must be uplinked to the original sender (source_xchan)[/td][td]tinyint(4)[/td][td]NO[/td][td]MUL[/td][td]0[/td][td]
|
||||||
|
[/td][/tr]
|
||||||
|
[tr][td]item_consensus[/td][td]This item allows voting tools[/td][td]tinyint(4)[/td][td]NO[/td][td]MUL[/td][td]0[/td][td]
|
||||||
|
[/td][/tr]
|
||||||
|
[tr][td]item_wall[/td][td]This item was posted to the wall of uid[/td][td]tinyint(4)[/td][td]NO[/td][td]MUL[/td][td]0[/td][td]
|
||||||
|
[/td][/tr]
|
||||||
|
[tr][td]item_thread_top[/td][td]parent = id, this is the top post in a conversation [/td][td]tinyint(4)[/td][td]NO[/td][td]MUL[/td][td]0[/td][td]
|
||||||
|
[/td][/tr]
|
||||||
|
[tr][td]item_notshown[/td][td][/td][td]tinyint(4)[/td][td]NO[/td][td]MUL[/td][td]0[/td][td]
|
||||||
|
[/td][/tr]
|
||||||
|
[tr][td]item_nsfw[/td][td][/td][td]tinyint(4)[/td][td]NO[/td][td]MUL[/td][td]0[/td][td]
|
||||||
|
[/td][/tr]
|
||||||
|
[tr][td]item_relay[/td][td][/td][td]tinyint(4)[/td][td]NO[/td][td]MUL[/td][td]0[/td][td]
|
||||||
|
[/td][/tr]
|
||||||
|
[tr][td]item_mentionsme[/td][td]The owner of this item was mentioned in it[/td][td]tinyint(4)[/td][td]NO[/td][td]MUL[/td][td]0[/td][td]
|
||||||
|
[/td][/tr]
|
||||||
|
[tr][td]item_nocomment[/td][td]if 1, no comments are allowed[/td][td]tinyint(4)[/td][td]NO[/td][td]MUL[/td][td]0[/td][td]
|
||||||
|
[/td][/tr]
|
||||||
|
[tr][td]item_obscured[/td][td]no longer used[/td][td]tinyint(4)[/td][td]NO[/td][td]MUL[/td][td]0[/td][td]
|
||||||
|
[/td][/tr]
|
||||||
|
[tr][td]item_verified[/td][td]the signature has been verified on this site[/td][td]tinyint(4)[/td][td]NO[/td][td]MUL[/td][td]0[/td][td]
|
||||||
|
[/td][/tr]
|
||||||
|
[tr][td]item_retained[/td][td][/td][td]tinyint(4)[/td][td]NO[/td][td]MUL[/td][td]0[/td][td]
|
||||||
|
[/td][/tr]
|
||||||
|
[tr][td]item_rss[/td][td]item originated in a feed[/td][td]tinyint(4)[/td][td]NO[/td][td]MUL[/td][td]0[/td][td]
|
||||||
|
[/td][/tr]
|
||||||
|
[tr][td]item_deleted[/td][td]item has been deleted[/td][td]tinyint(4)[/td][td]NO[/td][td]MUL[/td][td]0[/td][td]
|
||||||
|
[/td][/tr]
|
||||||
|
[tr][td]item_type[/td][td]used to identify webpage and design element types, 0 is a normal conversation item[/td][td]tinyint(4)[/td][td]NO[/td][td]MUL[/td][td]0[/td][td]
|
||||||
|
[/td][/tr]
|
||||||
|
[tr][td]item_hidden[/td][td]0 or 1 if item is not to be displayed[/td][td]tinyint(4)[/td][td]NO[/td][td]MUL[/td][td]0[/td][td]
|
||||||
|
[/td][/tr]
|
||||||
|
[tr][td]item_unpublished[/td][td][/td][td]tinyint(4)[/td][td]NO[/td][td]MUL[/td][td]0[/td][td]
|
||||||
|
[/td][/tr]
|
||||||
|
[tr][td]item_delayed[/td][td]item is posted in the future[/td][td]tinyint(4)[/td][td]NO[/td][td]MUL[/td][td]0[/td][td]
|
||||||
|
[/td][/tr]
|
||||||
|
[tr][td]item_pending_remove[/td][td]item is in the process of being removed[/td][td]tinyint(4)[/td][td]NO[/td][td]MUL[/td][td]0[/td][td]
|
||||||
|
[/td][/tr]
|
||||||
|
[tr][td]item_blocked[/td][td][/td][td]tinyint(4)[/td][td]NO[/td][td]MUL[/td][td]0[/td][td]
|
||||||
|
[/td][/tr]
|
||||||
|
|
||||||
[/table]
|
[/table]
|
||||||
|
|
||||||
Return to [zrl=[baseurl]/help/database]database documentation[/zrl]
|
Return to [zrl=[baseurl]/help/database]database documentation[/zrl]
|
||||||
@@ -1,15 +1,15 @@
|
|||||||
[table]
|
[table]
|
||||||
[tr][th]Field[/th][th]Description[/th][th]Type[/th][th]Null[/th][th]Key[/th][th]Default[/th][th]Extra
|
[tr][th]Field[/th][th]Description[/th][th]Type[/th][th]Null[/th][th]Key[/th][th]Default[/th][th]Extra
|
||||||
[/th][/tr]
|
[/th][/tr]
|
||||||
[tr][td]id[/td][td][/td][td]int(10) unsigned[/td][td]NO[/td][td]PRI[/td][td]NULL[/td][td]auto_increment
|
[tr][td]id[/td][td]sequential ID[/td][td]int(10) unsigned[/td][td]NO[/td][td]PRI[/td][td]NULL[/td][td]auto_increment
|
||||||
[/td][/tr]
|
[/td][/tr]
|
||||||
[tr][td]iid[/td][td][/td][td]int(11)[/td][td]NO[/td][td]MUL[/td][td]NULL[/td][td]
|
[tr][td]iid[/td][td]item.id of the referenced item[/td][td]int(11)[/td][td]NO[/td][td]MUL[/td][td]NULL[/td][td]
|
||||||
[/td][/tr]
|
[/td][/tr]
|
||||||
[tr][td]uid[/td][td][/td][td]int(11)[/td][td]NO[/td][td]MUL[/td][td]NULL[/td][td]
|
[tr][td]uid[/td][td]channel.channel_id of the owner of this data[/td][td]int(11)[/td][td]NO[/td][td]MUL[/td][td]NULL[/td][td]
|
||||||
[/td][/tr]
|
[/td][/tr]
|
||||||
[tr][td]sid[/td][td][/td][td]char(255)[/td][td]NO[/td][td]MUL[/td][td]NULL[/td][td]
|
[tr][td]sid[/td][td]an additional identifier to attach or link to the referenced item (often used to store a message_id from another system in order to suppress duplicates)[/td][td]char(255)[/td][td]NO[/td][td]MUL[/td][td]NULL[/td][td]
|
||||||
[/td][/tr]
|
[/td][/tr]
|
||||||
[tr][td]service[/td][td][/td][td]char(255)[/td][td]NO[/td][td]MUL[/td][td]NULL[/td][td]
|
[tr][td]service[/td][td]the name or description of the service which generated this identifier[/td][td]char(255)[/td][td]NO[/td][td]MUL[/td][td]NULL[/td][td]
|
||||||
[/td][/tr]
|
[/td][/tr]
|
||||||
[/table]
|
[/table]
|
||||||
|
|
||||||
|
|||||||
@@ -1,12 +0,0 @@
|
|||||||
[table]
|
|
||||||
[tr][th]Field[/th][th]Description[/th][th]Type[/th][th]Null[/th][th]Key[/th][th]Default[/th][th]Extra
|
|
||||||
[/th][/tr]
|
|
||||||
[tr][td]id[/td][td][/td][td]int(11)[/td][td]NO[/td][td]PRI[/td][td]NULL[/td][td]auto_increment
|
|
||||||
[/td][/tr]
|
|
||||||
[tr][td]uid[/td][td][/td][td]int(11)[/td][td]NO[/td][td]MUL[/td][td]NULL[/td][td]
|
|
||||||
[/td][/tr]
|
|
||||||
[tr][td]xchan[/td][td][/td][td]char(255)[/td][td]NO[/td][td]MUL[/td][td][/td][td]
|
|
||||||
[/td][/tr]
|
|
||||||
[/table]
|
|
||||||
|
|
||||||
Return to [zrl=[baseurl]/help/database]database documentation[/zrl]
|
|
||||||
@@ -1,27 +1,27 @@
|
|||||||
[table]
|
[table]
|
||||||
[tr][th]Field[/th][th]Description[/th][th]Type[/th][th]Null[/th][th]Key[/th][th]Default[/th][th]Extra
|
[tr][th]Field[/th][th]Description[/th][th]Type[/th][th]Null[/th][th]Key[/th][th]Default[/th][th]Extra
|
||||||
[/th][/tr]
|
[/th][/tr]
|
||||||
[tr][td]tid[/td][td][/td][td]int(10) unsigned[/td][td]NO[/td][td]PRI[/td][td]NULL[/td][td]auto_increment
|
[tr][td]tid[/td][td]sequential index[/td][td]int(10) unsigned[/td][td]NO[/td][td]PRI[/td][td]NULL[/td][td]auto_increment
|
||||||
[/td][/tr]
|
[/td][/tr]
|
||||||
[tr][td]aid[/td][td][/td][td]int(10) unsigned[/td][td]NO[/td][td]MUL[/td][td]0[/td][td]
|
[tr][td]aid[/td][td]channel_account_id of the controlling channel[/td][td]int(10) unsigned[/td][td]NO[/td][td]MUL[/td][td]0[/td][td]
|
||||||
[/td][/tr]
|
[/td][/tr]
|
||||||
[tr][td]uid[/td][td][/td][td]int(10) unsigned[/td][td]NO[/td][td]MUL[/td][td]0[/td][td]
|
[tr][td]uid[/td][td]channel_id of the controlling channel[/td][td]int(10) unsigned[/td][td]NO[/td][td]MUL[/td][td]0[/td][td]
|
||||||
[/td][/tr]
|
[/td][/tr]
|
||||||
[tr][td]oid[/td][td][/td][td]int(10) unsigned[/td][td]NO[/td][td]MUL[/td][td]NULL[/td][td]
|
[tr][td]oid[/td][td]DB index of linked thing[/td][td]int(10) unsigned[/td][td]NO[/td][td]MUL[/td][td]NULL[/td][td]
|
||||||
[/td][/tr]
|
[/td][/tr]
|
||||||
[tr][td]otype[/td][td][/td][td]tinyint(3) unsigned[/td][td]NO[/td][td]MUL[/td][td]NULL[/td][td]
|
[tr][td]otype[/td][td]type of linked thing[/td][td]tinyint(3) unsigned[/td][td]NO[/td][td]MUL[/td][td]NULL[/td][td]
|
||||||
[/td][/tr]
|
[/td][/tr]
|
||||||
[tr][td]type[/td][td][/td][td]tinyint(3) unsigned[/td][td]NO[/td][td]MUL[/td][td]NULL[/td][td]
|
[tr][td]type[/td][td]taxonomy type (See Tag/term types in boot.php)[/td][td]tinyint(3) unsigned[/td][td]NO[/td][td]MUL[/td][td]NULL[/td][td]
|
||||||
[/td][/tr]
|
[/td][/tr]
|
||||||
[tr][td]term[/td][td][/td][td]char(255)[/td][td]NO[/td][td]MUL[/td][td]NULL[/td][td]
|
[tr][td]term[/td][td]the actual taxonomy term[/td][td]char(255)[/td][td]NO[/td][td]MUL[/td][td]NULL[/td][td]
|
||||||
[/td][/tr]
|
[/td][/tr]
|
||||||
[tr][td]url[/td][td][/td][td]char(255)[/td][td]NO[/td][td][/td][td]NULL[/td][td]
|
[tr][td]url[/td]relevant link (for tags and mentions, a link to the associated resource)[td][/td][td]char(255)[/td][td]NO[/td][td][/td][td]NULL[/td][td]
|
||||||
[/td][/tr]
|
[/td][/tr]
|
||||||
[tr][td]imgurl[/td][td][/td][td]char(255)[/td][td]NO[/td][td]MUL[/td][td]NULL[/td][td]
|
[tr][td]imgurl[/td][td]rarely used - an image associated with this taxonomy term[/td][td]char(255)[/td][td]NO[/td][td]MUL[/td][td]NULL[/td][td]
|
||||||
[/td][/tr]
|
[/td][/tr]
|
||||||
[tr][td]term_hash[/td][td][/td][td]char(255)[/td][td]NO[/td][td]MUL[/td][td][/td][td]
|
[tr][td]term_hash[/td][td]unique hash for this entry[/td][td]char(255)[/td][td]NO[/td][td]MUL[/td][td][/td][td]
|
||||||
[/td][/tr]
|
[/td][/tr]
|
||||||
[tr][td]parent_hash[/td][td][/td][td]char(255)[/td][td]NO[/td][td]MUL[/td][td][/td][td]
|
[tr][td]parent_hash[/td][td]for hierarchical taxonomies, the hash of the relevant parent[/td][td]char(255)[/td][td]NO[/td][td]MUL[/td][td][/td][td]
|
||||||
[/td][/tr]
|
[/td][/tr]
|
||||||
[/table]
|
[/table]
|
||||||
|
|
||||||
|
|||||||
@@ -1,44 +1,59 @@
|
|||||||
[table]
|
[table]
|
||||||
[tr][th]Field[/th][th]Description[/th][th]Type[/th][th]Null[/th][th]Key[/th][th]Default[/th][th]Extra
|
[tr][th]Field[/th][th]Description[/th][th]Type[/th][th]Null[/th][th]Key[/th][th]Default[/th][th]Extra
|
||||||
[/th][/tr]
|
[/th][/tr]
|
||||||
[tr][td]xchan_hash[/td][td][/td][td]char(255)[/td][td]NO[/td][td]PRI[/td][td]NULL[/td][td]
|
[tr][td]xchan_hash[/td][td]calculated hash of this extended channel[/td][td]char(255)[/td][td]NO[/td][td]PRI[/td][td]NULL[/td][td]
|
||||||
[/td][/tr]
|
[/td][/tr]
|
||||||
[tr][td]xchan_guid[/td][td][/td][td]char(255)[/td][td]NO[/td][td]MUL[/td][td][/td][td]
|
[tr][td]xchan_guid[/td][td]channel_guid of this extended channel[/td][td]char(255)[/td][td]NO[/td][td]MUL[/td][td][/td][td]
|
||||||
[/td][/tr]
|
[/td][/tr]
|
||||||
[tr][td]xchan_guid_sig[/td][td][/td][td]text[/td][td]NO[/td][td][/td][td]NULL[/td][td]
|
[tr][td]xchan_guid_sig[/td][td]base64url encoded signature of the guid[/td][td]text[/td][td]NO[/td][td][/td][td]NULL[/td][td]
|
||||||
[/td][/tr]
|
[/td][/tr]
|
||||||
[tr][td]xchan_pubkey[/td][td][/td][td]text[/td][td]NO[/td][td][/td][td]NULL[/td][td]
|
[tr][td]xchan_pubkey[/td][td]public key for verifying signed data and assertions[/td][td]text[/td][td]NO[/td][td][/td][td]NULL[/td][td]
|
||||||
[/td][/tr]
|
[/td][/tr]
|
||||||
[tr][td]xchan_photo_mimetype[/td][td][/td][td]char(32)[/td][td]NO[/td][td][/td][td]image/jpeg[/td][td]
|
[tr][td]xchan_photo_mimetype[/td][td]mimetype of the profile photo[/td][td]char(32)[/td][td]NO[/td][td][/td][td]image/jpeg[/td][td]
|
||||||
[/td][/tr]
|
[/td][/tr]
|
||||||
[tr][td]xchan_photo_l[/td][td][/td][td]char(255)[/td][td]NO[/td][td][/td][td][/td][td]
|
[tr][td]xchan_photo_l[/td][td]photo url 300px[/td][td]char(255)[/td][td]NO[/td][td][/td][td][/td][td]
|
||||||
[/td][/tr]
|
[/td][/tr]
|
||||||
[tr][td]xchan_photo_m[/td][td][/td][td]char(255)[/td][td]NO[/td][td][/td][td][/td][td]
|
[tr][td]xchan_photo_m[/td][td]photo url 80 px[/td][td]char(255)[/td][td]NO[/td][td][/td][td][/td][td]
|
||||||
[/td][/tr]
|
[/td][/tr]
|
||||||
[tr][td]xchan_photo_s[/td][td][/td][td]char(255)[/td][td]NO[/td][td][/td][td][/td][td]
|
[tr][td]xchan_photo_s[/td][td]photo url 48 px[/td][td]char(255)[/td][td]NO[/td][td][/td][td][/td][td]
|
||||||
[/td][/tr]
|
[/td][/tr]
|
||||||
[tr][td]xchan_addr[/td][td][/td][td]char(255)[/td][td]NO[/td][td]MUL[/td][td][/td][td]
|
[tr][td]xchan_addr[/td][td]user@host[/td][td]char(255)[/td][td]NO[/td][td]MUL[/td][td][/td][td]
|
||||||
[/td][/tr]
|
[/td][/tr]
|
||||||
[tr][td]xchan_url[/td][td][/td][td]char(255)[/td][td]NO[/td][td]MUL[/td][td][/td][td]
|
[tr][td]xchan_url[/td][td]url of channel page on primary hub location[/td][td]char(255)[/td][td]NO[/td][td]MUL[/td][td][/td][td]
|
||||||
[/td][/tr]
|
[/td][/tr]
|
||||||
[tr][td]xchan_connurl[/td][td][/td][td]char(255)[/td][td]NO[/td][td]MUL[/td][td][/td][td]
|
[tr][td]xchan_connurl[/td]poco url[td][/td][td]char(255)[/td][td]NO[/td][td]MUL[/td][td][/td][td]
|
||||||
[/td][/tr]
|
[/td][/tr]
|
||||||
[tr][td]xchan_follow[/td][td][/td][td]char(255)[/td][td]NO[/td][td]MUL[/td][td][/td][td]
|
[tr][td]xchan_follow[/td]url template for following %s[td][/td][td]char(255)[/td][td]NO[/td][td]MUL[/td][td][/td][td]
|
||||||
[/td][/tr]
|
[/td][/tr]
|
||||||
[tr][td]xchan_connpage[/td][td][/td][td]char(255)[/td][td]NO[/td][td][/td][td][/td][td]
|
[tr][td]xchan_connpage[/td][td]for premium channels url of channel to display when connecting[/td][td]char(255)[/td][td]NO[/td][td][/td][td][/td][td]
|
||||||
[/td][/tr]
|
[/td][/tr]
|
||||||
[tr][td]xchan_name[/td][td][/td][td]char(255)[/td][td]NO[/td][td]MUL[/td][td][/td][td]
|
[tr][td]xchan_name[/td][td]human readabl name of channel[/td][td]char(255)[/td][td]NO[/td][td]MUL[/td][td][/td][td]
|
||||||
[/td][/tr]
|
[/td][/tr]
|
||||||
[tr][td]xchan_network[/td][td][/td][td]char(255)[/td][td]NO[/td][td]MUL[/td][td][/td][td]
|
[tr][td]xchan_network[/td][td]network of channel for instance 'zot', 'diaspora', 'unknown'[/td][td]char(255)[/td][td]NO[/td][td]MUL[/td][td][/td][td]
|
||||||
[/td][/tr]
|
[/td][/tr]
|
||||||
[tr][td]xchan_instance_url[/td][td][/td][td]char(255)[/td][td]NO[/td][td]MUL[/td][td][/td][td]
|
[tr][td]xchan_instance_url[/td][td]no longer used[/td][td]char(255)[/td][td]NO[/td][td]MUL[/td][td][/td][td]
|
||||||
[/td][/tr]
|
[/td][/tr]
|
||||||
[tr][td]xchan_flags[/td][td][/td][td]int(10) unsigned[/td][td]NO[/td][td]MUL[/td][td]0[/td][td]
|
[tr][td]xchan_flags[/td][td]no longer used[/td][td]int(10) unsigned[/td][td]NO[/td][td]MUL[/td][td]0[/td][td]
|
||||||
[/td][/tr]
|
[/td][/tr]
|
||||||
[tr][td]xchan_photo_date[/td][td][/td][td]datetime[/td][td]NO[/td][td][/td][td]0000-00-00 00:00:00[/td][td]
|
[tr][td]xchan_photo_date[/td][td]timestamp of last photo change in GMT[/td][td]datetime[/td][td]NO[/td][td][/td][td]0000-00-00 00:00:00[/td][td]
|
||||||
[/td][/tr]
|
[/td][/tr]
|
||||||
[tr][td]xchan_name_date[/td][td][/td][td]datetime[/td][td]NO[/td][td][/td][td]0000-00-00 00:00:00[/td][td]
|
[tr][td]xchan_name_date[/td][td]timestamp of last name change in GMT[/td][td]datetime[/td][td]NO[/td][td][/td][td]0000-00-00 00:00:00[/td][td]
|
||||||
[/td][/tr]
|
[/td][/tr]
|
||||||
|
[tr][td]xchan_hidden[/td][td]flag - channel is hidden[/td][td]int(10) unsigned[/td][td]NO[/td][td]MUL[/td][td]0[/td][td]
|
||||||
|
[/td][/tr]
|
||||||
|
[tr][td]xchan_orphan[/td][td]flag - channel has no known hubloc locations[/td][td]int(10) unsigned[/td][td]NO[/td][td]MUL[/td][td]0[/td][td]
|
||||||
|
[/td][/tr]
|
||||||
|
[tr][td]xchan_censored[/td][td]flag - channel has been censored[/td][td]int(10) unsigned[/td][td]NO[/td][td]MUL[/td][td]0[/td][td]
|
||||||
|
[/td][/tr]
|
||||||
|
[tr][td]xchan_selfcensored[/td][td]flag - channel is self censored (adult or nsfw)[/td][td]int(10) unsigned[/td][td]NO[/td][td]MUL[/td][td]0[/td][td]
|
||||||
|
[/td][/tr]
|
||||||
|
[tr][td]xchan_system[/td][td]flag - this represents a system channel[/td][td]int(10) unsigned[/td][td]NO[/td][td]MUL[/td][td]0[/td][td]
|
||||||
|
[/td][/tr]
|
||||||
|
[tr][td]xchan_pubforum[/td][td]flag - channel is a public forum[/td][td]int(10) unsigned[/td][td]NO[/td][td]MUL[/td][td]0[/td][td]
|
||||||
|
[/td][/tr]
|
||||||
|
[tr][td]xchan_deleted[/td][td]flag - channel was deleted[/td][td]int(10) unsigned[/td][td]NO[/td][td]MUL[/td][td]0[/td][td]
|
||||||
|
[/td][/tr]
|
||||||
|
|
||||||
[/table]
|
[/table]
|
||||||
|
|
||||||
Return to [zrl=[baseurl]/help/database]database documentation[/zrl]
|
Return to [zrl=[baseurl]/help/database]database documentation[/zrl]
|
||||||
@@ -1,11 +1,12 @@
|
|||||||
|
xign - holds xchan information for channels that have been ignored in 'friend suggestions'
|
||||||
[table]
|
[table]
|
||||||
[tr][th]Field[/th][th]Description[/th][th]Type[/th][th]Null[/th][th]Key[/th][th]Default[/th][th]Extra
|
[tr][th]Field[/th][th]Description[/th][th]Type[/th][th]Null[/th][th]Key[/th][th]Default[/th][th]Extra
|
||||||
[/th][/tr]
|
[/th][/tr]
|
||||||
[tr][td]id[/td][td][/td][td]int(10) unsigned[/td][td]NO[/td][td]PRI[/td][td]NULL[/td][td]auto_increment
|
[tr][td]id[/td][td]sequential ID[/td][td]int(10) unsigned[/td][td]NO[/td][td]PRI[/td][td]NULL[/td][td]auto_increment
|
||||||
[/td][/tr]
|
[/td][/tr]
|
||||||
[tr][td]uid[/td][td][/td][td]int(11)[/td][td]NO[/td][td]MUL[/td][td]0[/td][td]
|
[tr][td]uid[/td][td]local channel.channel_id[/td][td]int(11)[/td][td]NO[/td][td]MUL[/td][td]0[/td][td]
|
||||||
[/td][/tr]
|
[/td][/tr]
|
||||||
[tr][td]xchan[/td][td][/td][td]char(255)[/td][td]NO[/td][td]MUL[/td][td][/td][td]
|
[tr][td]xchan[/td][td]xchan.xchan_hash of ignored channel[/td][td]char(255)[/td][td]NO[/td][td]MUL[/td][td][/td][td]
|
||||||
[/td][/tr]
|
[/td][/tr]
|
||||||
[/table]
|
[/table]
|
||||||
|
|
||||||
|
|||||||
@@ -1,15 +1,21 @@
|
|||||||
|
xlink - used to store social graph and channel ratings
|
||||||
[table]
|
[table]
|
||||||
[tr][th]Field[/th][th]Description[/th][th]Type[/th][th]Null[/th][th]Key[/th][th]Default[/th][th]Extra
|
[tr][th]Field[/th][th]Description[/th][th]Type[/th][th]Null[/th][th]Key[/th][th]Default[/th][th]Extra
|
||||||
[/th][/tr]
|
[/th][/tr]
|
||||||
[tr][td]xlink_id[/td][td][/td][td]int(10) unsigned[/td][td]NO[/td][td]PRI[/td][td]NULL[/td][td]auto_increment
|
[tr][td]xlink_id[/td][td]sequential ID[/td][td]int(10) unsigned[/td][td]NO[/td][td]PRI[/td][td]NULL[/td][td]auto_increment
|
||||||
[/td][/tr]
|
[/td][/tr]
|
||||||
[tr][td]xlink_xchan[/td][td][/td][td]char(255)[/td][td]NO[/td][td]MUL[/td][td][/td][td]
|
[tr][td]xlink_xchan[/td][td]xchan.xchan_hash of controlling channel[/td][td]char(255)[/td][td]NO[/td][td]MUL[/td][td][/td][td]
|
||||||
[/td][/tr]
|
[/td][/tr]
|
||||||
[tr][td]xlink_link[/td][td][/td][td]char(255)[/td][td]NO[/td][td]MUL[/td][td][/td][td]
|
[tr][td]xlink_link[/td][td]xchan.xchan_hash of link target (connection or rating)[/td][td]char(255)[/td][td]NO[/td][td]MUL[/td][td][/td][td]
|
||||||
[/td][/tr]
|
[/td][/tr]
|
||||||
[tr][td]xlink_rating[/td][td][/td][td]int(11)[/td][td]NO[/td][td]MUL[/td][td]0[/td][td]
|
[tr][td]xlink_rating[/td][td]int rating[/td][td]int(11)[/td][td]NO[/td][td]MUL[/td][td]0[/td][td]
|
||||||
[/td][/tr]
|
[/td][/tr]
|
||||||
[tr][td]xlink_updated[/td][td][/td][td]datetime[/td][td]NO[/td][td]MUL[/td][td]0000-00-00 00:00:00[/td][td]
|
[tr][td]xlink_rating_txt[/td][td]rating text[/td][td]mediumtext[/td][td]NO[/td][td]MUL[/td][td]0[/td][td]
|
||||||
|
[/td][/tr]
|
||||||
|
[tr][td]xlink_updated[/td][td]timestamp of update in GMT[/td][td]datetime[/td][td]NO[/td][td]MUL[/td][td]0000-00-00 00:00:00[/td][td]
|
||||||
|
[tr][td]xlink_static[/td][td]0 for social graph, 1 for ratings[/td][td]int(11)[/td][td]NO[/td][td]MUL[/td][td]0[/td][td]
|
||||||
|
[/td][/tr]
|
||||||
|
[tr][td]xlink_sig[/td][td]base64url encoded signature of rating information[/td][td]int(11)[/td][td]NO[/td][td]MUL[/td][td]0[/td][td]
|
||||||
[/td][/tr]
|
[/td][/tr]
|
||||||
[/table]
|
[/table]
|
||||||
|
|
||||||
|
|||||||
@@ -1,9 +1,10 @@
|
|||||||
|
xprof - stores searchable public profile information on directory servers
|
||||||
[table]
|
[table]
|
||||||
[tr][th]Field[/th][th]Description[/th][th]Type[/th][th]Null[/th][th]Key[/th][th]Default[/th][th]Extra
|
[tr][th]Field[/th][th]Description[/th][th]Type[/th][th]Null[/th][th]Key[/th][th]Default[/th][th]Extra
|
||||||
[/th][/tr]
|
[/th][/tr]
|
||||||
[tr][td]xprof_hash[/td][td][/td][td]char(255)[/td][td]NO[/td][td]PRI[/td][td]NULL[/td][td]
|
[tr][td]xprof_hash[/td][td]xchan.xchan_hash of this channel[/td][td]char(255)[/td][td]NO[/td][td]PRI[/td][td]NULL[/td][td]
|
||||||
[/td][/tr]
|
[/td][/tr]
|
||||||
[tr][td]xprof_age[/td][td][/td][td]tinyint(3) unsigned[/td][td]NO[/td][td]MUL[/td][td]0[/td][td]
|
[tr][td]xprof_age[/td][td]current age (updated monthly)[/td][td]tinyint(3) unsigned[/td][td]NO[/td][td]MUL[/td][td]0[/td][td]
|
||||||
[/td][/tr]
|
[/td][/tr]
|
||||||
[tr][td]xprof_desc[/td][td][/td][td]char(255)[/td][td]NO[/td][td]MUL[/td][td][/td][td]
|
[tr][td]xprof_desc[/td][td][/td][td]char(255)[/td][td]NO[/td][td]MUL[/td][td][/td][td]
|
||||||
[/td][/tr]
|
[/td][/tr]
|
||||||
|
|||||||
@@ -1,8 +1,8 @@
|
|||||||
[b]Using The Cloud - Dolphin[/b]
|
[b]Using The Cloud - Dolphin[/b]
|
||||||
|
|
||||||
Visit webdavs://example.com/cloud where "example.com" is the URL of your hub.
|
Visit webdavs://example.com/dav where "example.com" is the URL of your hub.
|
||||||
|
|
||||||
When prompted for a username and password, enter your username (the first part of your webbie - no @ or domain name) and password for your normal account.
|
When prompted for a username and password, enter your channel name (the first part of your webbie - no @ or domain name) and password for your normal account.
|
||||||
|
|
||||||
Note, if you are already logged in to the web interface via Konqueror, you will not be prompted for further authentication.
|
Note, if you are already logged in to the web interface via Konqueror, you will not be prompted for further authentication.
|
||||||
|
|
||||||
|
|||||||
@@ -25,14 +25,14 @@ Edit /etc/fstab
|
|||||||
to include your cloud directory by adding
|
to include your cloud directory by adding
|
||||||
|
|
||||||
[code]
|
[code]
|
||||||
[baseurl]/cloud/ /mount/point davfs user,noauto,uid=<DesktopUser>,file_mode=600,dir_mode=700 0 1
|
[baseurl]/dav/ /mount/point davfs user,noauto,uid=<DesktopUser>,file_mode=600,dir_mode=700 0 1
|
||||||
[/code]
|
[/code]
|
||||||
|
|
||||||
Where [baseurl] is the URL of your hub, /mount/point is the location you want to mount the cloud, and <DesktopUser> is the user you log in to one your computer. Note that if you are mounting as a normal user (not root) the mount point must be in your home directory.
|
Where [baseurl] is the URL of your hub, /mount/point is the location you want to mount the cloud, and <DesktopUser> is the user you log in to one your computer. Note that if you are mounting as a normal user (not root) the mount point must be in your home directory.
|
||||||
|
|
||||||
For example, if I wanted to mount my cloud to a directory called 'cloud' in my home directory, and my username was bob, my fstab would be
|
For example, if I wanted to mount my cloud to a directory called 'cloud' in my home directory, and my username was bob, my fstab would be
|
||||||
|
|
||||||
[code][baseurl]/cloud/ /home/bob/cloud davfs user,noauto,uid=bob,file_mode=600,dir_mode=700 0 1[/code]
|
[code][baseurl]/dav/ /home/bob/cloud davfs user,noauto,uid=bob,file_mode=600,dir_mode=700 0 1[/code]
|
||||||
|
|
||||||
Now, create the mount point.
|
Now, create the mount point.
|
||||||
|
|
||||||
@@ -49,7 +49,7 @@ Create a file called 'secrets'
|
|||||||
and add your cloud login credentials
|
and add your cloud login credentials
|
||||||
|
|
||||||
[code]
|
[code]
|
||||||
[baseurl]/cloud <username> <password>
|
[baseurl]/dav <username> <password>
|
||||||
[/code]
|
[/code]
|
||||||
|
|
||||||
Where <username> and <password> are the username and password [i]for your hub[/i].
|
Where <username> and <password> are the username and password [i]for your hub[/i].
|
||||||
@@ -60,7 +60,7 @@ Don't let this file be writeable by anyone who doesn't need it with
|
|||||||
|
|
||||||
Finally, mount the drive.
|
Finally, mount the drive.
|
||||||
|
|
||||||
[code]mount [baseurl]/cloud[/code]
|
[code]mount [baseurl]/dav[/code]
|
||||||
|
|
||||||
You can now find your cloud at /home/bob/cloud and use it as though it were part of your local filesystem - even if the applications you are using have no dav support themselves.
|
You can now find your cloud at /home/bob/cloud and use it as though it were part of your local filesystem - even if the applications you are using have no dav support themselves.
|
||||||
|
|
||||||
|
|||||||
@@ -2,8 +2,8 @@
|
|||||||
|
|
||||||
1. Open a File browsing window (that's Nautilus)
|
1. Open a File browsing window (that's Nautilus)
|
||||||
2. Select File > Connect to server from the menu
|
2. Select File > Connect to server from the menu
|
||||||
3. Type davs://<domain_name>/cloud/<your_username> and click Connect
|
3. Type davs://<domain_name>/dav/<your_channelname> and click Connect
|
||||||
4. You will be prompted for your username (same as above) and password
|
4. You will be prompted for your channel name (same as above) and password
|
||||||
5. Your personal DAV directory will be shown in the window
|
5. Your personal DAV directory will be shown in the window
|
||||||
|
|
||||||
#include doc/macros/cloud_footer.bb;
|
#include doc/macros/cloud_footer.bb;
|
||||||
|
|||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user