Skip to content

Commit

Permalink
Merge branch 'master' of https://github.com/rkbalgi/isosim
Browse files Browse the repository at this point in the history
� Conflicts:
�	internal/db/db_test.go
�	internal/services/crypto/http_transport.go
  • Loading branch information
rkbalgi committed Apr 29, 2020
2 parents 94cea0a + 1f33fff commit 2287e50
Show file tree
Hide file tree
Showing 27 changed files with 130 additions and 57 deletions.
2 changes: 1 addition & 1 deletion Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ FROM golang:alpine
MAINTAINER Raghavendra Balgi;[email protected]
COPY . /home/isosim/app/isosim
WORKDIR /home/isosim/app/isosim/cmd/isosim
RUN go build -v -o app isosim.go
RUN go build -v -o app .

# stage 2
FROM alpine
Expand Down
11 changes: 8 additions & 3 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -19,16 +19,22 @@ other amazing open source libraries.
* ASCII, EBCDIC, BCD and BINARY encoding for fields
* Fixed, Variable, Bitmapped fields
* Embedded/Nested fields
* Supported MLI's - 2I, 2E
* Supported MLI's - 2I, 2E, 4I, 4E
* Define and run servers based on specs
* Run servers from the UI or in [standalone mode](https://github.com/rkbalgi/isosim/wiki/Start-standalone-ISO-server-from-command-line)
* Rules to respond to messages based on fields (rules based on amount, currency etc)
* A UI to build and send transactions to servers (as a client)
* Ability to edit fields on UI
* Client-side validation of fields for content, length (more on the way)
* [PIN](https://github.com/rkbalgi/isosim/wiki/Pin-Field-(DF52)-Generation) and [MAC](https://github.com/rkbalgi/isosim/wiki/MAC-Generation-(DF64-128)) generation
* [Padding](https://github.com/rkbalgi/isosim/wiki/Field-Padding) support
* Save messages that be can be replayed later
* TLS, Docker
* [Log](https://github.com/rkbalgi/isosim/wiki/Message-History) of past messages
* TLS, [Docker](https://github.com/rkbalgi/isosim/wiki/Running-on-Docker)



Checkout the [wiki](https://github.com/rkbalgi/isosim/wiki) for more details!

The specifications themselves are defined in yaml file (Check out an example - [iso_specs.yaml](https://github.com/rkbalgi/isosim/blob/master/test/testdata/specs/iso_specs.yaml))

Expand Down Expand Up @@ -64,7 +70,6 @@ $> go run isosim.go -http-port 8080 -specs-dir ..\..\test\testdata\specs -html-d
```
Open chrome and hit this URL [http://localhost:8080/](http://localhost:8080/)

Read more about this on the [wiki](https://github.com/rkbalgi/isosim/wiki)



33 changes: 21 additions & 12 deletions cmd/isosim/isosim.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ package main

import (
"flag"
"fmt"
log "github.com/sirupsen/logrus"
"isosim/internal/db"
"isosim/internal/iso"
Expand All @@ -11,10 +12,9 @@ import (
"os"
"strconv"
"strings"
"sync"
)

var version = "v0.8.0"

//v0.1 - Initial version
//v0.2 - ISO server development (08/31/2016)
//v0.5 - Support for embedded/nested fields and logging via sirupsen/logrus
Expand All @@ -24,6 +24,10 @@ var version = "v0.8.0"

func main() {

fmt.Println("======================================================")
fmt.Printf("ISO WebSim v%s commit: %s\n", version, build)
fmt.Println("======================================================")

logLevel := flag.String("log-level", "debug", "Log level - [trace|debug|warn|info|error].")
flag.StringVar(&iso.HTMLDir, "html-dir", "", "Directory that contains any HTML's and js/css files etc.")
specsDir := flag.String("specs-dir", "", "The directory containing the ISO spec definition files.")
Expand Down Expand Up @@ -71,19 +75,24 @@ func main() {
log.Fatal(err.Error())
}

log.Infoln("Starting ISO WebSim ", "Version = "+version)
go func() {
tlsEnabled := os.Getenv("TLS_ENABLED")
if tlsEnabled == "true" {
certFile := os.Getenv("TLS_CERT_FILE")
keyFile := os.Getenv("TLS_KEY_FILE")

tlsEnabled := os.Getenv("TLS_ENABLED")
if tlsEnabled == "true" {
certFile := os.Getenv("TLS_CERT_FILE")
keyFile := os.Getenv("TLS_KEY_FILE")
log.Infof("Using certificate file - %s, key file: %s", certFile, keyFile)
log.Fatal(http.ListenAndServeTLS(":"+strconv.Itoa(*httpPort), certFile, keyFile, nil))
} else {
log.Fatal(http.ListenAndServe(":"+strconv.Itoa(*httpPort), nil))
}

log.Infof("Using certificate file - %s, key file: %s", certFile, keyFile)
log.Fatal(http.ListenAndServeTLS(":"+strconv.Itoa(*httpPort), certFile, keyFile, nil))
} else {
log.Fatal(http.ListenAndServe(":"+strconv.Itoa(*httpPort), nil))
}
}()

wg := sync.WaitGroup{}
wg.Add(1)

log.Infof("ISO WebSim started!")
wg.Wait()

}
2 changes: 1 addition & 1 deletion cmd/isosim/run.bat
Original file line number Diff line number Diff line change
Expand Up @@ -4,4 +4,4 @@ set TLS_ENABLED=false
set TLS_CERT_FILE=C:\Users\rkbal\IdeaProjects\isosim-prj\src\isosim\certs\cert.pem
set TLS_KEY_FILE=C:\Users\rkbal\IdeaProjects\isosim-prj\src\isosim\certs\key.pem
REM "---- Starting App -----"
go run isosim.go -http-port 8080 --log-level TRACE -specs-dir ..\..\test\testdata\specs -html-dir ..\..\web -data-dir ..\..\test\testdata\appdata
go run . -http-port 8080 --log-level TRACE -specs-dir ..\..\test\testdata\specs -html-dir ..\..\web -data-dir ..\..\test\testdata\appdata
4 changes: 4 additions & 0 deletions cmd/isosim/version.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
package main

var version = "0.8.0"
var build = "784c04ff"
Binary file modified docs/images/home_rel2020.04_01.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified docs/images/home_rel2020.04_02.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
4 changes: 4 additions & 0 deletions githooks/post-commit
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
#!/usr/bin/bash

cd githooks
./update_commit_id.sh
7 changes: 7 additions & 0 deletions githooks/update_commit_id.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
#!/usr/bin/env bash

commit_id=`git log -1 HEAD | head -1 | awk '{print substr($2,0,8)}'`
echo "package main
var version=\"0.8.0\"
var build=\"$commit_id\"" > ../cmd/isosim/version.go
28 changes: 17 additions & 11 deletions internal/db/db.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ package db

import (
"context"
"encoding/binary"
"encoding/json"
"errors"
"fmt"
Expand All @@ -16,14 +17,14 @@ var timeFormat = "2006-01-02T15"
// DbMessage is an entry of a request/response that will be persisted to
// storage
type DbMessage struct {
ID string `json:"id"`
SpecID int `json:"spec_id"`
MsgID int `json:"msg_id"`

ID string `json:"id"`
SpecID int `json:"spec_id"`
MsgID int `json:"msg_id"`
HostAddr string `json:"host_addr"`

RequestTS int64 `json:"request_ts"`
ResponseTS int64 `json:"response_ts"`
LogTS string `json:"log_ts"`
RequestTS int64 `json:"request_ts"`
ResponseTS int64 `json:"response_ts"`

RequestMsg string `json:"request_msg"`
ParsedRequestMsg []data.JsonFieldDataRep `json:"parsed_request_msg"`
Expand All @@ -44,6 +45,7 @@ func Write(dbMsg DbMessage) error {
if err != nil {
log.Warn("Failed to generate UUID for DbMessage", err)
} else {
dbMsg.LogTS = time.Now().Format(time.RFC3339)
dbMsg.ID = uniqueID.String()
}
var jsonData []byte
Expand All @@ -67,7 +69,13 @@ func Write(dbMsg DbMessage) error {
if err != nil {
return err
}
if err = tBkt.Put([]byte(uniqueID.String()), jsonData); err != nil {
bSeq := make([]byte, 8)
binary.BigEndian.PutUint64(bSeq, tBkt.Sequence())
if err = tBkt.Put(bSeq, jsonData); err != nil {
return err
}
_, err = tBkt.NextSequence()
if err != nil {
return err
}
if err := tx.Commit(); err != nil {
Expand All @@ -87,7 +95,7 @@ func ReadLast(specID int, msgID int, n int) ([]string, error) {
bktName := fmt.Sprintf("%d_%d", specID, msgID)
bkt := tx.Bucket([]byte(bktName))
if bkt == nil {
log.Println("No bucket for spec/msg")
log.Debugf("No bucket for spec/msg - %d:%d", specID, msgID)
return nil, nil
}

Expand All @@ -108,11 +116,9 @@ func ReadLast(specID int, msgID int, n int) ([]string, error) {
if k == nil || v == nil {
continue
}
res = append(res, string(v))
retrieved++

for len(res) < n {
res = append(res, string(v))
retrieved++
if len(res) == n {
return res, nil
}
Expand Down
9 changes: 6 additions & 3 deletions internal/services/crypto/endpoint.go
Original file line number Diff line number Diff line change
Expand Up @@ -29,9 +29,9 @@ func (pgr PinGenResponse) Failed() error {
}

type MacGenRequest struct {
MacAlgo iso.MacAlgo `yaml:"mac_algo",json:"mac_algo"`
MacKey string `yaml:"mac_key",json:"mac_key"`
MacData string `yaml:"mac_data",json:"mac_data"`
MacAlgo iso.MacAlgo `json:"mac_algo"`
MacKey string `json:"mac_key"`
MacData string `json:"mac_data"`

SpecID int `json:"spec_id"`
MsgID int `json:"msg_id"`
Expand Down Expand Up @@ -72,9 +72,11 @@ func macGenEndpoint(s Service) endpoint.Endpoint {

req := request.(MacGenRequest)
var macData []byte
fmt.Println(req)
if req.MacData != "" {
macData, err = hex.DecodeString(req.MacData)
if err != nil {
log.Error("Failed to decode macData", err)
return MacGenResponse{Err: err}, nil
}
} else {
Expand Down Expand Up @@ -104,6 +106,7 @@ func macGenEndpoint(s Service) endpoint.Endpoint {
}

if pb, err := s.GenerateMac(req.MacAlgo, req.MacKey, macData); err != nil {
log.Error("Failed to generate Mac", err)
return MacGenResponse{Err: err}, nil
} else {
log.Debug("Generated MAC = ", strings.ToUpper(hex.EncodeToString(pb)))
Expand Down
36 changes: 35 additions & 1 deletion internal/services/v0/handlers/misc/misc_handler.go
Original file line number Diff line number Diff line change
@@ -1,7 +1,9 @@
package misc

import (
"bytes"
"encoding/hex"
"encoding/json"
"github.com/rkbalgi/libiso/hsm"
"github.com/rkbalgi/libiso/net"
log "github.com/sirupsen/logrus"
Expand All @@ -23,27 +25,59 @@ func init() {

}

const defaultFormat = "json"

func AddMiscHandlers() {

http.HandleFunc("/iso/v1/websim/msg_hist/last_n", func(rw http.ResponseWriter, req *http.Request) {

rw.Header().Add("Access-Control-Allow-Origin", "http://localhost:3000")

if err := req.ParseForm(); err != nil {
_, _ = rw.Write([]byte(err.Error()))
rw.WriteHeader(http.StatusBadRequest)
return
}

format := defaultFormat

msgId, _ := strconv.Atoi(req.Form.Get("msg_id"))
specId, _ := strconv.Atoi(req.Form.Get("spec_id"))
count, _ := strconv.Atoi(req.Form.Get("count"))
format = req.Form.Get("format") //can be json or html

if format == "" {
format = defaultFormat
}

if res, err := db.ReadLast(specId, msgId, count); err != nil {
_, _ = rw.Write([]byte(err.Error()))
rw.WriteHeader(http.StatusBadRequest)
} else {

if format == defaultFormat {
jsonResp, _ := json.Marshal(res)
_, _ = rw.Write(jsonResp)
return
}

buf := bytes.Buffer{}
if len(res) > 0 {
buf.Write([]byte(`<html><body>`))
} else {
rw.Write([]byte("No records found.."))
return
}

for _, tmp := range res {
_, _ = rw.Write([]byte(tmp))
buf.Write([]byte(`<div style="color:blue; background-color:azure; border-style:ridge;">`))
buf.Write([]byte(tmp))
buf.Write([]byte("</div></hr>"))
}

buf.Write([]byte(`</body></html>`))
rw.Header().Add("Content-Type", "text/html")
_, _ = rw.Write(buf.Bytes())
}

})
Expand Down
1 change: 1 addition & 0 deletions test/testdata/appdata/3/1/TC_Amount_1090
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
[{"ID":1,"Name":"Message Type","Value":"1100"},{"ID":2,"Name":"Bitmap","Value":"0111000000100000000000000000000000000000000000001000000000000000"},{"ID":3,"Name":"PAN","Value":"4766977654327777"},{"ID":4,"Name":"Processing Code","Value":"004000"},{"ID":5,"Name":"Transaction Type","Value":"00"},{"ID":6,"Name":"Acct From","Value":"40"},{"ID":7,"Name":"Acct To","Value":"00"},{"ID":8,"Name":"Amount","Value":"000000001090"},{"ID":9,"Name":"STAN","Value":"666551"},{"ID":14,"Name":"Currency Code, Transaction","Value":"126"}]
Binary file modified test/testdata/appdata/isosim.bdb
Binary file not shown.
16 changes: 8 additions & 8 deletions web/react-fe/build/asset-manifest.json
Original file line number Diff line number Diff line change
@@ -1,26 +1,26 @@
{
"files": {
"main.css": "/static/css/main.bbd4fcb0.chunk.css",
"main.js": "/static/js/main.b0871c99.chunk.js",
"main.js.map": "/static/js/main.b0871c99.chunk.js.map",
"main.js": "/static/js/main.778f5aa9.chunk.js",
"main.js.map": "/static/js/main.778f5aa9.chunk.js.map",
"runtime-main.js": "/static/js/runtime-main.d1dafa31.js",
"runtime-main.js.map": "/static/js/runtime-main.d1dafa31.js.map",
"static/css/2.10ffe1ee.chunk.css": "/static/css/2.10ffe1ee.chunk.css",
"static/js/2.ff235fc8.chunk.js": "/static/js/2.ff235fc8.chunk.js",
"static/js/2.ff235fc8.chunk.js.map": "/static/js/2.ff235fc8.chunk.js.map",
"static/js/2.37ac7fee.chunk.js": "/static/js/2.37ac7fee.chunk.js",
"static/js/2.37ac7fee.chunk.js.map": "/static/js/2.37ac7fee.chunk.js.map",
"index.html": "/index.html",
"precache-manifest.09601adcb8ce74276f7b707df2cafad0.js": "/precache-manifest.09601adcb8ce74276f7b707df2cafad0.js",
"precache-manifest.d52ec65746cfaab8035693797ceed4fe.js": "/precache-manifest.d52ec65746cfaab8035693797ceed4fe.js",
"service-worker.js": "/service-worker.js",
"static/css/2.10ffe1ee.chunk.css.map": "/static/css/2.10ffe1ee.chunk.css.map",
"static/css/main.bbd4fcb0.chunk.css.map": "/static/css/main.bbd4fcb0.chunk.css.map",
"static/js/2.ff235fc8.chunk.js.LICENSE.txt": "/static/js/2.ff235fc8.chunk.js.LICENSE.txt",
"static/js/2.37ac7fee.chunk.js.LICENSE.txt": "/static/js/2.37ac7fee.chunk.js.LICENSE.txt",
"static/media/index.css": "/static/media/roboto-latin-900italic.ebf6d164.woff2"
},
"entrypoints": [
"static/js/runtime-main.d1dafa31.js",
"static/css/2.10ffe1ee.chunk.css",
"static/js/2.ff235fc8.chunk.js",
"static/js/2.37ac7fee.chunk.js",
"static/css/main.bbd4fcb0.chunk.css",
"static/js/main.b0871c99.chunk.js"
"static/js/main.778f5aa9.chunk.js"
]
}
2 changes: 1 addition & 1 deletion web/react-fe/build/index.html
Original file line number Diff line number Diff line change
@@ -1 +1 @@
<!doctype html><html lang="en"><head><meta charset="utf-8"/><link rel="icon" href="/favicon.ico"/><meta name="viewport" content="width=device-width,initial-scale=1"/><meta name="theme-color" content="#000000"/><meta name="description" content="Web site created using create-react-app"/><link rel="apple-touch-icon" href="/logo192.png"/><link rel="manifest" href="/manifest.json"/><title>ISO WebSim - ISO8583 Web Simulator</title><link href="/static/css/2.10ffe1ee.chunk.css" rel="stylesheet"><link href="/static/css/main.bbd4fcb0.chunk.css" rel="stylesheet"></head><body style="background-color:#fbfff0"><noscript>You need to enable JavaScript to run this app.</noscript><div id="root"></div><script>!function(e){function r(r){for(var n,i,l=r[0],a=r[1],f=r[2],p=0,s=[];p<l.length;p++)i=l[p],Object.prototype.hasOwnProperty.call(o,i)&&o[i]&&s.push(o[i][0]),o[i]=0;for(n in a)Object.prototype.hasOwnProperty.call(a,n)&&(e[n]=a[n]);for(c&&c(r);s.length;)s.shift()();return u.push.apply(u,f||[]),t()}function t(){for(var e,r=0;r<u.length;r++){for(var t=u[r],n=!0,l=1;l<t.length;l++){var a=t[l];0!==o[a]&&(n=!1)}n&&(u.splice(r--,1),e=i(i.s=t[0]))}return e}var n={},o={1:0},u=[];function i(r){if(n[r])return n[r].exports;var t=n[r]={i:r,l:!1,exports:{}};return e[r].call(t.exports,t,t.exports,i),t.l=!0,t.exports}i.m=e,i.c=n,i.d=function(e,r,t){i.o(e,r)||Object.defineProperty(e,r,{enumerable:!0,get:t})},i.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},i.t=function(e,r){if(1&r&&(e=i(e)),8&r)return e;if(4&r&&"object"==typeof e&&e&&e.__esModule)return e;var t=Object.create(null);if(i.r(t),Object.defineProperty(t,"default",{enumerable:!0,value:e}),2&r&&"string"!=typeof e)for(var n in e)i.d(t,n,function(r){return e[r]}.bind(null,n));return t},i.n=function(e){var r=e&&e.__esModule?function(){return e.default}:function(){return e};return i.d(r,"a",r),r},i.o=function(e,r){return Object.prototype.hasOwnProperty.call(e,r)},i.p="/";var l=this["webpackJsonpisosim-reactjs"]=this["webpackJsonpisosim-reactjs"]||[],a=l.push.bind(l);l.push=r,l=l.slice();for(var f=0;f<l.length;f++)r(l[f]);var c=a;t()}([])</script><script src="/static/js/2.ff235fc8.chunk.js"></script><script src="/static/js/main.b0871c99.chunk.js"></script></body></html>
<!doctype html><html lang="en"><head><meta charset="utf-8"/><link rel="icon" href="/favicon.ico"/><meta name="viewport" content="width=device-width,initial-scale=1"/><meta name="theme-color" content="#000000"/><meta name="description" content="Web site created using create-react-app"/><link rel="apple-touch-icon" href="/logo192.png"/><link rel="manifest" href="/manifest.json"/><title>ISO WebSim - ISO8583 Web Simulator</title><link href="/static/css/2.10ffe1ee.chunk.css" rel="stylesheet"><link href="/static/css/main.bbd4fcb0.chunk.css" rel="stylesheet"></head><body style="background-color:#fbfff0"><noscript>You need to enable JavaScript to run this app.</noscript><div id="root"></div><script>!function(e){function r(r){for(var n,i,l=r[0],a=r[1],f=r[2],p=0,s=[];p<l.length;p++)i=l[p],Object.prototype.hasOwnProperty.call(o,i)&&o[i]&&s.push(o[i][0]),o[i]=0;for(n in a)Object.prototype.hasOwnProperty.call(a,n)&&(e[n]=a[n]);for(c&&c(r);s.length;)s.shift()();return u.push.apply(u,f||[]),t()}function t(){for(var e,r=0;r<u.length;r++){for(var t=u[r],n=!0,l=1;l<t.length;l++){var a=t[l];0!==o[a]&&(n=!1)}n&&(u.splice(r--,1),e=i(i.s=t[0]))}return e}var n={},o={1:0},u=[];function i(r){if(n[r])return n[r].exports;var t=n[r]={i:r,l:!1,exports:{}};return e[r].call(t.exports,t,t.exports,i),t.l=!0,t.exports}i.m=e,i.c=n,i.d=function(e,r,t){i.o(e,r)||Object.defineProperty(e,r,{enumerable:!0,get:t})},i.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},i.t=function(e,r){if(1&r&&(e=i(e)),8&r)return e;if(4&r&&"object"==typeof e&&e&&e.__esModule)return e;var t=Object.create(null);if(i.r(t),Object.defineProperty(t,"default",{enumerable:!0,value:e}),2&r&&"string"!=typeof e)for(var n in e)i.d(t,n,function(r){return e[r]}.bind(null,n));return t},i.n=function(e){var r=e&&e.__esModule?function(){return e.default}:function(){return e};return i.d(r,"a",r),r},i.o=function(e,r){return Object.prototype.hasOwnProperty.call(e,r)},i.p="/";var l=this["webpackJsonpisosim-reactjs"]=this["webpackJsonpisosim-reactjs"]||[],a=l.push.bind(l);l.push=r,l=l.slice();for(var f=0;f<l.length;f++)r(l[f]);var c=a;t()}([])</script><script src="/static/js/2.37ac7fee.chunk.js"></script><script src="/static/js/main.778f5aa9.chunk.js"></script></body></html>
Original file line number Diff line number Diff line change
@@ -1,27 +1,27 @@
self.__precacheManifest = (self.__precacheManifest || []).concat([
{
"revision": "5a7ac17da81a0febfa47a230fdb60dd0",
"revision": "a8763e3a41ffb081ee9aa4e4f3ed0ade",
"url": "/index.html"
},
{
"revision": "97127a56abbada03fabb",
"revision": "36dfe227fb1e23101bcc",
"url": "/static/css/2.10ffe1ee.chunk.css"
},
{
"revision": "0d123ce7e476ffb660ee",
"revision": "37d9cdef19938b6c6af1",
"url": "/static/css/main.bbd4fcb0.chunk.css"
},
{
"revision": "97127a56abbada03fabb",
"url": "/static/js/2.ff235fc8.chunk.js"
"revision": "36dfe227fb1e23101bcc",
"url": "/static/js/2.37ac7fee.chunk.js"
},
{
"revision": "7d2af499a3e7c8548965362b6dd2f785",
"url": "/static/js/2.ff235fc8.chunk.js.LICENSE.txt"
"url": "/static/js/2.37ac7fee.chunk.js.LICENSE.txt"
},
{
"revision": "0d123ce7e476ffb660ee",
"url": "/static/js/main.b0871c99.chunk.js"
"revision": "37d9cdef19938b6c6af1",
"url": "/static/js/main.778f5aa9.chunk.js"
},
{
"revision": "9e78e51408a4d627057a",
Expand Down
2 changes: 1 addition & 1 deletion web/react-fe/build/service-worker.js
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@
importScripts("https://storage.googleapis.com/workbox-cdn/releases/4.3.1/workbox-sw.js");

importScripts(
"/precache-manifest.09601adcb8ce74276f7b707df2cafad0.js"
"/precache-manifest.d52ec65746cfaab8035693797ceed4fe.js"
);

self.addEventListener('message', (event) => {
Expand Down
Loading

0 comments on commit 2287e50

Please sign in to comment.