glide up
This commit is contained in:
		
							
								
								
									
										2
									
								
								vendor/github.com/grpc-ecosystem/grpc-gateway/examples/browser/.gitignore
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										2
									
								
								vendor/github.com/grpc-ecosystem/grpc-gateway/examples/browser/.gitignore
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,2 @@
 | 
			
		||||
/bower_components
 | 
			
		||||
/node_modules
 | 
			
		||||
							
								
								
									
										31
									
								
								vendor/github.com/grpc-ecosystem/grpc-gateway/examples/browser/README.md
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										31
									
								
								vendor/github.com/grpc-ecosystem/grpc-gateway/examples/browser/README.md
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,31 @@
 | 
			
		||||
# Browser example
 | 
			
		||||
 | 
			
		||||
This directory contains an example use of grpc-gateway with web browsers.
 | 
			
		||||
The following commands automatically runs integration tests with phantomjs.
 | 
			
		||||
 | 
			
		||||
```shell-session
 | 
			
		||||
$ npm install -g gulp-cli
 | 
			
		||||
$ npm install
 | 
			
		||||
$ gulp
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
## Other examples
 | 
			
		||||
 | 
			
		||||
### Very simple example
 | 
			
		||||
Run
 | 
			
		||||
```shell-session
 | 
			
		||||
$ gulp bower
 | 
			
		||||
$ gulp backends
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
then, open `index.html`.
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
### Integration test with your browser
 | 
			
		||||
 | 
			
		||||
Run
 | 
			
		||||
```shell-session
 | 
			
		||||
$ gulp serve
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
then, open `http://localhost:8000` with your browser.
 | 
			
		||||
							
								
								
									
										185
									
								
								vendor/github.com/grpc-ecosystem/grpc-gateway/examples/browser/a_bit_of_everything_service.spec.js
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										185
									
								
								vendor/github.com/grpc-ecosystem/grpc-gateway/examples/browser/a_bit_of_everything_service.spec.js
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,185 @@
 | 
			
		||||
'use strict';
 | 
			
		||||
 | 
			
		||||
var SwaggerClient = require('swagger-client');
 | 
			
		||||
 | 
			
		||||
