Help
RSS
API
Feed
Maltego
Contact
Domain > wheeloftime.silvermast.io
×
More information on this domain is in
AlienVault OTX
Is this malicious?
Yes
No
DNS Resolutions
Date
IP Address
2025-02-28
18.164.124.12
(
ClassC
)
2025-09-13
3.169.173.70
(
ClassC
)
Port 80
HTTP/1.1 200 OKContent-Type: text/htmlContent-Length: 13312Connection: keep-aliveDate: Sat, 13 Sep 2025 07:55:24 GMTLast-Modified: Tue, 28 Jun 2022 22:16:08 GMTETag: c318ab1a1d6c57e271d15c825d15e429Accept-Ranges: bytesServer: AmazonS3X-Cache: Miss from cloudfrontVia: 1.1 8af7e76489ae9222af2304e63d2c0520.cloudfront.net (CloudFront)X-Amz-Cf-Pop: HIO52-P4X-Amz-Cf-Id: 8KcyaK5hAik5OTmwlugynsibQABcWimrGlaWEvI2bFVkpaUSh7bLIgmax-age: 3600Vary: Origin !DOCTYPE html>!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to you under the Apache License, Version 2.0 (the License); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an AS IS BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.-->html>head> !-- Customize this policy to fit your own apps needs. For more guidance, see: https://github.com/apache/cordova-plugin-whitelist/blob/master/README.md#content-security-policy Some notes: * gap: is required only on iOS (whn using UIWebView) and is needed for JS->native communication * https://ssl.gstatic.com is required only on Android and is needed for TalkBack to function properly * Disables use of inline scripts in order to mitigate risk of XSS vulnerabilities. To change this: * Enable inline JS: add unsafe-inline to default-src --> meta http-equivContent-Security-Policy content default-src self unsafe-inline http://wheeloftime.silvermast.io https://wheeloftime.silvermast.io app: file: data: gap: unsafe-eval; style-src self unsafe-inline file:; media-src *; img-src self file: data: content:> meta nameformat-detection contenttelephoneno> meta namemsapplication-tap-highlight contentno> !--meta nameviewport contentuser-scalableno, initial-scale1, maximum-scale1, minimum-scale1, widthdevice-width, heightdevice-height>--> meta nameviewport contentwidthdevice-width, initial-scale1.0, maximum-scale1.0, target-densitydpimedium-dpi, user-scalable0 /> link relshortcut icon hrefres/img/icon.svg> link relstylesheet typetext/css hrefres/css/vendor.min.css> link relstylesheet typetext/css hrefres/css/index.css> title>WoT CC/title>/head>body>div idvue-app> div classform-group> div classinput-group v-ifbooksbook> input refsearchInput typetext classform-control search-input v-modelq @keyupsearchEvent placeholderEnter a Characters Name> span classclear-search @clickclearSearch v-showq.length > 0>×/span> button typebutton classshow-all-button v-if!showIndex @clickshowIndex true>Show All/button> button typebutton classshow-all-button v-ifshowIndex @clickshowIndex false>Hide All/button> /div> h1 v-else classtext-white text-center form-control-static h4 mt-3> Which book are you reading? /h1> select classform-control v-modelbook @changeloadBook> option>Select a Book/option> option v-for(bName, bId) in books :valuebId v-textbName>/option> /select> div v-ifisBusy classtext-white strong text-center mt-3>Loading Index. Please wait.../div> /div> section classindex v-ifshowIndex> ul classlist-group> li classlist-group-item v-forcharacter in characterList> a classindex-link :href# + character.name v-textcharacter.name @clickshowIndex false>/a> /li> /ul> /section> section classmatches> div classcharacter v-forcharacter in characterMatches> strong classtitle v-textcharacter.name>/strong> div v-ifcharacter.isBusy>Loading.../div> div classcharacter-chapters v-if!character.isBusy> div v-forchapter in character.chapters> div classchapter-title @click$set(chapter, isShowing, !chapter.isShowing)> span v-textchapter.isShowing ? – : +>/span> span v-textchapter.title>/span> /div> div classchapter-info v-ifchapter.isShowing> span v-htmlchapter.info>/span> div classsmall pt-2 v-ifshowSeeAlso && chapter.seeAlso && chapter.seeAlso.length> i>See also:/i> template v-for(seeAlso, seeAlsoIndex) in chapter.seeAlso> span v-ifseeAlsoIndex > 0 classsee-also-separator>;/span> a v-htmlseeAlso.name :keyseeAlso.id :href`#${seeAlso.id}`>/a> /template> /div> /div> /div> /div> /div> /section> !-- Preferences --> section classoverlay bg-light v-ifshowPreferences> span classclose-icon @clickshowPreferences false>×/span> h1 classh2>Preferences/h1> ul classlist-group> li classlist-group-item> div classcustom-control custom-switch> input typecheckbox classcustom-control-input idinput-see-also v-modelshowSeeAlso> label classcustom-control-label forinput-see-also>Show See Also Suggestions/label> /div> /li> li classlist-group-item> button classbtn btn-outline-primary @clickclearCache>Clear Local Cache/button> div classtext-success v-ifcacheCleared>Success!/div> /li> /ul> hr> strong>Special thanks to.../strong> ul classpl-3> li>a hrefhttp://sites.ugcs.caltech.edu/~karlh/cgi-bin/wot.cgi target_system>Karl Hammonds Compendium of Wheel of Time Characters/a> for providing the initial content./li> li>Reddits a hrefhttp://reddit.com/r/wot target_system>/r/WoT/a> for hunting down spoilers./li> /ul> /section> nav> div classtext-right mr-3 mt-4> button classbtn btn-link text-white @clickshowPreferences true>⚙ Preferences/button> /div> /nav>/div>script typetext/javascript srcres/js/vendor.min.js>/script>script typetext/javascript srcres/js/functions.js>/script>script typetext/javascript> /** Gets current timestamp in seconds */ const time () > Math.floor(Date.now() / 1000); const App new Vue({ el: #vue-app, data: { isBusy: false, book: localStorage.getItem(book), books: { book-00: Book 00 - New Spring, book-01: Book 01 - The Eye of the World, book-02: Book 02 - The Great Hunt, book-03: Book 03 - The Dragon Reborn, book-04: Book 04 - The Shadow Rising, book-05: Book 05 - The Fires of Heaven, book-06: Book 06 - Lord of Chaos, book-07: Book 07 - A Crown of Swords, book-08: Book 08 - The Path of Daggers, book-09: Book 09 - Winters Heart, book-10: Book 10 - Crossroads of Twilight, book-11: Book 11 - Knife of Dreams, book-12: Book 12 - The Gathering Storm, book-13: Book 13 - Towers of Midnight, book-14: Book 14 - A Memory of Light, }, q: DB.get(query) || , characterList: , characterMatches: , index: {}, showIndex: false, showPreferences: false, timeout: false, showSeeAlso: Number(DB.get(showSeeAlso) || 0), cacheCleared: false, }, created() { this.loadBook(); const vm this; const href_function function(e) { if (e.target.target _system) { return; } e.preventDefault(); const href $(this).attr(href); if (href0 #) { // vm.q $(this).text().split(,).reverse().map($.trim).join( ); vm.q decodeURIComponent(href.substr(1)).replace(/\+/g, ); vm.search(); } }; $(document).off(click, href, href_function); $(document).on(click, href, href_function); //window.removeEventListener(focus, this.loadBook); //window.addEventListener(focus, this.loadBook); }, watch: { showSeeAlso(newValue) { DB.set(showSeeAlso, newValue ? 1 : 0) } }, methods: { clearSearch() { this.q ; this.characterMatches ; this.$refs.searchInput.focus(); }, /** * Retrieves the book from the proper data source. */ async fetchBook(book) { const bookPath `data/${this.book}.json`; // 1. Try remote source for the most up-to-date data try { let result await axios.get(`https://wheeloftime.silvermast.io/${bookPath}`, { timeout: 2000 }); DB.set(bookPath, { time: time(), data: result.data }); return result.data } catch (e) { console.error(e); } // 2. Try DB (locaStorage) for cached remote source data let result DB.get(bookPath); if (result && result.data) { return result.data; } // 3. Try local data, which was shipped with the app version try { let result await axios.get(bookPath); return result.data } catch (e) { console.error(e); } console.error(FAILED TO RETRIEVE BOOK, book) return null; }, /** * Loads a id:name index of the selected book, or none if there are none selected. */ async loadBook() { if (!this.booksthis.book) return; localStorage.setItem(book, this.book); this.isBusy true; this.characterList ; this.characterMatches ; const bookData await this.fetchBook(this.book); this.characterList Object.values(bookData).sort((a, b) > a.name - b.name); this.search(); this.isBusy false; }, /** * Immediately searches the index for matching characters */ async search() { if (!this.characterList) { await this.loadBook(); } if (this.q.length 0) { this.clearSearch(); return; } this.showIndex false; DB.set(query, this.q); const searchRegExp new RegExp(this.q.replace( , .*), gi); this.characterMatches this.characterList.filter(entry > searchRegExp.test(entry.name)) }, /** * Debounce function for searching on keyup * Search Keyup function activated while typing */ searchEvent() { clearTimeout(this.timeout); this.timeout setTimeout(this.search, 300); }, /** * Shows/hides the chapter info * @param character * @param chapterId */ toggleChapter(character, chapterId) { this.$set(character, isShowing, !character.isShowing); }, /** * Clears the book cache */ clearCache() { Object.keys(this.books).forEach(book > DB.del(`data/${book}.json`)); // localStorage.clear(); this.loadBook(); this.cacheCleared true; setTimeout(() > this.cacheCleared false, 2000); }, } })/script>script typetext/javascript srccordova.js>/script>/body>/html>
Port 443
HTTP/1.1 200 OKContent-Type: text/htmlContent-Length: 13312Connection: keep-aliveDate: Sat, 13 Sep 2025 07:55:24 GMTLast-Modified: Tue, 28 Jun 2022 22:16:08 GMTETag: c318ab1a1d6c57e271d15c825d15e429Accept-Ranges: bytesServer: AmazonS3X-Cache: Hit from cloudfrontVia: 1.1 30f0e61c1580551568da5e96c38c9796.cloudfront.net (CloudFront)X-Amz-Cf-Pop: HIO52-P4X-Amz-Cf-Id: LMnsGroB-lJweef19jtdxP9qYC2tSrpoHlZMVTdCyU590-6d3pElIQmax-age: 3600Vary: Origin !DOCTYPE html>!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to you under the Apache License, Version 2.0 (the License); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an AS IS BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.-->html>head> !-- Customize this policy to fit your own apps needs. For more guidance, see: https://github.com/apache/cordova-plugin-whitelist/blob/master/README.md#content-security-policy Some notes: * gap: is required only on iOS (whn using UIWebView) and is needed for JS->native communication * https://ssl.gstatic.com is required only on Android and is needed for TalkBack to function properly * Disables use of inline scripts in order to mitigate risk of XSS vulnerabilities. To change this: * Enable inline JS: add unsafe-inline to default-src --> meta http-equivContent-Security-Policy content default-src self unsafe-inline http://wheeloftime.silvermast.io https://wheeloftime.silvermast.io app: file: data: gap: unsafe-eval; style-src self unsafe-inline file:; media-src *; img-src self file: data: content:> meta nameformat-detection contenttelephoneno> meta namemsapplication-tap-highlight contentno> !--meta nameviewport contentuser-scalableno, initial-scale1, maximum-scale1, minimum-scale1, widthdevice-width, heightdevice-height>--> meta nameviewport contentwidthdevice-width, initial-scale1.0, maximum-scale1.0, target-densitydpimedium-dpi, user-scalable0 /> link relshortcut icon hrefres/img/icon.svg> link relstylesheet typetext/css hrefres/css/vendor.min.css> link relstylesheet typetext/css hrefres/css/index.css> title>WoT CC/title>/head>body>div idvue-app> div classform-group> div classinput-group v-ifbooksbook> input refsearchInput typetext classform-control search-input v-modelq @keyupsearchEvent placeholderEnter a Characters Name> span classclear-search @clickclearSearch v-showq.length > 0>×/span> button typebutton classshow-all-button v-if!showIndex @clickshowIndex true>Show All/button> button typebutton classshow-all-button v-ifshowIndex @clickshowIndex false>Hide All/button> /div> h1 v-else classtext-white text-center form-control-static h4 mt-3> Which book are you reading? /h1> select classform-control v-modelbook @changeloadBook> option>Select a Book/option> option v-for(bName, bId) in books :valuebId v-textbName>/option> /select> div v-ifisBusy classtext-white strong text-center mt-3>Loading Index. Please wait.../div> /div> section classindex v-ifshowIndex> ul classlist-group> li classlist-group-item v-forcharacter in characterList> a classindex-link :href# + character.name v-textcharacter.name @clickshowIndex false>/a> /li> /ul> /section> section classmatches> div classcharacter v-forcharacter in characterMatches> strong classtitle v-textcharacter.name>/strong> div v-ifcharacter.isBusy>Loading.../div> div classcharacter-chapters v-if!character.isBusy> div v-forchapter in character.chapters> div classchapter-title @click$set(chapter, isShowing, !chapter.isShowing)> span v-textchapter.isShowing ? – : +>/span> span v-textchapter.title>/span> /div> div classchapter-info v-ifchapter.isShowing> span v-htmlchapter.info>/span> div classsmall pt-2 v-ifshowSeeAlso && chapter.seeAlso && chapter.seeAlso.length> i>See also:/i> template v-for(seeAlso, seeAlsoIndex) in chapter.seeAlso> span v-ifseeAlsoIndex > 0 classsee-also-separator>;/span> a v-htmlseeAlso.name :keyseeAlso.id :href`#${seeAlso.id}`>/a> /template> /div> /div> /div> /div> /div> /section> !-- Preferences --> section classoverlay bg-light v-ifshowPreferences> span classclose-icon @clickshowPreferences false>×/span> h1 classh2>Preferences/h1> ul classlist-group> li classlist-group-item> div classcustom-control custom-switch> input typecheckbox classcustom-control-input idinput-see-also v-modelshowSeeAlso> label classcustom-control-label forinput-see-also>Show See Also Suggestions/label> /div> /li> li classlist-group-item> button classbtn btn-outline-primary @clickclearCache>Clear Local Cache/button> div classtext-success v-ifcacheCleared>Success!/div> /li> /ul> hr> strong>Special thanks to.../strong> ul classpl-3> li>a hrefhttp://sites.ugcs.caltech.edu/~karlh/cgi-bin/wot.cgi target_system>Karl Hammonds Compendium of Wheel of Time Characters/a> for providing the initial content./li> li>Reddits a hrefhttp://reddit.com/r/wot target_system>/r/WoT/a> for hunting down spoilers./li> /ul> /section> nav> div classtext-right mr-3 mt-4> button classbtn btn-link text-white @clickshowPreferences true>⚙ Preferences/button> /div> /nav>/div>script typetext/javascript srcres/js/vendor.min.js>/script>script typetext/javascript srcres/js/functions.js>/script>script typetext/javascript> /** Gets current timestamp in seconds */ const time () > Math.floor(Date.now() / 1000); const App new Vue({ el: #vue-app, data: { isBusy: false, book: localStorage.getItem(book), books: { book-00: Book 00 - New Spring, book-01: Book 01 - The Eye of the World, book-02: Book 02 - The Great Hunt, book-03: Book 03 - The Dragon Reborn, book-04: Book 04 - The Shadow Rising, book-05: Book 05 - The Fires of Heaven, book-06: Book 06 - Lord of Chaos, book-07: Book 07 - A Crown of Swords, book-08: Book 08 - The Path of Daggers, book-09: Book 09 - Winters Heart, book-10: Book 10 - Crossroads of Twilight, book-11: Book 11 - Knife of Dreams, book-12: Book 12 - The Gathering Storm, book-13: Book 13 - Towers of Midnight, book-14: Book 14 - A Memory of Light, }, q: DB.get(query) || , characterList: , characterMatches: , index: {}, showIndex: false, showPreferences: false, timeout: false, showSeeAlso: Number(DB.get(showSeeAlso) || 0), cacheCleared: false, }, created() { this.loadBook(); const vm this; const href_function function(e) { if (e.target.target _system) { return; } e.preventDefault(); const href $(this).attr(href); if (href0 #) { // vm.q $(this).text().split(,).reverse().map($.trim).join( ); vm.q decodeURIComponent(href.substr(1)).replace(/\+/g, ); vm.search(); } }; $(document).off(click, href, href_function); $(document).on(click, href, href_function); //window.removeEventListener(focus, this.loadBook); //window.addEventListener(focus, this.loadBook); }, watch: { showSeeAlso(newValue) { DB.set(showSeeAlso, newValue ? 1 : 0) } }, methods: { clearSearch() { this.q ; this.characterMatches ; this.$refs.searchInput.focus(); }, /** * Retrieves the book from the proper data source. */ async fetchBook(book) { const bookPath `data/${this.book}.json`; // 1. Try remote source for the most up-to-date data try { let result await axios.get(`https://wheeloftime.silvermast.io/${bookPath}`, { timeout: 2000 }); DB.set(bookPath, { time: time(), data: result.data }); return result.data } catch (e) { console.error(e); } // 2. Try DB (locaStorage) for cached remote source data let result DB.get(bookPath); if (result && result.data) { return result.data; } // 3. Try local data, which was shipped with the app version try { let result await axios.get(bookPath); return result.data } catch (e) { console.error(e); } console.error(FAILED TO RETRIEVE BOOK, book) return null; }, /** * Loads a id:name index of the selected book, or none if there are none selected. */ async loadBook() { if (!this.booksthis.book) return; localStorage.setItem(book, this.book); this.isBusy true; this.characterList ; this.characterMatches ; const bookData await this.fetchBook(this.book); this.characterList Object.values(bookData).sort((a, b) > a.name - b.name); this.search(); this.isBusy false; }, /** * Immediately searches the index for matching characters */ async search() { if (!this.characterList) { await this.loadBook(); } if (this.q.length 0) { this.clearSearch(); return; } this.showIndex false; DB.set(query, this.q); const searchRegExp new RegExp(this.q.replace( , .*), gi); this.characterMatches this.characterList.filter(entry > searchRegExp.test(entry.name)) }, /** * Debounce function for searching on keyup * Search Keyup function activated while typing */ searchEvent() { clearTimeout(this.timeout); this.timeout setTimeout(this.search, 300); }, /** * Shows/hides the chapter info * @param character * @param chapterId */ toggleChapter(character, chapterId) { this.$set(character, isShowing, !character.isShowing); }, /** * Clears the book cache */ clearCache() { Object.keys(this.books).forEach(book > DB.del(`data/${book}.json`)); // localStorage.clear(); this.loadBook(); this.cacheCleared true; setTimeout(() > this.cacheCleared false, 2000); }, } })/script>script typetext/javascript srccordova.js>/script>/body>/html>
View on OTX
|
View on ThreatMiner
Please enable JavaScript to view the
comments powered by Disqus.
Data with thanks to
AlienVault OTX
,
VirusTotal
,
Malwr
and
others
. [
Sitemap
]