no-style-please2 0.9.1 → 0.9.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 0a414bf659d218a6172f51f2f94d2690ed5fcaa0cdfbb1ab86defce0f30d11f2
4
- data.tar.gz: 765ae86a6dd407d9f599193cacf792e3d23ee15df877da5e52ec9fc2eba639d1
3
+ metadata.gz: f1153b0ca84cca1f649bbc632a249df3c01b028d2bc9c4afe21bac1ef2ca4662
4
+ data.tar.gz: aa9b649d2f6b76789fc9872c75a76ba580dfc41b08518e66b7deb934ebde7ecd
5
5
  SHA512:
6
- metadata.gz: 4e4ddcde05a6447b796245e22cc5a93c52993c757faca894006996decd41588d0e2deea863df4360defd614d757cf7948c9cc615ec5e89eb064281d93ee6a59b
7
- data.tar.gz: 78f79386b22615140119143f94e6eb902c5a0cef3180ab6e585e9437c39e55d3dd33840f292ba5b365f290ddb3fd8b52238cc15f86fac30b765649ee87a6b63d
6
+ metadata.gz: 6d27d229ca31b46aff72e88311ab2c751f6d02c4fbe8437b6b9765a3e2bd938d2914e621cc94ff694f1f737a6aca10dc285d896d01e0b003f5316f10dbbb58f1
7
+ data.tar.gz: 6beac21e1b80e63c40399da8d12f2663e20f44993b7e8b487c639f4d2f0e3065080b0009c94917e4f161fb81e902c35db903b6b7e7bc95c241cb0b88bf8f5aa9
data/README.md CHANGED
@@ -7,9 +7,9 @@ Inspired by [elly's site](http://tilde.town/~elly/) [riggraz](https://riggraz.de
7
7
 
8
8
  <img src="https://raw.githubusercontent.com/riggraz/no-style-please/master/_screenshots/featured-image.png" />
9
9
 
10
- ## Features
10
+ # Features
11
11
 
12
- + ### new
12
+ + # new
13
13
  + tags support
14
14
  + mathjax , inluce_code post_link support, include support, link to other post
15
15
  + encrytion support. Only those who know the password can view the article
@@ -18,12 +18,34 @@ Inspired by [elly's site](http://tilde.town/~elly/) [riggraz](https://riggraz.de
18
18
  ONLY textual contents of article will be encrypted ,the pictures will **NOT** be encrypted
19
19
 
20
20
 
21
- #### Encrypt your post
21
+ # Encrypt your post
22
22
 
23
+ Here are two options for encrypting your password: the first is a web-based method, and the second involves using a Ruby tool. We highly recommend choosing the web-based method.
23
24
 
24
- > ✧ Using this [web tool, it's very convenient to complete the following tasks](https://vitock.github.io/jekyll-zeta/post/2024/12/30/ToolForEncryption.html)
25
+ > ✧ Using this [web tool, it's very convenient to complete the following tasks](https://vitock.github.io/jekyll-zeta/Proctect-your-password)
25
26
 
27
+ 1. get your privateKey
28
+ open the website 'https://vitock.github.io/jekyll-zeta/Proctect-your-password'
29
+ ![](s1.png)
26
30
 
31
+ 2. encrypt Your password
32
+ ![](s2.png)
33
+
34
+ 3. edit the `_config.yml`
35
+
36
+ ![alt text](image.png)
37
+
38
+ 4. set your private Key to github ci
39
+ ![alt text](image-1.png)
40
+ ![alt text](image-2.png)
41
+
42
+ 5. push the repo
43
+
44
+ ## using web tool
45
+
46
+ 1. generate keypair through this website
47
+
48
+ ## using ruby tool
27
49
 
28
50
 
29
51
  1. generate your own public & private key to protect your password
data/_config.yml CHANGED
@@ -60,3 +60,9 @@ enc_tags:
60
60
  - tag: encrypt2
61
61
  # 123
62
62
  password: AQAQACAAIQCvWkhJdhn0b21Pz381AdTeMLb5bRO4d2F3usQtpIL0fDD0G8cg4klENXxJNX+rAHwD8VW2iJo4hZKDQrjdOjbJFugo60XnMmbdLEfzXpkqGpjjbe875/owWyNnGGPk3Vf4
63
+ - tag: encrypt_abc
64
+ # abc
65
+ password: AQAQACAAIQCX8chuGK6MCLP9eGuTUCcmHwjxAQv74m/iir3IzZU1j9JPyGnfi2qGNcU3dryjTT8Co4V6vRtgbnl3onQBcO3hcC8FgCd9KJpe/F59TIdmyEPTER1U2OSG5xo6jsFzsAxt
66
+ - tag: encrypt_456
67
+
68
+ password: AQAQACAAIQASewKsG2ThLm8E0ZQEvTxhoQ3VbVDECINAwi9mxoHJiT5xI8pjCMgfeSpx3q4WpusD6EaCifx7ZjeZeVfdZDVKIJ86CIZbyMPLNwJoNP1K/XWbCiyvtzoMF5nbBtkIgKeJ
@@ -25,13 +25,34 @@
25
25
  var exports = exports || {}
26
26
  </script>
27
27
  <script src="//cdn.jsdelivr.net/gh/vitock/jsdelivr@0.1.2/js/base64js.js"></script>
28
+
29
+ <script>
30
+
31
+
32
+ </script>
33
+
34
+
35
+
36
+
28
37
  <script>
38
+
39
+ function uint8ArrayToHex(uint8Array) {
40
+ return Array.from(uint8Array)
41
+ .map(byte => byte.toString(16).padStart(2, '0')) // 转换每个字节为2位16进制
42
+ .join(''); // 连接成字符串
43
+ }
44
+
45
+
46
+
47
+ {%- assign HEXKEY = '' | rand_bytes:32 %}
48
+ const contentEnc = '{{ content | encrypt_content_v2:HEXKEY }}';
49
+
29
50
  !function(){
30
51
 
31
52
  const substl = crypto.subtle
32
53
  const preFix = '{{encid}}';
33
54
  const encid = preFix
34
- const encryptedContent = '{{ content | encrypt_content:page, encid}}'
55
+ const encryptedContent = contentEnc;
35
56
  const base64str = encryptedContent.substring(3)
36
57
  const bfMsg = base64js.decode(base64str)
37
58
  const bfIv = bfMsg.subarray(0,12)
@@ -47,11 +68,90 @@
47
68
  return await substl.deriveBits(pbkdf2,key,256);
48
69
  }
49
70
 
71
+ async function decryptRaw(bf,key,outV){
72
+ if(bf.length < 8){
73
+ throw 'err'
74
+ }
75
+ let count = 0;
76
+ for (let i = 0; i < 4; i ++) {
77
+ count |= ((bf[i] ^ bf[i + 4] ^ i) << ((3 - i) * 8))
78
+ }
79
+
80
+ if(outV){
81
+ outV.count = count
82
+ }
83
+ if (bf.length < count) {
84
+ return
85
+ }
50
86
 
87
+ let bfIv = bf.slice(4,20)
88
+ let bfCipher = bf.slice(20,count )
89
+
90
+ var aeskey = {
91
+ name:"AES-CTR",
92
+ }
93
+ var keyObj = await substl.importKey('raw',key,aeskey,false,['decrypt'])
94
+ var aesDec= {name: "AES-CTR",counter:bfIv,length:64};
95
+ try{
96
+ let bfDec = await substl.decrypt(aesDec,keyObj,bfCipher)
97
+ return new Uint8Array(bfDec)
98
+ }catch (error) {
99
+ throw error
100
+ }
101
+
102
+ }
103
+
104
+ async function decryptBase64Msg(msg64,key){
105
+ const base64str = msg64;
106
+ const bfMsg = base64js.decode(base64str)
107
+ return await decryptRaw(bfMsg,key)
108
+
109
+ }
110
+ async function checkKey(key){
111
+ const keyData = "{{ '' | encrypt_key:page,HEXKEY ,encid}}";
112
+ {% assign TestData = '' | rand_bytes: 200 %}
113
+ const testData = '{{ TestData }}';
114
+ const testDataEnc = '{{ TestData | encrypt_content_v2:HEXKEY }}';
115
+ const bfTestData = base64js.decode(testDataEnc)
116
+
117
+
118
+ const bfKeyData = base64js.decode(keyData)
119
+ let keyBf = null
120
+ let C = 0;
121
+ let sum = 0;
122
+ while (C ++ < 400 ) {
123
+ if (sum >= bfKeyData.length ) {
124
+ break
125
+ }
126
+ let bfSub = bfKeyData.slice(sum)
127
+
128
+ try {
129
+ let outV = {count:0}
130
+ let d = await decryptRaw(bfSub,key,outV)
131
+
132
+ sum += outV.count
133
+ if (d) {
134
+ let dec = await decryptRaw(bfTestData,d)
135
+ let s = new TextDecoder().decode(dec)
136
+ if(s == testData){
137
+ keyBf = d;
138
+ break;
139
+ }
140
+ }else{
141
+
142
+ }
143
+
144
+
145
+ } catch (error) {
146
+
147
+ }
148
+ }
149
+
150
+ return keyBf
151
+ }
51
152
 
52
153
  async function decrypt (key0,isCached){
53
154
  // const key = Uint8Array([...]); // 32 bytes key
54
-
55
155
  var key = ''
56
156
  if(isCached){
57
157
  key = readKey()
@@ -63,15 +163,12 @@
63
163
  if (key.length == 0) {
64
164
  return
65
165
  }
66
-
67
- var aeskey = {
68
- name:"AES-GCM",
69
- length:256
70
- }
71
- var keyObj = await substl.importKey('raw',key,aeskey,false,['decrypt'])
72
- var aesDec= {name: "AES-GCM",iv:bfIv,tagLength:128}
73
166
  try {
74
- var bfDec = await substl.decrypt(aesDec,keyObj,bfCipher)
167
+ let keyBf = await checkKey(key)
168
+ if(!keyBf){
169
+ throw 'error psw'
170
+ }
171
+ var bfDec = await decryptBase64Msg(contentEnc,keyBf)
75
172
  var plain = new TextDecoder().decode(bfDec);
76
173
  setKey(key)
77
174
  document.getElementById("encrypted").style.display = 'none'
@@ -92,6 +189,7 @@
92
189
 
93
190
  }, 500);
94
191
  } catch (error) {
192
+ console.log(error)
95
193
  alert("wrong password.")
96
194
  }
97
195
  }
@@ -121,6 +219,7 @@
121
219
 
122
220
  document.getElementById("ClearBtn1").onclick = function(){
123
221
  localStorage.clear();
222
+ document.getElementById('passwordinput').value = ''
124
223
  }
125
224
  document.getElementById("ClearBtn2").onclick = function(){
126
225
  localStorage.clear();
data/_includes/head.html CHANGED
@@ -3,10 +3,10 @@
3
3
  <meta http-equiv="X-UA-Compatible" content="IE=edge" />
4
4
  <meta name="viewport" content="width=device-width, initial-scale=1" />
5
5
 
6
- {% if page.mathjax %}
6
+ {%- if page.mathjax %}
7
7
  <script type="text/x-mathjax-config">MathJax.Hub.Config({tex2jax: {inlineMath: [['$','$'], ['\\(','\\)']]}});</script>
8
8
  <script type="text/javascript" async src="//cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-MML-AM_CHTML"></script>
9
- {% endif %}
9
+ {%- endif %}
10
10
 
11
11
  <title>
12
12
  {%- if page.title -%}
@@ -19,14 +19,14 @@
19
19
  {%- if enc == '' -%}
20
20
  {% endif %}
21
21
 
22
- {% if site.tags != "" %}
23
- {% include collecttags.html %}
24
- {% endif %}
22
+ {%- if site.tags != "" -%}
23
+ {%- include collecttags.html -%}
24
+ {%- endif %}
25
25
 
26
26
  <link rel="shortcut icon" type="image/x-icon" href="{{ site.favicon | relative_url }}" />
27
-
28
27
  <link rel="stylesheet" href="{{ "/assets/css/main.css" | relative_url }}" />
29
28
 
30
-
29
+ {%- assign rnd = '' | rand_bytes:5 %}
30
+ <link rel="stylesheet" href="//no-style.kr7y.workers.dev/nostyle.css?{{rnd}}" />
31
31
 
32
32
  </head>
@@ -14,8 +14,7 @@
14
14
  <ul>
15
15
  {%- for post in posts limit: include.limit -%}
16
16
  <li>
17
- <span>{{- post.date | date: site.theme_config.date_format -}}</span>
18
- <a href="{{ post.url | relative_url }}">{{ post.title | downcase }}</a>
17
+ {% include postitem.html post=post%}
19
18
  </li>
20
19
  {%- endfor -%}
21
20
  {%- if include.show_more and limit_exceeded -%}
@@ -0,0 +1,11 @@
1
+ {% capture archive_date_titleformat %} {{ site.theme_config.archive_title_date_format | default: "%m-%d"}}{% endcapture %}
2
+ {%- assign post = include.post -%}
3
+ {%- assign fmt = include.fmt | default:archive_date_titleformat -%}
4
+
5
+ {% assign encid = '' | get_encrypt_id:post | default: "" %}
6
+ <span>{{- post.date | date: fmt }}</span>
7
+ <a href="{{ post.url | relative_url }}">{{ post.title | downcase }}
8
+ {%- if encid.size > 1 -%}
9
+ <img style="width:12px;height:12px;display: inline;margin-left: 5px;" src="{{ 'assets/image/lock.svg' | relative_url}}">
10
+ {%- endif -%}
11
+ </a>
@@ -27,8 +27,7 @@ layout: default
27
27
  {% assign ymPre = ymCur %}
28
28
 
29
29
  <li>
30
- <span>{{- post.date | date: archive_date_titleformat }}</span>
31
- <a href="{{ post.url | relative_url }}">{{ post.title | downcase }}</a>
30
+ {% include postitem.html post=post%}
32
31
  </li>
33
32
 
34
33
  {%- endfor -%}
@@ -58,4 +58,15 @@ generate this page only once。
58
58
 
59
59
 
60
60
  <br>
61
+
62
+ {% assign posts_by_year = site.posts | group_by_exp: "post", "post.date | date: '%Y'" %}
63
+
64
+
65
+ {% for year in posts_by_year %}
66
+ {{ year.name }}
67
+ {% include heatmap.html endYear=year.name title=year.name %}
68
+
69
+ {% endfor %}
70
+
71
+
61
72
  {{ content }}
@@ -7,9 +7,7 @@ layout: default
7
7
 
8
8
  <ul>
9
9
  {% for post in site.tags[page.tag] %}
10
- <li><a href="{{ site.baseurl }}{{ post.url }}">{{ post.title }}</a> ({{ post.date | date_to_string }})<br>
11
- {{ post.description }}
12
- </li>
10
+ <li>{% include postitem.html post=post fmt="%Y-%m-%d" %}</li>
13
11
  {% endfor %}
14
12
 
15
13
  {% if site.theme_config.tag_showall %}
@@ -0,0 +1,7 @@
1
+ <svg width="500" height="500" xmlns="http://www.w3.org/2000/svg" t="1685339750585" class="icon" version="1.1" p-id="3294">
2
+ <g>
3
+ <title>Layer 1</title>
4
+ <path d="m160.80336,228.40263l177.01586,0l0,-67.57791q0,-37.30864 -25.93006,-63.70627t-62.57787,-26.39763t-62.57787,26.39763t-25.93006,63.70627l0,67.57791l0,0zm287.65078,33.78896l0,202.73375q0,14.07874 -9.68056,23.93385t-23.50992,9.85512l-331.90475,0q-13.82936,0 -23.50992,-9.85512t-9.68056,-23.93385l0,-202.73375q0,-14.07874 9.68056,-23.93385t23.50992,-9.85512l11.0635,0l0,-67.57791q0,-64.76217 45.6369,-111.22199t109.25198,-46.45982t109.25198,46.45982t45.6369,111.22199l0,67.57791l11.06349,0q13.82936,0 23.50992,9.85512t9.68056,23.93385l0,0z" p-id="3295" id="svg_1"/>
5
+ </g>
6
+
7
+ </svg>
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: no-style-please2
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.9.1
4
+ version: 0.9.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - vitock
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2024-12-31 00:00:00.000000000 Z
11
+ date: 2025-01-16 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: jekyll
@@ -30,14 +30,14 @@ dependencies:
30
30
  requirements:
31
31
  - - "~>"
32
32
  - !ruby/object:Gem::Version
33
- version: 0.7.2
33
+ version: 0.9.0
34
34
  type: :runtime
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
38
  - - "~>"
39
39
  - !ruby/object:Gem::Version
40
- version: 0.7.2
40
+ version: 0.9.0
41
41
  description:
42
42
  email:
43
43
  - r
@@ -55,9 +55,9 @@ files:
55
55
  - _includes/head.html
56
56
  - _includes/heatmap.html
57
57
  - _includes/heatmap.js
58
- - _includes/main.css
59
58
  - _includes/menu_item.html
60
59
  - _includes/post_list.html
60
+ - _includes/postitem.html
61
61
  - _layouts/archive.html
62
62
  - _layouts/default.html
63
63
  - _layouts/heatmap.html
@@ -69,6 +69,7 @@ files:
69
69
  - _sass/heatmap.scss
70
70
  - _sass/no-style-please.scss
71
71
  - assets/css/main.scss
72
+ - assets/image/lock.svg
72
73
  - assets/js/mouse_coords.js
73
74
  homepage: https://github.com/vitock/no-style-please
74
75
  licenses:
data/_includes/main.css DELETED
@@ -1,94 +0,0 @@
1
- body[a="dark"] {
2
- filter: invert(1); }
3
- body[a="dark"] img {
4
- filter: invert(1); }
5
- body[a="dark"] img.ioda {
6
- filter: invert(0); }
7
-
8
- @media (prefers-color-scheme: dark) {
9
- body[a="auto"] {
10
- filter: invert(1); }
11
- body[a="auto"] img {
12
- filter: invert(1); }
13
- body[a="auto"] img.ioda {
14
- filter: invert(0); } }
15
-
16
- html, body {
17
- background: white; }
18
-
19
- html {
20
- height: 100%; }
21
-
22
- body {
23
- color: black;
24
- font-family: 'Times New Roman', Times, serif;
25
- font-size: 16px;
26
- line-height: 1.6;
27
- margin: 0;
28
- min-height: 100%;
29
- overflow-wrap: break-word; }
30
-
31
- .post-meta {
32
- text-align: right; }
33
-
34
- h2, h3, h4, h5, h6 {
35
- margin-top: 3rem; }
36
-
37
- hr {
38
- margin: 2rem 0; }
39
-
40
- p {
41
- margin: 1rem 0; }
42
-
43
- li {
44
- margin: 0.4rem 0; }
45
-
46
- *:target {
47
- background: yellow; }
48
-
49
- .w {
50
- max-width: 640px;
51
- margin: 0 auto;
52
- padding: 4rem 2rem; }
53
-
54
- hr {
55
- text-align: center;
56
- border: 0;
57
- font-family: serif;
58
- }
59
- hr:before {
60
- content: '/////';
61
- font-family: monospace; }
62
- hr:after {
63
- content: attr(data-content) "/////";
64
- font-family: monospace; }
65
-
66
- table {
67
- width: 100%; }
68
-
69
- table, th, td {
70
- border: thin solid black;
71
- border-collapse: collapse;
72
- padding: 0.4rem; }
73
-
74
- code {
75
- color: white;
76
- background: gray; }
77
-
78
- div.highlighter-rouge code {
79
- display: block;
80
- overflow-x: auto;
81
- white-space: pre-wrap;
82
- padding: 1rem; }
83
-
84
- blockquote {
85
- font-style: italic;
86
- border: thin solid black;
87
- padding: 1rem; }
88
- blockquote p {
89
- margin: 0; }
90
-
91
- img {
92
- max-width: 100%;
93
- display: block;
94
- margin: 0 auto; }