describe('ABitOfEverythingService', function() {
 | 
			
		||||
  var client;
 | 
			
		||||
 | 
			
		||||
  beforeEach(function(done) {
 | 
			
		||||
    new SwaggerClient({
 | 
			
		||||
      url: "http://localhost:8080/swagger/a_bit_of_everything.swagger.json",
 | 
			
		||||
      usePromise: true,
 | 
			
		||||
    }).then(function(c) {
 | 
			
		||||
      client = c;
 | 
			
		||||
    }).catch(function(err) {
 | 
			
		||||
      done.fail(err);
 | 
			
		||||
    }).then(done);
 | 
			
		||||
  });
 | 
			
		||||
 | 
			
		||||
  describe('Create', function() {
 | 
			
		||||
    var created;
 | 
			
		||||
    var expected = {
 | 
			
		||||
      float_value: 1.5,
 | 
			
		||||
      double_value: 2.5,
 | 
			
		||||
      int64_value: "4294967296",
 | 
			
		||||
      uint64_value: "9223372036854775807",
 | 
			
		||||
      int32_value: -2147483648,
 | 
			
		||||
      fixed64_value: "9223372036854775807",
 | 
			
		||||
      fixed32_value: 4294967295,
 | 
			
		||||
      bool_value: true,
 | 
			
		||||
      string_value: "strprefix/foo",
 | 
			
		||||
      uint32_value: 4294967295,
 | 
			
		||||
      sfixed32_value: 2147483647,
 | 
			
		||||
      sfixed64_value: "-4611686018427387904",
 | 
			
		||||
      sint32_value: 2147483647,
 | 
			
		||||
      sint64_value: "4611686018427387903",
 | 
			
		||||
      nonConventionalNameValue: "camelCase",
 | 
			
		||||
    };
 | 
			
		||||
 | 
			
		||||
    beforeEach(function(done) {
 | 
			
		||||
      client.ABitOfEverythingService.Create(expected).then(function(resp) {
 | 
			
		||||
        created = resp.obj;
 | 
			
		||||
      }).catch(function(err) {
 | 
			
		||||
        done.fail(err);
 | 
			
		||||
      }).then(done);
 | 
			
		||||
    });
 | 
			
		||||
 | 
			
		||||
    it('should assign id', function() {
 | 
			
		||||
      expect(created.uuid).not.toBe("");
 | 
			
		||||
    });
 | 
			
		||||
 | 
			
		||||
    it('should echo the request back', function() {
 | 
			
		||||
      delete created.uuid;
 | 
			
		||||
      expect(created).toEqual(expected);
 | 
			
		||||
    });
 | 
			
		||||
  });
 | 
			
		||||
 | 
			
		||||
  describe('CreateBody', function() {
 | 
			
		||||
    var created;
 | 
			
		||||
    var expected = {
 | 
			
		||||
      float_value: 1.5,
 | 
			
		||||
      double_value: 2.5,
 | 
			
		||||
      int64_value: "4294967296",
 | 
			
		||||
      uint64_value: "9223372036854775807",
 | 
			
		||||
      int32_value: -2147483648,
 | 
			
		||||
      fixed64_value: "9223372036854775807",
 | 
			
		||||
      fixed32_value: 4294967295,
 | 
			
		||||
      bool_value: true,
 | 
			
		||||
      string_value: "strprefix/foo",
 | 
			
		||||
      uint32_value: 4294967295,
 | 
			
		||||
      sfixed32_value: 2147483647,
 | 
			
		||||
      sfixed64_value: "-4611686018427387904",
 | 
			
		||||
      sint32_value: 2147483647,
 | 
			
		||||
      sint64_value: "4611686018427387903",
 | 
			
		||||
      nonConventionalNameValue: "camelCase",
 | 
			
		||||
 | 
			
		||||
      nested: [
 | 
			
		||||
       { name: "bar", amount: 10 },
 | 
			
		||||
       { name: "baz", amount: 20 },
 | 
			
		||||
      ],
 | 
			
		||||
      repeated_string_value: ["a", "b", "c"],
 | 
			
		||||
      oneof_string: "x",
 | 
			
		||||
      // TODO(yugui) Support enum by name
 | 
			
		||||
      map_value: { a: 1, b: 2 },
 | 
			
		||||
      mapped_string_value: { a: "x", b: "y" },
 | 
			
		||||
      mapped_nested_value: {
 | 
			
		||||
        a: { name: "x", amount: 1 },
 | 
			
		||||
        b: { name: "y", amount: 2 },
 | 
			
		||||
      },
 | 
			
		||||
    };
 | 
			
		||||
 | 
			
		||||
    beforeEach(function(done) {
 | 
			
		||||
      client.ABitOfEverythingService.CreateBody({
 | 
			
		||||
        body: expected,
 | 
			
		||||
      }).then(function(resp) {
 | 
			
		||||
        created = resp.obj;
 | 
			
		||||
      }).catch(function(err) {
 | 
			
		||||
        done.fail(err);
 | 
			
		||||
      }).then(done);
 | 
			
		||||
    });
 | 
			
		||||
 | 
			
		||||
    it('should assign id', function() {
 | 
			
		||||
      expect(created.uuid).not.toBe("");
 | 
			
		||||
    });
 | 
			
		||||
 | 
			
		||||
    it('should echo the request back', function() {
 | 
			
		||||
      delete created.uuid;
 | 
			
		||||
      expect(created).toEqual(expected);
 | 
			
		||||
    });
 | 
			
		||||
  });
 | 
			
		||||
 | 
			
		||||
  describe('lookup', function() {
 | 
			
		||||
    var created;
 | 
			
		||||
    var expected = {
 | 
			
		||||
      bool_value: true,
 | 
			
		||||
      string_value: "strprefix/foo",
 | 
			
		||||
    };
 | 
			
		||||
 | 
			
		||||
    beforeEach(function(done) {
 | 
			
		||||
      client.ABitOfEverythingService.CreateBody({
 | 
			
		||||
        body: expected,
 | 
			
		||||
      }).then(function(resp) {
 | 
			
		||||
        created = resp.obj;
 | 
			
		||||
      }).catch(function(err) {
 | 
			
		||||
        fail(err);
 | 
			
		||||
      }).finally(done);
 | 
			
		||||
    });
 | 
			
		||||
 | 
			
		||||
    it('should look up an object by uuid', function(done) {
 | 
			
		||||
      client.ABitOfEverythingService.Lookup({
 | 
			
		||||
        uuid: created.uuid
 | 
			
		||||
      }).then(function(resp) {
 | 
			
		||||
        expect(resp.obj).toEqual(created);
 | 
			
		||||
      }).catch(function(err) {
 | 
			
		||||
        fail(err.errObj);
 | 
			
		||||
      }).finally(done);
 | 
			
		||||
    });
 | 
			
		||||
 | 
			
		||||
    it('should fail if no such object', function(done) {
 | 
			
		||||
      client.ABitOfEverythingService.Lookup({
 | 
			
		||||
        uuid: 'not_exist',
 | 
			
		||||
      }).then(function(resp) {
 | 
			
		||||
        fail('expected failure but succeeded');
 | 
			
		||||
      }).catch(function(err) {
 | 
			
		||||
        expect(err.status).toBe(404);
 | 
			
		||||
      }).finally(done);
 | 
			
		||||
    });
 | 
			
		||||
  });
 | 
			
		||||
 | 
			
		||||
  describe('Delete', function() {
 | 
			
		||||
    var created;
 | 
			
		||||
    var expected = {
 | 
			
		||||
      bool_value: true,
 | 
			
		||||
      string_value: "strprefix/foo",
 | 
			
		||||
    };
 | 
			
		||||
 | 
			
		||||
    beforeEach(function(done) {
 | 
			
		||||
      client.ABitOfEverythingService.CreateBody({
 | 
			
		||||
        body: expected,
 | 
			
		||||
      }).then(function(resp) {
 | 
			
		||||
        created = resp.obj;
 | 
			
		||||
      }).catch(function(err) {
 | 
			
		||||
        fail(err);
 | 
			
		||||
      }).finally(done);
 | 
			
		||||
    });
 | 
			
		||||
 | 
			
		||||
    it('should delete an object by id', function(done) {
 | 
			
		||||
      client.ABitOfEverythingService.Delete({
 | 
			
		||||
        uuid: created.uuid
 | 
			
		||||
      }).then(function(resp) {
 | 
			
		||||
        expect(resp.obj).toEqual({});
 | 
			
		||||
      }).catch(function(err) {
 | 
			
		||||
        fail(err.errObj);
 | 
			
		||||
      }).then(function() {
 | 
			
		||||
        return client.ABitOfEverythingService.Lookup({
 | 
			
		||||
          uuid: created.uuid
 | 
			
		||||
        });
 | 
			
		||||
      }).then(function(resp) {
 | 
			
		||||
        fail('expected failure but succeeded');
 | 
			
		||||
      }). catch(function(err) {
 | 
			
		||||
        expect(err.status).toBe(404);
 | 
			
		||||
      }).finally(done);
 | 
			
		||||
    });
 | 
			
		||||
  });
 | 
			
		||||
});
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										2
									
								
								vendor/github.com/grpc-ecosystem/grpc-gateway/examples/browser/bin/.gitignore
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										2
									
								
								vendor/github.com/grpc-ecosystem/grpc-gateway/examples/browser/bin/.gitignore
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,2 @@
 | 
			
		||||
