mirror of
				https://github.com/KevinMidboe/linguist.git
				synced 2025-10-29 17:50:22 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			70 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			70 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
# from
 | 
						|
# http://wiki.erights.org/wiki/Walnut/Advanced_Topics/Build_your_Own_Guards
 | 
						|
def makeVOCPair(brandName :String) :near {
 | 
						|
 | 
						|
    var myTempContents := def none {}
 | 
						|
 | 
						|
    def brand {
 | 
						|
        to __printOn(out :TextWriter) :void {
 | 
						|
            out.print(brandName)
 | 
						|
        }
 | 
						|
    }
 | 
						|
 | 
						|
    def ProveAuth {
 | 
						|
        to __printOn(out :TextWriter) :void {
 | 
						|
            out.print(`<$brandName prover>`)
 | 
						|
        }
 | 
						|
        to getBrand() :near { return brand }
 | 
						|
        to coerce(specimen, optEjector) :near {
 | 
						|
            def sealedBox {
 | 
						|
                to getBrand() :near { return brand }
 | 
						|
                to offerContent() :void {
 | 
						|
                    myTempContents := specimen
 | 
						|
                }
 | 
						|
            }
 | 
						|
            return sealedBox
 | 
						|
        }
 | 
						|
    }
 | 
						|
    def CheckAuth {
 | 
						|
        to __printOn(out :TextWriter) :void {
 | 
						|
            out.print(`<$brandName checker template>`)
 | 
						|
        }
 | 
						|
        to getBrand() :near { return brand }
 | 
						|
        match [`get`, authList :any[]] {
 | 
						|
            def checker {
 | 
						|
                to __printOn(out :TextWriter) :void {
 | 
						|
                    out.print(`<$brandName checker>`)
 | 
						|
                }
 | 
						|
                to getBrand() :near { return brand }
 | 
						|
                to coerce(specimenBox, optEjector) :any {
 | 
						|
                    myTempContents := null
 | 
						|
                    if (specimenBox.__respondsTo("offerContent", 0)) {
 | 
						|
                      # XXX Using __respondsTo/2 here is a kludge
 | 
						|
                        specimenBox.offerContent()
 | 
						|
                    } else {
 | 
						|
                        myTempContents := specimenBox
 | 
						|
                    }
 | 
						|
                    for auth in authList {
 | 
						|
                        if (auth == myTempContents) {
 | 
						|
                            return auth
 | 
						|
                        }
 | 
						|
                    }
 | 
						|
                    myTempContents := none
 | 
						|
                    throw.eject(optEjector,
 | 
						|
                                `Unmatched $brandName authorization`)
 | 
						|
                }
 | 
						|
            }
 | 
						|
        }
 | 
						|
        match [`__respondsTo`, [`get`, _]] {
 | 
						|
            true
 | 
						|
        }
 | 
						|
        match [`__respondsTo`, [_, _]] {
 | 
						|
            false
 | 
						|
        }
 | 
						|
        match [`__getAllegedType`, []] {
 | 
						|
            null.__getAllegedType()
 | 
						|
        }
 | 
						|
    }
 | 
						|
    return [ProveAuth, CheckAuth]
 | 
						|
}
 |