/*
 | 
			
		||||
!/.gitignore
 | 
			
		||||
							
								
								
									
										21
									
								
								vendor/github.com/grpc-ecosystem/grpc-gateway/examples/browser/bower.json
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										21
									
								
								vendor/github.com/grpc-ecosystem/grpc-gateway/examples/browser/bower.json
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,21 @@
 | 
			
		||||
{
 | 
			
		||||
  "name": "grpc-gateway-example-browser",
 | 
			
		||||
  "description": "Example use of grpc-gateway from browser",
 | 
			
		||||
  "main": "index.js",
 | 
			
		||||
  "authors": [
 | 
			
		||||
    "Yuki Yugui Sonoda <yugui@gengo.com>"
 | 
			
		||||
  ],
 | 
			
		||||
  "license": "SEE LICENSE IN LICENSE file",
 | 
			
		||||
  "homepage": "https://github.com/grpc-ecosystem/grpc-gateway",
 | 
			
		||||
  "private": true,
 | 
			
		||||
  "dependencies": {
 | 
			
		||||
    "swagger-js": "~> 2.1"
 | 
			
		||||
  },
 | 
			
		||||
  "ignore": [
 | 
			
		||||
    "**/.*",
 | 
			
		||||
    "node_modules",
 | 
			
		||||
    "bower_components",
 | 
			
		||||
    "test",
 | 
			
		||||
    "tests"
 | 
			
		||||
  ]
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										43
									
								
								vendor/github.com/grpc-ecosystem/grpc-gateway/examples/browser/echo_service.spec.js
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										43
									
								
								vendor/github.com/grpc-ecosystem/grpc-gateway/examples/browser/echo_service.spec.js
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,43 @@
 | 
			
		||||
'use strict';
 | 
			
		||||
 | 
			
		||||
var SwaggerClient = require('swagger-client');
 | 
			
		||||
 | 
			
		||||
describe('EchoService', function() {
 | 
			
		||||
  var client;
 | 
			
		||||
 | 
			
		||||
  beforeEach(function(done) {
 | 
			
		||||
    new SwaggerClient({
 | 
			
		||||
      url: "http://localhost:8080/swagger/echo_service.swagger.json",
 | 
			
		||||
      usePromise: true,
 | 
			
		||||
    }).then(function(c) {
 | 
			
		||||
      client = c;
 | 
			
		||||
      done();
 | 
			
		||||
    });
 | 
			
		||||
  });
 | 
			
		||||
 | 
			
		||||
  describe('Echo', function() {
 | 
			
		||||
    it('should echo the request back', function(done) {
 | 
			
		||||
      client.EchoService.Echo(
 | 
			
		||||
          {id: "foo"},
 | 
			
		||||
          {responseContentType: "application/json"}
 | 
			
		||||
      ).then(function(resp) {
 | 
			
		||||
        expect(resp.obj).toEqual({id: "foo"});
 | 
			
		||||
      }).catch(function(err) {
 | 
			
		||||
        done.fail(err);
 | 
			
		||||
      }).then(done);
 | 
			
		||||
    });
 | 
			
		||||
  });
 | 
			
		||||
 | 
			
		||||
  describe('EchoBody', function() {
 | 
			
		||||
    it('should echo the request back', function(done) {
 | 
			
		||||
      client.EchoService.EchoBody(
 | 
			
		||||
          {body: {id: "foo"}},
 | 
			
		||||
          {responseContentType: "application/json"}
 | 
			
		||||
      ).then(function(resp) {
 | 
			
		||||
        expect(resp.obj).toEqual({id: "foo"});
 | 
			
		||||
      }).catch(function(err) {
 | 
			
		||||
        done.fail(err);
 | 
			
		||||
      }).then(done);
 | 
			
		||||
    });
 | 
			
		||||
  });
 | 
			
		||||
});
 | 
			
		||||
							
								
								
									
										81
									
								
								vendor/github.com/grpc-ecosystem/grpc-gateway/examples/browser/gulpfile.js
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										81
									
								
								vendor/github.com/grpc-ecosystem/grpc-gateway/examples/browser/gulpfile.js
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,81 @@
 | 
			
		||||
"use strict";
 | 
			
		||||
 | 
			
		||||
var gulp = require('gulp');
 | 
			
		||||
 | 
			
		||||
var path = require('path');
 | 
			
		||||
 | 
			
		||||
var bower = require('gulp-bower');
 | 
			
		||||
var exit = require('gulp-exit');
 | 
			
		||||
var gprocess = require('gulp-process');
 | 
			
		||||
var shell = require('gulp-shell');
 | 
			
		||||
var jasmineBrowser = require('gulp-jasmine-browser');
 | 
			
		||||
var webpack = require('webpack-stream');
 | 
			
		||||
 | 
			
		||||
gulp.task('bower', function(){
 | 
			
		||||
  return bower();
 | 
			
		||||
});
 | 
			
		||||
 | 
			
		||||
gulp.task('server', shell.task([
 | 
			
		||||
  'go build -o bin/example-server github.com/grpc-ecosystem/grpc-gateway/examples/server/cmd/example-server',
 | 
			
		||||
]));
 | 
			
		||||
 | 
			
		||||
gulp.task('gateway', shell.task([
 | 
			
		||||
  'go build -o bin/example-gw github.com/grpc-ecosystem/grpc-gateway/examples',
 | 
			
		||||
]));
 | 
			
		||||
 | 
			
		||||
gulp.task('serve-server', ['server'], function(){
 | 
			
		||||
  gprocess.start('server-server', 'bin/example-server', [
 | 
			
		||||
      '--logtostderr',
 | 
			
		||||
  ]);
 | 
			
		||||
  gulp.watch('bin/example-server', ['serve-server']);
 | 
			
		||||
});
 | 
			
		||||
 | 
			
		||||
gulp.task('serve-gateway', ['gateway', 'serve-server'], function(){
 | 
			
		||||
  gprocess.start('gateway-server', 'bin/example-gw', [
 | 
			
		||||
      '--logtostderr', '--swagger_dir', path.join(__dirname, "../examplepb"),
 | 
			
		||||
  ]);
 | 
			
		||||
  gulp.watch('bin/example-gateway', ['serve-gateway']);
 | 
			
		||||
});
 | 
			
		||||
 | 
			
		||||
gulp.task('backends', ['serve-gateway', 'serve-server']);
 | 
			
		||||
 | 
			
		||||
var specFiles = ['*.spec.js'];
 | 
			
		||||
gulp.task('test', ['backends'], function(done) {
 | 
			
		||||
  return gulp.src(specFiles)
 | 
			
		||||
    .pipe(webpack({output: {filename: 'spec.js'}}))
 | 
			
		||||
    .pipe(jasmineBrowser.specRunner({
 | 
			
		||||
      console: true,
 | 
			
		||||
      sourceMappedStacktrace: true,
 | 
			
		||||
    }))
 | 
			
		||||
    .pipe(jasmineBrowser.headless({
 | 
			
		||||
      findOpenPort: true,
 | 
			
		||||
      catch: true,
 | 
			
		||||
      throwFailures: true,
 | 
			
		||||
    }))
 | 
			
		||||
    .on('error', function(err) {
 | 
			
		||||
      done(err);
 | 
			
		||||
      process.exit(1);
 | 
			
		||||
    })
 | 
			
		||||
    .pipe(exit());
 | 
			
		||||
});
 | 
			
		||||
 | 
			
		||||
gulp.task('serve', ['backends'], function(done) {
 | 
			
		||||
  var JasminePlugin = require('gulp-jasmine-browser/webpack/jasmine-plugin');
 | 
			
		||||
  var plugin = new JasminePlugin();
 | 
			
		||||
 | 
			
		||||
  return gulp.src(specFiles)
 | 
			
		||||
    .pipe(webpack({
 | 
			
		||||
      output: {filename: 'spec.js'},
 | 
			
		||||
      watch: true,
 | 
			
		||||
      plugins: [plugin],
 | 
			
		||||
    }))
 | 
			
		||||
    .pipe(jasmineBrowser.specRunner({
 | 
			
		||||
      sourceMappedStacktrace: true,
 | 
			
		||||
    }))
 | 
			
		||||
    .pipe(jasmineBrowser.server({
 | 
			
		||||
      port: 8000,
 | 
			
		||||
      whenReady: plugin.whenReady,
 | 
			
		||||
    }));
 | 
			
		||||
});
 | 
			
		||||
 | 
			
		||||
gulp.task('default', ['test']);
 | 
			
		||||
							
								
								
									
										22
									
								
								vendor/github.com/grpc-ecosystem/grpc-gateway/examples/browser/index.html
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										22
									
								
								vendor/github.com/grpc-ecosystem/grpc-gateway/examples/browser/index.html
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,22 @@
 | 
			
		||||
<!DOCTYPE html>
 | 
			
		||||
<html>
 | 
			
		||||
  <head>
 | 
			
		||||
    <script type="application/javascript" src="bower_components/swagger-js/browser/swagger-client.min.js"></script>
 | 
			
		||||
    <script type="application/javascript">
 | 
			
		||||
      window.client = new SwaggerClient({
 | 
			
		||||
        url: "http://localhost:8080/swagger/echo_service.swagger.json",
 | 
			
		||||
        success: function() {
 | 
			
		||||
          client.EchoService.Echo(
 | 
			
		||||
              {id: "foo"},
 | 
			
		||||
              {responseContentType: "application/json"},
 | 
			
		||||
              function(data) {
 | 
			
		||||
                document.getElementById("echoBack").innerHTML = data.obj.id;
 | 
			
		||||
              });
 | 
			
		||||
        }
 | 
			
		||||
      })
 | 
			
		||||
    </script>
 | 
			
		||||
  </head>
 | 
			
		||||
  <body>
 | 
			
		||||
    <div id="echoBack"></div>
 | 
			
		||||
  </body>
 | 
			
		||||
</html>
 | 
			
		||||
							
								
								
									
										23
									
								
								vendor/github.com/grpc-ecosystem/grpc-gateway/examples/browser/package.json
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										23
									
								
								vendor/github.com/grpc-ecosystem/grpc-gateway/examples/browser/package.json
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,23 @@
 | 
			
		||||
{
 | 
			
		||||
  "name": "grpc-gateway-example",
 | 
			
		||||
  "version": "1.0.0",
 | 
			
		||||
  "description": "Example use of grpc-gateway from browser",
 | 
			
		||||
  "scripts": {
 | 
			
		||||
    "test": "echo \"Error: no test specified\" && exit 1"
 | 
			
		||||
  },
 | 
			
		||||
  "author": "",
 | 
			
		||||
  "license": "SEE LICENSE IN LICENSE.txt",
 | 
			
		||||
  "devDependencies": {
 | 
			
		||||
    "bower": "^1.7.9",
 | 
			
		||||
    "gulp": "^3.9.1",
 | 
			
		||||
    "gulp-bower": "0.0.13",
 | 
			
		||||
    "gulp-exit": "0.0.2",
 | 
			
		||||
    "gulp-jasmine-browser": "^1.3.2",
 | 
			
		||||
    "gulp-process": "^0.1.2",
 | 
			
		||||
    "gulp-shell": "^0.5.2",
 | 
			
		||||
    "jasmine": "^2.4.1",
 | 
			
		||||
    "phantomjs": "^2.1.7",
 | 
			
		||||
    "swagger-client": "^2.1.28",
 | 
			
		||||
    "webpack-stream": "^3.2.0"
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
		Reference in New Issue
	
	Block a user